逆向 修复导入表笔记

由于本人不经常手动脱壳,怕过久了就不记得具体步骤了,这里做个笔记。

前言

这里我以aspack壳为例,该壳遵循esp脱壳定律,同时分享本次实验用到的源文件、脱壳文件、IDA分析文件打包下载:http://file.eonew.cn/ctf/re/reverse2_final.zip

脱壳

首先将reverse2_final.exe,拖到OD中,程序会在OEP处停下。第一条指令就是pushad,先执行到下一条指令(按F8即可),然后在esp下硬件断点。情况如下图:

然后按F9直接运行到断点位置,接下来就是找OEP了,不同的版本的编译器编译出来的程序略有差异,所以OEP也会略有不同,在不同的地方多实验几次就行,这里我说一下我的一个办法。

笨办法

先说一下main的启动规律,程序先在start,也就是OEP处开始运行。然后做完一些操作后进入tmainCRTStartu函数,然后再做完一些操作后进入main函数。

先在程序的第一或者第二个跳转指令执行后进行脱壳,后面将脱壳的程序用IDA分析,如果IDA分析正确的话,说明我们一次性脱壳成功了,如果识别错了。我们可以自己识别main函数,然后用IDA的交叉引用找到tmainCRTStartu函数,然后再用一次IDA的交叉引用即可找到OEP了。

脱壳具体步骤:插件 -> OllyDump -> 脱壳在当前调试的程序, 在新打开的窗口点击脱壳,然后保存脱壳文件即可。

之后,会发现脱壳的文件不能正常运行,将脱壳文件拖入IDA查看,情况如下:

发现程序直接引用的dump下来的内存地址,而不是导入表的地址,所以当然会出错。这时我们可以用imports fixer进行修复。imports fixer可以去吾爱破解下载,https://down.52pojie.cn/Tools/PEtools/注意:程序要管理员权限运行

修复步骤如下,第一步点击你要修复的程序,在点击导入表部分(IT & IAT)。

然后勾选text部分。因为大部分的导入函数都是在text里使用,所以要对text进行分析,然后点击Get Import,程序便会自动获取导入表,再点击Fix Dump修复脱壳的程序。然后程序会让你选择你想修复的程序,进行修复即可,修复完之后会生成一个IF结尾的修复文件。

注意

修复完了之后,程序的OEP可能会出现问题,对照我们原先的脱壳文件来修改程序的OEP即可。

总结

多做做笔记,以后不记得的时候也便于翻阅。