关于手脱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多,到此,脱壳完毕!

posted @ 2012-07-12 11:10  monkeycd  阅读(170)  评论(0)    收藏  举报