菜鳥脫殼之脫殼的基礎知識(六)——手動查找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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章