-
-
[原创]常见脱壳方法总结
-
发表于:
2020-1-3 00:21
13012
-
小弟刚刚学逆向不久,希望可以和大佬们交流交流
拖进OK第一条指令就是PUASAD,这个说明加壳了。
然后按下F8,当只有ESP和EIP为红色时,说明可以使用ESP定律:
此时选中ESP然后右键 HW Break [ESP]
然后F9运行,会自动断下,代码大概格式如下:
这里重点来了,选中jnz指定下一行,jmp指令上一行,将此处设为新EIP:
然后F8跳转过后,就会来到OEP处。
在程序进入后一直疯狂按F8,但是不能让程序回跳。也就是在回跳的地方的下一行按F4然后继续F8,有Call的话直接跟进:
一直F8,到达要回跳的地方:
又遇到一个:
一直反复刚刚的动作,直到遇到call后按F7跟进:
然后继续F8,遇到Call跟进(其实可以不用跟进,因为跟进是怕程序跑飞),到这里已经找到OEP了:
OK->选项->调试设置->SFX设置如下:
然后把程序拖到OD中,自动跳转到了入口点:
首先查看区段:
在data段下内存断点:
然后F9运行程序,会自动断下,断下后删除data的内存断点:
在Text段下内存访问断点:
再次F9就会来到程序入口处:
首先观察第一行代码为pushad,既然有pash那就有pop,所以我们搜索popad,有很多个:
一个一个看,找popad后面有返回的,有就下断,断下了就说明是我们要找的。
下断运行,成功断下:
然后单步到返回处,返回后就到了OEP了:
首先必须得知道是什么语言写的,然后直接根据语言特性下断
比如说MFC程序,会在OninitDialog调用GetSystemMenu此函数,我们就直接在此函数下断。
然后运行会自动断下,一直执行到返回:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!