手脱nSPack 2.1 - 2.5
1.载入PEID
使用核心扫描出的结果
nSPack 2.1 - 2.5 -> North Star/Liu Xing Ping
2.载入OD,一进来就是一个大跳转,F8跟着走
00410944 >- E9 327E0000 jmp Aspack变.0041877B ; //程序入口点 00410949 C7 ??? 0041094A 4E dec esi 0041094B FFC3 inc ebx 0041094D FFFF ??? 0041094F EB 0A jmp short Aspack变.0041095B 00410951 E8 40FFFF94 call 95410896 00410956 FD std
3.走到这里,看到一个push入栈,下一行ESP定律,下硬件断点,然后shift+F9运行
0041877B 68 13884100 push Aspack变.00418813 00418780 E8 84FEFFFF call Aspack变.00418609 ; //ESP 00418785 41 inc ecx 00418786 A4 movs byte ptr es:[edi],byte ptr d> 00418787 0018 add byte ptr ds:[eax],bl 00418789 14 3C adc al,0x3C 0041878B 38041C cmp byte ptr ss:[esp+ebx],al
4.落脚后记得删除硬件断点继续F8,看到一个向上跳转,按照常规思维是向上跳转的下一行F4,但是这样会跑飞,再按照常规思维是继续F8让这个向上跳转实现,但是实现后你会发现你继续F8的时候实际上是陷入了一个循环,那么我们要做的是在这个跳转的位置下断点F2,然后shift+F9运行,像最后一次异常法一样,找到最后一次异常。是第57次,58次就跑飞了
0041861B 89E5 mov ebp,esp ; //ESP落脚点 0041861D 81EC C0000000 sub esp,0xC0 00418623 89E7 mov edi,esp 00418625 0375 00 add esi,dword ptr ss:[ebp] 00418628 8A06 mov al,byte ptr ds:[esi] 0041862A 46 inc esi ; Aspack变.00418814 0041862B 0FB6C0 movzx eax,al 0041862E ^ FF2485 2B814100 jmp dword ptr ds:[eax*4+0x41812B] ; //下一行会跑飞 00418635 66:8B45 00 mov ax,word ptr ss:[ebp]
5.shift+F9运行57次后取消断点,然后F8一次就落到了这里,你会发现,原先跟上去的时候会陷入的循环,现在没有了,然后继续F8
004185FC 89EC mov esp,ebp ; //落脚点 004185FE 5A pop edx 004185FF 5A pop edx 00418600 5D pop ebp 00418601 59 pop ecx 00418602 9D popfd 00418603 58 pop eax
6.F8走到这里的时候,我们发现一个pushad,可以使用ESP定律了,下硬件断点,然后shift+F9运行
00410B19 9C pushfd 00410B1A 60 pushad 00410B1B E8 00000000 call Aspack变.00410B20 ; //ESP 00410B20 5D pop ebp 00410B21 81ED DC010000 sub ebp,0x1DC 00410B27 ^ E9 34FEFFFF jmp Aspack变.00410960
7.ESP落脚点,删除硬件断点,然后继续F8
00410B7C 9D popfd ; //落脚点 00410B7D EB 4E jmp short Aspack变.00410BCD 00410B7F F4 hlt 00410B80 FD std 00410B81 FFFF ??? 00410B83 8BDD mov ebx,ebp 00410B85 81EB 08000000 sub ebx,0x8
8.经过几次F8之后倒了这里,这个就是指向OEP的关键跳了,F8一下
00410BCD - E9 EE16FFFF jmp Aspack变.004022C0 ; //指向OEP的关键跳 00410BD2 8BB5 48FDFFFF mov esi,dword ptr ss:[ebp-0x2B8] 00410BD8 0BF6 or esi,esi 00410BDA 0F84 97000000 je Aspack变.00410C77 00410BE0 8B95 50FDFFFF mov edx,dword ptr ss:[ebp-0x2B0] 00410BE6 03F2 add esi,edx
9.来到OEP,可以脱壳了,需要注意的是,脱壳后需要使用LoadPE重建PE表才能正常运行
004022C0 E8 970B0000 call Aspack变.00402E5C ; //OEP 004022C5 E8 C60A0000 call Aspack变.00402D90 004022CA 8BF0 mov esi,eax 004022CC 6A 00 push 0x0 004022CE 68 B3534000 push Aspack变.004053B3 004022D3 56 push esi 004022D4 E8 570D0000 call Aspack变.00403030 004022D9 A2 F7594000 mov byte ptr ds:[0x4059F7],al 004022DE 6A 00 push 0x0 004022E0 68 BA534000 push Aspack变.004053BA
10.运行,查壳
运行OK,查壳:TASM / MASM (312 ms)
- 本文为博主学习笔记,未经博主允许不得转载
- 本文仅供交流学习,请勿用于非法途径
- 本文仅是个人意见,如有想法,欢迎交流