1.载入PEID
ASProtect v1.23 RC1
2.载入OD,不勾选内存访问异常,其他异常全部勾选
00401000 > 68 01C04200 push 跑跑排行.0042C001 ; //入口处00401005 E8 01000000 call 跑跑排行.0040100B0040100A C3 retn0040100B C3 retn0040100C D6 salc0040100D 54 push esp0040100E 4A dec edx0040100F 60 pushad00401010 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 eax009E2CDB 833D 7C6D9E00 0>cmp dword ptr ds:[9E6D7C],0009E2CE2 74 14 je short 009E2CF8009E2CE4 6A 0C push 0C009E2CE6 B9 7C6D9E00 mov ecx,9E6D7C009E2CEB 8D45 F8 lea eax,dword ptr ss:[ebp-8]009E2CEE BA 04000000 mov edx,4009E2CF3 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,F2009E2D0F 5F pop edi009E2D10 5E pop esi009E2D11 5B pop ebx
5.程序到这里有两种方式可以到达OEP:
- 第一种:
打开内存窗口,在00401000处下段然后shift+F9就可以到达OEP
0040A41E 55 push ebp ; //来到OEP0040A41F 8BEC mov ebp,esp0040A421 6A FF push -10040A423 68 C8CB4000 push 跑跑排行.0040CBC80040A428 68 A4A54000 push 跑跑排行.0040A5A4 0040A42D 64:A1 00000000 mov eax,dword ptr fs:[0]0040A433 50 push eax0040A434 64:8925 0000000>mov dword ptr fs:[0],esp0040A43B 83EC 68 sub esp,68
- 第二种:
找到堆栈窗口第四行(跑跑排行榜.0040000下面两行)的值,也就是”0012FFA4”,然后命令行下硬件断点”hr 0012FFA4”,然后shift+F9运行一次
堆栈窗口:
0012FF5C 009F2BF4 //第一行0012FF60 00400000 跑跑排行.004000000012FF64 3D375BA50012FF68 0012FFA4 //第四行0012FF6C 009D00000012FF70 009B0000
这里是一个大跳转,也就是指向OEP的关键跳,F8单步一次
009F3457 - FFE0 jmp eax ; //落脚点009F3459 66:8BC4 mov ax,sp009F345C BD F2E44268 mov ebp,6842E4F2009F3461 F7D5 not ebp009F3463 81C5 8039C332 add ebp,32C33980009F3469 80D2 51 adc dl,51009F346C BF A1CAF122 mov edi,22F1CAA1009F3471 C1CF B3 ror edi,0B30040A41E 55 push ebp ; //来到OEP0040A41F 8BEC mov ebp,esp0040A421 6A FF push -10040A423 68 C8CB4000 push 跑跑排行.0040CBC80040A428 68 A4A54000 push 跑跑排行.0040A5A4 0040A42D 64:A1 00000000 mov eax,dword ptr fs:[0]0040A433 50 push eax0040A434 64:8925 0000000>mov dword ptr fs:[0],esp0040A43B 83EC 68 sub esp,68
6.然后依然是LoadPE+ImportREC脱壳,注意使用ImportREC修复的时候等级1+插件修复
7.运行查壳
运行OK,查壳:Microsoft Visual C++ v6.0