圖1由上圖我們可以得到以下資訊:
idt的rva資訊在檔案偏移160h處,值為84cc
idt的大小資訊在檔案偏移164h處,值為64h
1.1轉到idt處檢視具體資訊
轉到84cc也就是檔案偏移76cc
共有5個iid結構體(每個iid20個位元組,對應乙個dll相關資訊),最後乙個iid為null
由上圖我們發現並沒有足夠空間新增我們的dll,
那麼轉移idt
由圖1可知idt在.rdata節區,
檢視.rdata節區是否有多餘的空白區域
圖二
由上圖可知.rdata節區的檔案偏移為5200h,大小為2e00h
轉到8000h(5200+2e00),這裡我們從後往前看,因為節區中一般後面才會是null區域
從7e60~7fff都是null,
但是還不能直接將idt轉移至此處,
需要先看看.rdata節區頭的資訊,看看該空白區域是不是有效的null區域(不一定是null就能用,只有在節區頭中規定了的區域才是有效的)
由圖2可知:.rdata節區在檔案中大小為2e00h,在記憶體中大小為2c56h,很明顯還有1aa(2e00-2c56)的空間可以使用,那麼我們可以放心的將idt轉移到此處
轉到檔案偏移160h:
修改idt的rva與size:
8c80就是檔案偏移7e80處,大小多了14h(20個位元組),就是我們新增的dll
繫結匯入表是一種提高dll載入速度的技術,如果其值為0,則不用修改,如果不為0,那麼要將其置位0,使其不存在(因為繫結匯入表不存在是允許的,但如果存在,裡面資訊記錄錯誤,那麼會導致程式執行時出錯)
可以看到其值為0
將之前的idt資訊(84cc處)複製到新位置8c80(檔案偏移7e80):
iid中有3個重要成員需要寫入:
int的rva
dll名字的rva
iat的rva
這裡用的8d00,8d10,8d20對應檔案偏移7f00,7f10,7f20
正好在下面,比較方便
pe檔案載入到記憶體時,pe裝載器會修改iat,將函式實際位址寫入iat,所以iat所在節區必須要有可寫屬性,這是一種方法
因為可選頭的最後乙個成員data directory陣列含有iat,所以直接轉到此區域為dummy新增iat,然後將整個iat大小新增8個位元組即可,這是另外一種方法
先試試方法一
iat在.rdata節區,修改.rdata屬性
將40000040與80000000(可寫屬性值)進行bit or運算,得到c0000040
dll匯入成功
Dll注入 修改PE檔案頭
dll注入,除了常見的遠執行緒注入,掛鉤和修改登錄檔以外還可以通過修改pe檔案頭來達到注入目的,廢話少說先上菜。pe檔案經常會呼叫外部dll檔案,而需要呼叫的dll檔案都會在pe檔案說明,通過 nt頭 可選頭 匯入表 可以找到匯入表,而匯入表就是對需要匯入的每個dll的說明,它實際上是乙個20個位元...
第25章 通過修改PE載入DLL
前面的 沒有什麼特別的意義,了解即可.需要注意的是dummy這段 前面的 主要是為了執行想要的功能,在一載入dll時就能執行.而dummy 函式是為了保證此dll檔案能夠順利的新增到textview.exe檔案的匯入表中 然後由程式在執行時會載入此dll檔案 pe檔案中的idt image dire...
如何修改PE頭載入DLL
1.檢視pe檔案的idt,每乙個dll對應乙個iid 20個位元組,十六進製制下為14 如果原idt有足夠空間,則可以直接在原idt後面新增dll,如果沒有足夠空間,那麼需要將idt遷移至程式空白區域。乙個idt包含多個iid,最後是乙個20位元組的空白區域,所以說足夠空間的意思就是當你加入你自己的...