菜鳥脫殼之脫殼的基礎知識(六)——手動查找IAT和修復Dump的程序


前面講了如何尋找OEP和脫殼,有的時候,Dump出來的時候不能正常運行,是因為還有一個輸入表沒有進行處理,一些加密殼會在IAT加密上面大做文章,用HOOK - API的外殼地址來代替真是的IAT的地址,讓脫殼者無法正確的還原程序的原始IAT,使得程序不能被破解,所以我們處理這些被加密IAT的地址的辦法是找到加密這些IAT的地址的跳轉(就是Magic Jump),將它修改為強制跳轉(JMP),使之無法加密IAT,從而達到脫殼修復的目的!
因為程序的IAT是連續的排列的,所以我們只需要找到IAT的起始位置和末位置,就可以確定IAT的地址和大小!有的IAT是JMP 類型的,有的是CALL類型的,所以,要想確定IAT的地址,就要先知道這個程序是怎樣調用IAT的,例如:

其對應的匯編是CALL DWORD PTR DS:[465198],即直接調用[465198]里的函數,地址465198在IAT中,指向GetVersion函數,我們點擊004464F7這句指令,右鍵,跟隨到數據窗口,內存地址!

此時的465198就是IAT的一部分,可以在數據窗口查看到它的內容:

我們右鍵,長型,地址查看:

這樣就可以看到其他的函數的函數名字了:

我們向上面翻,找到數據為0的dword的間隔,IAT最后是以0結尾的:

這個加殼程序的IAT的地址是:00464FFC,那么它的大小為:00465698 - 00464FFC = 69C.
此時就可以利用ImportREC來進行修復了!

輸入程序的OEP和剛剛得到RVA和大小,點擊獲取輸入信息,修復轉存,抓取DUMP的程序,進行修復,修復完畢后,運行修復后的程序,程序可以正常的運行:

注意點:

1.在ollydbg里面入口處地方,用olldump先將需要dmp的dll或者exe dmp到指定目錄

2.用ImportREC附加需要重定位的exe或者內部的dll,fixdmp時候選擇剛剛保存的dll。

附下載版文章:
http://www.2cto.com/uploadfile/2012/1205/20121205071819691.zip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM