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出来):

弹出一个窗口, 看一下地址是否正确, 主要就是看看入口点地址有没有选对. 然后取消勾选重建输入表.

将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可以正常运行