最近正在学点脱壳..从网上找来手动脱壳入门十八篇.刚看到第四篇讲Aspack2.11的脱壳..看了前面的UPX脱壳.感觉入门的东东.应该不会太难..So,来自己先脱一次..脱不了再看教程..:)..说干就干..
PEID查了是Aspack2.11 OD载入.选择不继续分析.忽略所有异常 .
0040D001 60 pushad //停在这里
0040D002 E9 3D040000 jmp 0040D444 //F8跳下来
0040D007 45 inc ebp
0040D008 71 8C jno short 0040CF96
0040D444 81DD 719D2555 sbb ebp, 55259D71 //来到这里
0040D44A E8 14000000 call 0040D463 //大虾说过近CALL用F8的话有时会跑飞.F7进去
0040D44F 47 inc edi
0040D463 BA 6755B65A mov edx, 5AB65567 //来到这里
0040D468 81D2 19620C9A adc edx, 9A0C6219
0040D46E 59 pop ecx
0040D46F 80CE E3 or dh, 0E3
0040D472 81C2 A9B064F1 add edx, F164B0A9
0040D478 E9 14000000 jmp 0040D491
0040D47D 831F D5 sbb dword ptr [edi], -2B
0040D480 0D 39B210A9 or eax, A910B239
0040D485 47 inc edi
0040D486 E0 6E loopdne short 0040D4F6
0040D488 62A1 C4B4E6F3 bound esp, qword ptr [ecx+F3E6B4C4]
0040D48E 42 inc edx
0040D48F B6 4A mov dh, 4A
0040D491 51 push ecx
0040D492 BD 69806869 mov ebp, 69688069
0040D497 0FBFEF movsx ebp, di
0040D49A 5E pop esi
0040D49B 66:8BFB mov di, bx
0040D49E E9 14000000 jmp 0040D4B7
0040D4A3 E7 07 out 7, eax
0040D4A5 A6 cmps byte ptr [esi], byte ptr es:[edi>
0040D4A6 DBC1 fcmovnb st, st(1)
0040D4A8 6F outs dx, dword ptr es:[edi]
0040D4A9 B8 A733D035 mov eax, 35D033A7
0040D4AE 58 pop eax
0040D536 ^/E9 00FFFFFF jmp 0040D43B //一直F8到这里.往回跳了
0040D53B A9 55C3500F test eax, 0F50C355 //F4到这句程序会跑飞.
0040D540 50 push eax
0040D541 DCFF fdiv st(7), s
跑飞了只有重新来过.第一个CALL进后.感觉一直在计算什么东东..(汇编差..正在一边学Crack,一边学ASM,只能先感觉一下)..所以直接CTRL+F9下来.
004010CC 55 push ebp //然后到这里
004010CD 8BEC mov ebp, esp
004010CF 83EC 44 sub esp, 44
004010D2 56 push esi
004010D3 FF15 E4634000 call dword ptr [4063E4] ; kernel32.GetCommandLineA
看了一下ESP,0013FFC4!!好眼熟..以前看过一下堆栈平衡原理..大部分壳跳到OEP以前的时候都要还原堆栈..
!!难道这就是OEP?管他呢..DUMP出来看看就知道了..直接在这里DUMP..程序能运行..所有功能正常..开心!!
这就算是第一次手动脱壳吧.虽然大部分是靠运气..还是蛮开心的..记下来..作个纪念,抓紧时间学汇编..