跳转至

DUMP 及 IAT 重建

原理

在找到程序OEP後, 我們需要將程序dump出來, 並重建IAT. IAT全名是Import Address Table, 表項指向函數實際地址.

示例

比如如下, 我們找到了OEP, 到達了程序的真正入口點. 我們這時就需要將程序dump出來. 我們右鍵, 選擇"用OllyDump脫殼調試進程"(不過你也可以使用LoadPE來dump出來):

right_click.jpg

彈出一個窗口, 看一下地址是否正確, 主要就是看看入口點地址有沒有選對. 然後取消勾選重建輸入表.

dump.png

將dump出的文件命名, 我這裏是命名爲dump.exe啦. 我們嘗試來運行一下dump.exe, 可以發現程序無法正常運行, 對於一些簡單的殼, 你dump出來發現無法正常運行, 如果你確實找到了正確的OEP並用IDA反編譯查看結果良好, 那麼你的第一想法就應該是程序的IAT出現了問題. 你就需要重建IAT.

我們需要使用ImportREC來幫助修復輸入表.

打開ImportREC, 選擇一個正在運行的進程原版.exe(原版.exe是我在OD中正在調試的進程, OD中的EIP正處在OEP位置, 在用Ollydump之後不要關閉這個進程哦.). ImportREC修復輸入表入口點需要知道OEP, 也就是要在窗口右側中間的OEP輸入框中進行輸入

importrec.png

我們所知, 在Ollydbg裏我們知道程序目前在的入口點是0049C25C, 而鏡像基址是00400000

因此我們這裏需要填寫OEP0009C25C

我們修改ImportREC中的OEP0009C25C然後點擊AutoSearch後, 彈出提示框"發現可能是原IAT地址"

auto_search.png

我們點擊"Get Imports"按鈕便可以重建IAT. 左側會顯示IAT中各導入函數的地址以及是否有效. 顯然在圖中可以看到ImportREC找到了內存中IAT的位置並檢測出各個函數都是有效的.

get_imports.png

我們點擊Fix Dump, 然後打開先前使用OllyDump插件轉儲出來的文件,也就是dump.exe文件。

那麼ImportREC就會幫助恢復導入表,並生成dump_.exe文件. dump_.exe可以正常運行