32. 脱壳篇-简单带壳的程序、反调试带壳的程序(堆栈平衡原理找OEP、代码段设置断点)
第一个程序
OEP为46B6F9
PE头位置为46B000到46D000区间,have a nice day! 就是壳
一定要点上箭头指向处,dump改名
清除区段 ,删除壳,保存
第二个程序(市面上60%-80%)根据堆栈平衡原理寻找OEP
F8后到下图位置,但并不是OEP
因为地址与PE差别大,壳伪造了我们的text,rdata,data
开始寻找OEP
观察ESP值是否变化,如果发现变化我们就开始行动
第一次变化
右键
F9,停靠在硬件断点处,大部分jmp eax就是OEP,但是强壳不是
回到了程序的代码段
F8进入OEP
右键
删除壳
LordPE编辑,修改代码基址,数据基址保存
RebuildPE
第三个程序
应用堆栈平衡法找到OEP,这里的代码段、数据段、输入表和壳在同一个区间
所以必须要重建输入表
因为重建了输入表,所以Sections会多一行,就是重建输入表
删除ex_cod,这里的代码段、数据段、输入表和壳在同一个区间,在保存前最好有一个备份,删错了可以重新来过
RebuildPE,OK
第四个程序
MEW,免费的壳,压缩壳
一步到位
F8
第五个程序(代码段上断点法)
NoNamePacker壳
F9运行,此程序带有反调试系统
F8单步运行
或者查找IsDebuggerPresent,Alt+F9
je -> jmp
代码段设置断点
断点停下来了,注释也看到了401000的地址
但是这不是我们要的位置,所以我们返回M界面,继续代码段下断点F2,跳转后还不是就再继续下断点等待循环匹配成功
也可以选择”设置内存访问断点“,这样可以按F9循环,不用再打断点
ctrl+F8快速自动循环,查看循环再搞什么,F12暂停
循环后下断点,F9跳出循环,再在代码段下断点,F9,大量经验告诉我就样是最快的方法
Prt可以删除,注意要保留备份,要不然失败会很麻烦