1.载入PEID
ASProtect v1.23 RC1
2.载入OD,不勾选内存访问异常,其他异常全部勾选
00401000 > 68 01C04200 push 跑跑排行.0042C001 ; //入口处 00401005 E8 01000000 call 跑跑排行.0040100B 0040100A C3 retn 0040100B C3 retn 0040100C D6 salc 0040100D 54 push esp 0040100E 4A dec edx 0040100F 60 pushad 00401010 55 push ebp
3.使用最后一次异常法,来到最后一次异常处应该是第16次,第17次就跑飞了
009E2CD1 3100 xor dword ptr ds:[eax],eax ; //落脚点 009E2CD3 64:8F05 0000000>pop dword ptr fs:[0] 009E2CDA 58 pop eax 009E2CDB 833D 7C6D9E00 0>cmp dword ptr ds:[9E6D7C],0 009E2CE2 74 14 je short 009E2CF8 009E2CE4 6A 0C push 0C 009E2CE6 B9 7C6D9E00 mov ecx,9E6D7C 009E2CEB 8D45 F8 lea eax,dword ptr ss:[ebp-8] 009E2CEE BA 04000000 mov edx,4 009E2CF3 E8 54E1FFFF call 009E0E4C
4.往下拉找到最近的一个retn处F2,shift+F9,F2,让程序运行到指定位置
009E2D08 FF75 F0 push dword ptr ss:[ebp-10] 009E2D0B FF75 EC push dword ptr ss:[ebp-14] 009E2D0E C3 retn ; //F2,shift+F9,F2 009E2D0F 5F pop edi 009E2D10 5E pop esi 009E2D11 5B pop ebx
5.程序到这里有两种方式可以到达OEP:
- 第一种:
打开内存窗口,在00401000处下段然后shift+F9就可以到达OEP
0040A41E 55 push ebp ; //来到OEP 0040A41F 8BEC mov ebp,esp 0040A421 6A FF push -1 0040A423 68 C8CB4000 push 跑跑排行.0040CBC8 0040A428 68 A4A54000 push 跑跑排行.0040A5A4 0040A42D 64:A1 00000000 mov eax,dword ptr fs:[0] 0040A433 50 push eax 0040A434 64:8925 0000000>mov dword ptr fs:[0],esp 0040A43B 83EC 68 sub esp,68
- 第二种:
找到堆栈窗口第四行(跑跑排行榜.0040000下面两行)的值,也就是”0012FFA4”,然后命令行下硬件断点”hr 0012FFA4”,然后shift+F9运行一次
堆栈窗口:
0012FF5C 009F2BF4 //第一行 0012FF60 00400000 跑跑排行.00400000 0012FF64 3D375BA5 0012FF68 0012FFA4 //第四行 0012FF6C 009D0000 0012FF70 009B0000
这里是一个大跳转,也就是指向OEP的关键跳,F8单步一次
009F3457 - FFE0 jmp eax ; //落脚点 009F3459 66:8BC4 mov ax,sp 009F345C BD F2E44268 mov ebp,6842E4F2 009F3461 F7D5 not ebp 009F3463 81C5 8039C332 add ebp,32C33980 009F3469 80D2 51 adc dl,51 009F346C BF A1CAF122 mov edi,22F1CAA1 009F3471 C1CF B3 ror edi,0B3 0040A41E 55 push ebp ; //来到OEP 0040A41F 8BEC mov ebp,esp 0040A421 6A FF push -1 0040A423 68 C8CB4000 push 跑跑排行.0040CBC8 0040A428 68 A4A54000 push 跑跑排行.0040A5A4 0040A42D 64:A1 00000000 mov eax,dword ptr fs:[0] 0040A433 50 push eax 0040A434 64:8925 0000000>mov dword ptr fs:[0],esp 0040A43B 83EC 68 sub esp,68
6.然后依然是LoadPE+ImportREC脱壳,注意使用ImportREC修复的时候等级1+插件修复
7.运行查壳
运行OK,查壳:Microsoft Visual C++ v6.0