脱壳_详细_各种方法
1、ESP 定律
1.1、第10讲
压栈 --> 数据窗口跟随ESP的值,设置 硬件(软件)访问(写入)断点 --> (shift+)F9
2、内存镜像
2.1、第10讲
OD“内存映射”界面,第1个".rsrc"节设置 F2断点 --> Shift+F9 --> “内存映射”界面 00401000处设置 F2断点 --> Shift+F9
3、模拟跟踪法
3.1、第10讲. SFX
OD 选项--> 调试设置 --> SFX选项卡 --> “块方式跟踪真正入口处(不准确)”
重新载入 --> OD自动开始跟踪 --> 自动跳到OEP
3.2、第10讲. “tc eip<????????”
OD 选项--> 调试设置 --> SFX选项卡 --> “停止在自释放器的入口”
重新载入
“内存映射”界面 --> 找到"SFX"的那个节 --> 敲入命令“tc eip<0040E000” (ZC: 0040E000 就是 "SFX"的那个节 的"地址") --> OD显示正在跟踪(时间较长,机器也可能变比较卡)
ZC: tc 命令 应该不止可以跟踪EIP,也可以跟踪ESP等
4、最后一次异常法
4.1、第10讲
OD 选项--> 调试设置 --> 异常 --> 除了 "忽略在KERNEL32中发生的内存访问异常" 之外,其他所有的"√" 全部去掉。
重新载入 --> Shift+F9 3次,程序跑飞
重新载入 --> Shift+F9 2次 --> 堆栈窗口 找 "SE 句柄"(ZC: 对应的异常回调函数指针为0040CCD7) --> 反汇编窗口 Ctrl+G,输入0040CCD7 --> 在转到的地址 下F2断点 --> Shift+F9 --> 取消刚才的F2断点(ZC: 这时程序断在了F2断点处) --> 使用 单步法
4.2、第16讲
【500】【02:45】OD重新载入,隐藏OD(OD-->插件-->OD调试隐藏插件-->隐藏OD),SHIFT+F9 到最后一次异常, Shift+F9 2次 程序跑飞。
【635】【03:31】OD重新载入-->隐藏OD-->Shift+F9 1次 --> 来到这里 --> 堆栈窗口 --> SE 句柄,右键,数据窗口中跟随 --> 数据窗口,右键,内存访问断点 (∵这个壳 对断点检测的比较厉害,一般的断点可能断不下来,∴我们选择内存访问断点)--> Shift+F9 --> 断在这里,下F2断点--> Shift+F9 --> 断在这里,下F2断点 --> Shift+F9 --> 删掉刚才的 内存访问断点 和 2个F2断点 --> 【915】【05:05】给大家看一下,如果忘记删除 内存访问断点的话,会是什么样子的情况(ZC: 应该是如果有相应的异常的话,就执行到 异常处理函数里面去了[异常处理函数/相关的指令 没有被改掉的话]) --> 【975】【05:25】应该是要F4执行到这里,但是程序直接跑到了上面(ZC: 注意看,断在这里 是∵内存访问,而非 异常处理函数执行到这里) --> 【1025】【05:41】清除内存访问断点 --> F4 来到retn处 --> "内存映射"窗口 00401000处 下F2断点 --> Shift+F9 --> 程序 出现(壳代码里面的)提示信息 --> 来到OEP
5、单步法
5.1、第14讲
【760】【04:13】单步法 (近CALL 就F7跟进,远CALL就F8)(ZC: 那到底 多远的CALL算远CALL?)
向上跳转 ==> 下一句指令处 F4;向下跳转 ==> F7 / F8
6、
100、OD插件脱壳() ==> "重建输入表" 前面的"√" ==> 何时需要保留?何时需要取消?
100.1、第17课 【1600】【08:52】"重建输入表" 前面的"√"取消
100.2、第19课 【1285】【07:07】OD插件(OllyDump)脱壳(不√选 "重建输入表")
X