手脱PECompact v2.xx
声明:1.只为纪录自己成长历程,高手勿喷
2.您的热心是新手持续发帖的动力
个人认为这个壳对于新手有那么一点点难度,所以用单步和ESP都跑一下,我觉得单步是最最基础的,所以一定要掌握
一、单步
1.PEID查壳
PECompact v2.xx (16 ms)
2.载入OD,除了以下标注的几个位置外,其他的都使用F8
0040A86D >B8 74DE4500 mov eax,qqspirit.0045DE74 ; //入口点
0040A872 50 push eax
0040A873 64:FF35 0000000>push dword ptr fs:
0040A87A 64:8925 0000000>mov dword ptr fs:,esp
0040A881 33C0 xor eax,eax
0040A883 8908 mov dword ptr ds:,ecx
0040A885 50 push eax
位置1:
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:
778D5650 >B8 3C000000 mov eax,0x3C ; //F7落脚点
778D5655 BA 0003FE7F mov edx,0x7FFE0300
778D565A FF12 call dword ptr ds: ; //程序会跑飞F7跟进
778D565C C2 0800 retn 0x8
778D565F 90 nop
778D5660 >B8 3D000000 mov eax,0x3D
778D71B0 >8BD4 mov edx,esp ; //第二个F7落脚点
778D71B2 0F34 sysenter
778D71B4 >C3 retn
778D71B5 8DA424 00000000 lea esp,dword ptr ss:
778D71BC 8D6424 00 lea esp,dword ptr ss:
778D71C0 >8D5424 08 lea edx,dword ptr ss:
3.找到了指向OEP的跳转
0045DF34 5B pop ebx
0045DF35 5D pop ebp
0045DF36- FFE0 jmp eax ; //指向OEP的跳转
0045DF38 6D ins dword ptr es:,dx
0045DF39 A8 40 test al,0x40
0045DF3B 0000 add byte ptr ds:,al
4.来到OEP,脱壳吧
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 00000000mov eax,dword ptr fs:
0040A882 50 push eax
0040A883 64:8925 0000000>mov dword ptr fs:,esp
5.运行查壳
运行OK,查壳:Microsoft Visual C++ v6.0
二、ESP定律
1.载入OD,看到两个push入栈,下一行ESP定律下硬件访问断点然后shift+F9运行一次
0040A86D >B8 74DE4500 mov eax,qqspirit.0045DE74 ; //入口点
0040A872 50 push eax
0040A873 64:FF35 0000000>push dword ptr fs:
0040A87A 64:8925 0000000>mov dword ptr fs:,esp ; //ESP定律一次
0040A881 33C0 xor eax,eax
0040A883 8908 mov dword ptr ds:,ecx
2.来到ESP的落脚点,单步F8跟下去就能到OEP了
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的跳转
0045DF34 5B pop ebx
0045DF35 5D pop ebp
0045DF36- FFE0 jmp eax ; //指向OEP的跳转
0045DF38 6D ins dword ptr es:,dx
0045DF39 A8 40 test al,0x40
4.来到OEP,脱壳、运行、查壳
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 00000000mov eax,dword ptr fs:
0040A882 50 push eax
0040A883 64:8925 0000000>mov dword ptr fs:,esp
0040A88A 83EC 58 sub esp,0x58
学习,学习! 学习学习 脱壳单步的过程中,怎么才能知道那个是关键点?{:301_1008:} 永远向前看 发表于 2015-11-14 17:41
脱壳单步的过程中,怎么才能知道那个是关键点?
跳向OEP的那个跳转不就是关键跳了{:301_997:}
这个需要多练习
没有公式一样的捷径
练多了就知道了
页:
[1]