Skip to content

DUMP 及 IAT 重建

Warning

The current page still doesn't have a translation for this language.

You can read it through Google Translate.

Besides, you can also help to translate it: Contributing.

原理

在找到程序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可以正常运行