关于手脱ASPack壳的注意事项
最近,安装了一个做ISO的共享软件UltraISO,想分析一下,程序是加壳的,是ASPack壳(ASPack 2.12 -> Alexey Solodovnikov)。
好,现在脱壳!OD载入,断到下面位置:
00C0E001 > 60 pushad
00C0E002 E8 03000000 call UltraISO.00C0E00A
00C0E007 - E9 EB045D45 jmp 461DE4F7
00C0E00C 55 push ebp
00C0E00D C3 retn
00C0E00E E8 01000000 call UltraISO.00C0E014
00C0E013 EB 5D jmp short UltraISO.00C0E072
00C0E015 BB EDFFFFFF mov ebx,-13
00C0E01A 03DD add ebx,ebp
00C0E01C 81EB 00E08000 sub ebx,UltraISO.0080E000
00C0E022 83BD 22040000 0>cmp dword ptr ss:[ebp+422],0
00C0E029 899D 22040000 mov dword ptr ss:[ebp+422],ebx
00C0E02F 0F85 65030000 jnz UltraISO.00C0E39A
00C0E035 8D85 2E040000 lea eax,dword ptr ss:[ebp+42E]
用ESP定律,F9后,断到如下位置:
00C0E3B0 /75 08 jnz short UltraISO.00C0E3BA
00C0E3B2 |B8 01000000 mov eax,1
00C0E3B7 |C2 0C00 retn 0C
00C0E3BA \68 20164000 push UltraISO.00401620
00C0E3BF C3 retn
00C0E3C0 8B85 26040000 mov eax,dword ptr ss:[ebp+426]
00C0E3C6 8D8D 3B040000 lea ecx,dword ptr ss:[ebp+43B]
00C0E3CC 51 push ecx
00C0E3CD 50 push eax
00C0E3CE FF95 490F0000 call dword ptr ss:[ebp+F49]
这里来到了OEP附近,注意地址00C0E3BA的那条指令,就是把OEP的地址入栈,下一条指令retn就是平栈的返回的作用,这两条指令既完成了平栈,又进行了跳转,这就是需要注意的地方。
F7后,来到了真正的OEP处:
00401620 /EB 10 jmp short UltraISO.00401632
00401622 |66:623A bound di,dword ptr ds:[edx]
00401625 |43 inc ebx
00401626 |2B2B sub ebp,dword ptr ds:[ebx]
00401628 |48 dec eax
00401629 |4F dec edi
0040162A |4F dec edi
0040162B |4B dec ebx
0040162C |90 nop
0040162D -|E9 98006400 jmp UltraISO.00A416CA
00401632 \A1 8B006400 mov eax,dword ptr ds:[64008B]
此时就是脱壳的最佳时机,用OD自带的插件即可脱壳了!而且,脱了壳不用修复,直接可以使用!
文件真的很大,8M多,而源文件是1M多,到此,脱壳完毕!

浙公网安备 33010602011771号