由于本人不经常手动脱壳,怕过久了就不记得具体步骤了,这里做个笔记。
目录
前言
这里我以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即可。
总结
多做做笔记,以后不记得的时候也便于翻阅。