本文适合入门级别脱壳选手学习,可以作为方法总结笔记。目录如下:
1.DUMP修复方法
2.ESP定律的本质
3.二次内存镜像方法
4.搜索命令机器码(不断扩展)
5.模拟跟踪之SFX法
6.最后一次异常法
1.DUMP修复方法
在OD中提供两种方式进行脱壳,勾选重建输入表。对于一些简单的壳来说,一般都会直接成功。
可以使用LordPE找到目标PE,修正镜像大小,完整转存两步完事儿。此时DUMP下来的是整个PE在内存中的镜像。接下来使用Import REC修复。
注意这里的OEP要填RVA,修正转储时选中刚才用LordPE从内存中DUMP下来的镜像。
使用x32dbg中的Scylla插件dump修复是比较快捷稳定的。按图中所示进行操作,即可快速从OEP中修复原始程序。
2.ESP定律的本质
ESP定律的本质是在原程序只有ESP寄存器被改变时,(如pushad)设置硬件访问断点。当程序再次恢复保存栈区中的数据值时,引起中断。
在OD中有ESP定律的快捷方法,但是在X32dbg中必须知道它的原理才能成功下断点。
在ESP定律运行之后,要养成清除ESP硬件断点的习惯,不然可能影响后续分析。
3.二次内存镜像方法
首先在PE镜像的第一个.rsrc区段设置访问断点F9,断下来之后再在代码段.text段中设置访问断点F9。单步一会儿就到真正的OEP了。
此种方法适用范围较小。
4.搜索命令机器码
使用CTRL+F搜索命令,一般对脱壳有明显有用的命令为popad,jmp,call指令
注意这里不要勾选整个块,否则信息量太大反而难以判定哪个popad出来快到入口点。
另外可以搜索一些软件典型的入口点处机器码,如push ebp;mov ebp,esp的机器码是558BEC。
push 8000(强壳必用)
at GetVersion
5.模拟跟踪法之SFX法
SFX法隶属于模拟跟踪法,模拟跟踪法就是在内存窗口中找到PE镜像中包含SFX和输入表的区段,记下地址。
在命令栏中输入tc eip<address,这里是tc eip<00430000,回车之后左上角状态变成为跟踪,等待一段时间会断下来到入口点处。
接下来讲解SFX法。
该方法缺点是速度有点慢,但是比较省事儿。是使用块方式跟踪,还是字节方式跟踪,要视情况而定。
这里是使用SFX法勾选了第二个块方式跟踪,程序重新运行后断下来在这儿,单步几下就到真正OEP了。
注意右边提示的SFX代码真正入口点。
程序刚被OD打开时可能会断到系统启动断点,此时还没有到达OEP,这时直接F9就到设置的要断到的入口点地方了。
6.最后一次异常法
首先把OD中所有的所有异常忽略都清除掉。
OD插件中有StrongOD的还需勾选取消掉跳过一些异常。
测试程序在跑飞之前有多少次异常记为M次shift+F9,那么重新运行时shift+F9共M-1次,使程序停留在最后一次异常触发前,在栈中寻找SE处理程序,如图上右上角所示的0x0045DE74。
总结
这些方法中其中模拟跟踪法是OD自带的功能,一般简单的壳有效。之所以介绍这么多方法是因为很多壳都是灵活变化的,实际脱壳中还需灵活使用方法,灵活应对。
来源:CSDN
作者:摔不死的笨鸟
链接:https://blog.csdn.net/qq_43312649/article/details/103457902