声明:
1.只为纪录自己成长历程,高手勿喷
2.您的热心是新手持续发帖的动力
个人认为这个壳对于新手有那么一点点难度,所以用单步和ESP都跑一下,我觉得单步是最最基础的,所以一定要掌握
一、单步
1.PEID查壳
PECompact v2.xx (16 ms)
2.载入OD,除了以下标注的几个位置外,其他的都使用F8
[Asm] 纯文本查看 复制代码 0040A86D > B8 74DE4500 mov eax,qqspirit.0045DE74 ; //入口点
0040A872 50 push eax
0040A873 64:FF35 0000000>push dword ptr fs:[0]
0040A87A 64:8925 0000000>mov dword ptr fs:[0],esp
0040A881 33C0 xor eax,eax
0040A883 8908 mov dword ptr ds:[eax],ecx
0040A885 50 push eax
位置1:
[Asm] 纯文本查看 复制代码 778D711D 6A 00 push 0x0
778D711F 51 push ecx
778D7120 E8 2BE5FFFF call ntdll.ZwContinue ; //程序会跑飞F7跟进
778D7125 EB 0B jmp short ntdll.778D7132
778D7127 5B pop ebx
778D7128 59 pop ecx
778D7129 6A 00 push 0x0
位置2:
[Asm] 纯文本查看 复制代码 778D5650 > B8 3C000000 mov eax,0x3C ; //F7落脚点
778D5655 BA 0003FE7F mov edx,0x7FFE0300
778D565A FF12 call dword ptr ds:[edx] ; //程序会跑飞F7跟进
778D565C C2 0800 retn 0x8
778D565F 90 nop
778D5660 > B8 3D000000 mov eax,0x3D
[Asm] 纯文本查看 复制代码 778D71B0 > 8BD4 mov edx,esp ; //第二个F7落脚点
778D71B2 0F34 sysenter
778D71B4 > C3 retn
778D71B5 8DA424 00000000 lea esp,dword ptr ss:[esp]
778D71BC 8D6424 00 lea esp,dword ptr ss:[esp]
778D71C0 > 8D5424 08 lea edx,dword ptr ss:[esp+0x8]
3.找到了指向OEP的跳转
[Asm] 纯文本查看 复制代码 0045DF34 5B pop ebx
0045DF35 5D pop ebp
0045DF36 - FFE0 jmp eax ; //指向OEP的跳转
0045DF38 6D ins dword ptr es:[edi],dx
0045DF39 A8 40 test al,0x40
0045DF3B 0000 add byte ptr ds:[eax],al
4.来到OEP,脱壳吧
[Asm] 纯文本查看 复制代码 0040A86D > 55 push ebp ; //来到OEP
0040A86E 8BEC mov ebp,esp
0040A870 6A FF push -0x1
0040A872 68 78794200 push qqspirit.00427978
0040A877 68 F4E14000 push qqspirit.0040E1F4
0040A87C 64:A1 00000000 mov eax,dword ptr fs:[0]
0040A882 50 push eax
0040A883 64:8925 0000000>mov dword ptr fs:[0],esp
5.运行查壳
运行OK,查壳:Microsoft Visual C++ v6.0
二、ESP定律
1.载入OD,看到两个push入栈,下一行ESP定律下硬件访问断点然后shift+F9运行一次
[Asm] 纯文本查看 复制代码 0040A86D > B8 74DE4500 mov eax,qqspirit.0045DE74 ; //入口点
0040A872 50 push eax
0040A873 64:FF35 0000000>push dword ptr fs:[0]
0040A87A 64:8925 0000000>mov dword ptr fs:[0],esp ; //ESP定律一次
0040A881 33C0 xor eax,eax
0040A883 8908 mov dword ptr ds:[eax],ecx
2.来到ESP的落脚点,单步F8跟下去就能到OEP了
[Asm] 纯文本查看 复制代码 0045DEA3 83C4 04 add esp,0x4 ; //ESP落脚点
0045DEA6 55 push ebp
0045DEA7 53 push ebx
0045DEA8 51 push ecx
0045DEA9 57 push edi
3.来到关键跳,这就是指向OEP的跳转
[Asm] 纯文本查看 复制代码 0045DF34 5B pop ebx
0045DF35 5D pop ebp
0045DF36 - FFE0 jmp eax ; //指向OEP的跳转
0045DF38 6D ins dword ptr es:[edi],dx
0045DF39 A8 40 test al,0x40
4.来到OEP,脱壳、运行、查壳
[Asm] 纯文本查看 复制代码 0040A86D > 55 push ebp ; //OEP
0040A86E 8BEC mov ebp,esp
0040A870 6A FF push -0x1
0040A872 68 78794200 push qqspirit.00427978
0040A877 68 F4E14000 push qqspirit.0040E1F4
0040A87C 64:A1 00000000 mov eax,dword ptr fs:[0]
0040A882 50 push eax
0040A883 64:8925 0000000>mov dword ptr fs:[0],esp
0040A88A 83EC 58 sub esp,0x58
|