DUMP 及 IAT 重建¶
原理¶
在找到程序OEP後, 我們需要將程序dump出來, 並重建IAT
. IAT
全名是Import Address Table
, 表項指向函數實際地址.
示例¶
比如如下, 我們找到了OEP, 到達了程序的真正入口點. 我們這時就需要將程序dump出來. 我們右鍵, 選擇"用OllyDump脫殼調試進程"
(不過你也可以使用LoadPE
來dump出來):
彈出一個窗口, 看一下地址是否正確, 主要就是看看入口點地址
有沒有選對. 然後取消勾選重建輸入表
.
將dump出的文件命名, 我這裏是命名爲dump.exe
啦. 我們嘗試來運行一下dump.exe
, 可以發現程序無法正常運行, 對於一些簡單的殼, 你dump出來發現無法正常運行, 如果你確實找到了正確的OEP並用IDA
反編譯查看結果良好, 那麼你的第一想法就應該是程序的IAT
出現了問題. 你就需要重建IAT
.
我們需要使用ImportREC
來幫助修復輸入表.
打開ImportREC
, 選擇一個正在運行的進程原版.exe
(原版.exe
是我在OD中正在調試的進程, OD中的EIP
正處在OEP
位置, 在用Ollydump
之後不要關閉這個進程哦.). ImportREC
修復輸入表入口點需要知道OEP
, 也就是要在窗口右側中間的OEP
輸入框中進行輸入
我們所知, 在Ollydbg裏我們知道程序目前在的入口點是0049C25C
, 而鏡像基址是00400000
因此我們這裏需要填寫OEP
是0009C25C
我們修改ImportREC
中的OEP
爲0009C25C
然後點擊AutoSearch
後, 彈出提示框"發現可能是原IAT地址"
我們點擊"Get Imports"
按鈕便可以重建IAT
. 左側會顯示IAT
中各導入函數的地址以及是否有效. 顯然在圖中可以看到ImportREC
找到了內存中IAT
的位置並檢測出各個函數都是有效的.
我們點擊Fix Dump
, 然後打開先前使用OllyDump
插件轉儲出來的文件,也就是dump.exe
文件。
那麼ImportREC
就會幫助恢復導入表,並生成dump_.exe
文件. dump_.exe
可以正常運行