1.PEID载入
ASPack v2.12
2.载入OD,跟之前帖子的入口特征相同,都是一个pushad,但是请不要怀疑这是同一个壳,绝对不是,pushad下一行ESP定律下硬件断点,然后shift+F9运行一次
0057E001 > 60 pushad ; //程序入口点 0057E002 E8 03000000 call memcolla.0057E00A ; //ESP定律 0057E007 - E9 EB045D45 jmp 45B4E4F7 0057E00C 55 push ebp 0057E00D C3 retn 0057E00E E8 01000000 call memcolla.0057E014
3.ESP落脚点,删除硬件断点继续F8,注意,普通的aspack壳在注释的地方会跳向OEP,但是这个没有
0057E3B0 /75 08 jnz short memcolla.0057E3BA ; //程序落脚点 0057E3B2 |B8 01000000 mov eax,0x1 0057E3B7 |C2 0C00 retn 0xC 0057E3BA \68 00104000 push memcolla.00401000 0057E3BF C3 retn ; //普通壳会在这里跳向OEP 0057E3C0 8B85 26040000 mov eax,dword ptr ss:[ebp+0x426] 0057E3C6 8D8D 3B040000 lea ecx,dword ptr ss:[ebp+0x43B]
4.步骤3的retn跳向的位置,到这里继续F8
00401000 87C0 xchg eax,eax ; //跳转的位置 00401002 FC cld 00401003 80EC 00 sub ah,0x0 00401006 83F1 00 xor ecx,0x0 00401009 90 nop
5.这是一个近call,F7跟进,然后继续F8就可以到达OEP了,需要注意的是中间有几个向上跳转,记得在下一行F4
0057D40D E8 12000000 call memcolla.0057D424 ; //F7 0057D412 80CA 00 or dl,0x0 0057D415 50 push eax 0057D416 9C pushfd 0057D417 58 pop eax 0057D418 F6C4 01 test ah,0x1 0057D41B - 75 FE jnz short memcolla.0057D41B
6.找到关键跳,F8一下就可以到OEP了
0057D5A3 61 popad 0057D5A4 BA F8085000 mov edx,memcolla.005008F8 0057D5A9 - FFE2 jmp edx ; //指向OEP的关键跳 0057D5AB 0000 add byte ptr ds:[eax],al 0057D5AD 0000 add byte ptr ds:[eax],al
7.来到OEP,可以脱壳了
005008F8 55 push ebp ; //OEP 005008F9 8BEC mov ebp,esp 005008FB 83C4 F0 add esp,-0x10 005008FE 53 push ebx 005008FF 56 push esi 00500900 B8 10045000 mov eax,memcolla.00500410 00500905 E8 665FF0FF call memcolla.00406870 0050090A 8B1D 08415000 mov ebx,dword ptr ds:[0x504108] 00500910 8B35 9C415000 mov esi,dword ptr ds:[0x50419C]
8.运行,查壳
运行OK,查壳:Borland Delphi 4.0