因爲程序的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