基础脱壳教程5:手脱PECompact2.X的壳

基础脱壳教程5:手脱PECompact2.X的壳

PECompact 2.x -> Jeremy Collake

1.单步

2.ESP定律

3.BP VirtualFree

下这种断点就能达到 OEP, 原因有待学习
在命令窗口直接输入 : BP VirtualFree
SHIFT+F9,取消断点
然后 "调试">"执行到用户代码" ALT+F9
查找 push 8000(特征码), 在今后脱强壳中可能还会用到
然后下断点, 取消断点
运行到这
单步跟

4.BP VirtualFree

还是这个断点
两次SHIFT+F9
中断后取消断点,Alt+F9返回
单步走。

关于 BP Virtualfree : http://www.d4rksec.org/Reverse/windows-api-breakpoint/

5.0040A86D > B8 74DE4500 mov eax,qqspirit.0045DE74


BP 0045DE74, 下这个断点
shift+F9 跟过去, 然后取消断点
发现下面有个 retn, 防止程序跑飞我们在 retn 的下一行下断点
shift+F9 运行过去, 取消断点单步跟

045DE74    B8 F9CB45F0     mov eax,F045CBF9
0045DE79    8D88 9E120010   lea ecx,dword ptr ds:[eax+1000129E]
0045DE7F    8941 01         mov dword ptr ds:[ecx+1],eax
0045DE82    8B5424 04       mov edx,dword ptr ss:[esp+4]
0045DE86    8B52 0C         mov edx,dword ptr ds:[edx+C]
0045DE89    C602 E9         mov byte ptr ds:[edx],0E9
0045DE8C    83C2 05         add edx,5
0045DE8F    2BCA            sub ecx,edx
0045DE91    894A FC         mov dword ptr ds:[edx-4],ecx
0045DE94    33C0            xor eax,eax
0045DE96    C3              retn
0045DE97    B8 78563412     mov eax,12345678            ;下断

6.bp VirtualAlloc SHIFT+F9运行

下这个断点
取消断点

ALT+F9

向下拉,看到JMP。运行到这

[重点]7.最后一次异常法


选项>调试设置>异常
取消所有异常
重新载入
shift+F9 * 1
视频里是两次 shift+F9 跑飞, 我是一次就飞了……

3、问异常法脱壳去掉忽略异常后怎么无法暂停。
解答:OD插件--StrongOD--Options--Skip Some Exceptions选项取消,重启OD再试试。

最后一次异常法就是利用倒数第二次 shift+F9, 然后在 "堆栈窗口" 找 SE 句柄

也就是 SE处理程序
ctrl+G 转到 SE xxxx 处
在 retn 下一句下断点, 后面同第 5 种方法

045DE74    B8 F9CB45F0     mov eax,F045CBF9
0045DE79    8D88 9E120010   lea ecx,dword ptr ds:[eax+1000129E]
0045DE7F    8941 01         mov dword ptr ds:[ecx+1],eax
0045DE82    8B5424 04       mov edx,dword ptr ss:[esp+4]
0045DE86    8B52 0C         mov edx,dword ptr ds:[edx+C]
0045DE89    C602 E9         mov byte ptr ds:[edx],0E9
0045DE8C    83C2 05         add edx,5
0045DE8F    2BCA            sub ecx,edx
0045DE91    894A FC         mov dword ptr ds:[edx-4],ecx
0045DE94    33C0            xor eax,eax
0045DE96    C3              retn
0045DE97    B8 78563412     mov eax,12345678            ;下断

8.两次内存镜像法


alt+M 找到 "内存"
找程序段的第一个 .rsrc, 下断运行
再次 alt+M 找到 "内存"
找程序段的第一个 .rsrc, 下断运行
单步跟, 有几个 call 会跑飞, 记得 F7 跟进去
然后发现其实错了, 第二次应该在 .text下断
然后在 0045DE97 下断, 因为这里和前面几种方法都一样, 所以直接到这里下断运行, 直接 F4 会跑飞
单步跟~

9.at GetVersion


直接 at GetVersion
然后在 7C81120A 下断点
shift+F9 再取消断点
单步跟一次, 然后向上拉发现 OEP