step by step 脱Aspr 1.23 RC4
这个壳真是花了我不少时间啊,一是对OD的不熟练,二是我脑子笨,假如可以的话我一定换过我的脑子,太笨了。软件:crysb.exe
工具:OD,lord PEImportREC
调试平台:XP SP2
破解说明:谢谢天草老师,是他教会我很多关于破解的东西,这里向他致敬了!!
好吧,我们开始了!
1.OD载入,把除了内存异常外 其他全部忽略,(有脱过穿山甲的可以不把锁定的异常忽略掉,本人试过,没问题的)。载入后会看到这些代码:
00401000 >68 01009000 push 00900001
00401005 E8 01000000 call 0040100B
0040100A C3 retn
0040100B C3 retn
0040100C EB 6E jmp short 0040107C
0040100E C2 6873 retn 7368
00401011 DF ??? ; 未知命令
00401012 49 dec ecx
00401013 48 dec eax
00401014 0BFE or edi, esi
00401016 DB ??? ; 未知命令
00401017 3001 xor byte ptr , al
00401019 6256 CD bound edx, qword ptr
0040101C- 70 95 jo short 00400FB3
0040101E CB retf
0040101F DA3D 52162291 fidivrdword ptr
00401025 07 pop es
00401026 59 pop ecx
00401027 2D 95311AA2 sub eax, A21A3195
0040102C B6 39 mov dh, 39
0040102E 41 inc ecx
0040102F 37 aaa
00401030 212E and dword ptr , ebp
00401032 55 push ebp
00401033 53 push ebx
00401034 43 inc ebx
00401035 87F4 xchg esp, esi
00401037- 73 B7 jnb short 00400FF0
00401039 109B 8A5414CB adc byte ptr , bl
这些一大片东西可能会让菜鸟们看得眼花,当然,我也是菜鸟,我更眼花了,我脑子笨嘛!不过脱它不用理它们,让它们呆着吧!
好了,我们不是忽略了内存访问的异常吗?运行下试试!
一只按下去,汗,手挺软的,不过终于到了:
00F639EC 3100 xor dword ptr , eax
00F639EE 64:8F05 0000000>pop dword ptr fs:
00F639F5 58 pop eax
00F639F6 833D B07EF600 0>cmp dword ptr , 0
00F639FD 74 14 je short 00F63A13 //0
00F639FF 6A 0C push 0C
00F63A01 B9 B07EF600 mov ecx, 0F67EB0
00F63A06 8D45 F8 lea eax, dword ptr
00F63A09 BA 04000000 mov edx, 4
00F63A0E E8 2DD1FFFF call 00F60B40 //1
00F63A13 FF75 FC push dword ptr
00F63A16 FF75 F8 push dword ptr
00F63A19 8B45 F4 mov eax, dword ptr
00F63A1C 8338 00 cmp dword ptr , 0
00F63A1F 74 02 je short 00F63A23 //2
00F63A21 FF30 push dword ptr
00F63A23 FF75 F0 push dword ptr
00F63A26 FF75 EC push dword ptr
00F63A29 C3 retn //3
怎么到这里的呢?就是一直按的了,这是这个壳的标志: 2个je 夹着个call后面又来个retn,这是很明显的标志啊,大家一定要记住了。
2.然后呢,我们在retn下断点,并且运行到那里。观察堆栈窗口:
0012FF58 00F78238
0012FF5C 00400000crysb.00400000 //这个是标志
0012FF60 574F42C8
0012FF64 0012FFA4 //通常标志下面的2个代码就是关键的代码了。
在命令行输入 hr 0012ff64运行:
到了下面的代码了。。
00F783B5 /EB 44 jmp short 00F783FB
00F783B7 |EB 01 jmp short 00F783BA
00F783B9 |9A 51579CFC BF0>call far 00BF:FC9C5751
00F783C0 |0000 add byte ptr , al
00F783C2 |00B9 00000000 add byte ptr , bh
00F783C8 |F3:AA rep stos byte ptr es:
00F783CA |9D popfd
00F783CB |5F pop edi
00F783CC |59 pop ecx
00F783CD |C3 retn
00F783CE |55 push ebp
00F783CF |8BEC mov ebp, esp
00F783D1 |53 push ebx
00F783D2 |56 push esi
00F783D3 |8B75 0C mov esi, dword ptr
00F783D6 |8B5D 08 mov ebx, dword ptr
00F783D9 |EB 11 jmp short 00F783EC
00F783DB |0FB703 movzx eax, word ptr
00F783DE |03C6 add eax, esi
00F783E0 |83C3 02 add ebx, 2
00F783E3 |8BD0 mov edx, eax
00F783E5 |8BC6 mov eax, esi
00F783E7 |E8 0C000000 call 00F783F8
00F783EC |66:833B 00 cmp word ptr , 0
00F783F0^|75 E9 jnz short 00F783DB
00F783F2 |5E pop esi
00F783F3 |5B pop ebx
00F783F4 |5D pop ebp
00F783F5 |C2 0800 retn 8
00F783F8 |0102 add dword ptr , eax
00F783FA |C3 retn
00F783FB \03C3 add eax, ebx
00F783FD BB C4000000 mov ebx, 0C4
00F78402 0BDB or ebx, ebx
00F78404 75 07 jnz short 00F7840D
注意了,到了这里,就得用F7跟进,否则就无法脱了。然后就到了:
00F783FB 03C3 add eax, ebx
00F783FD BB C4000000 mov ebx, 0C4
00F78402 0BDB or ebx, ebx
00F78404 75 07 jnz short 00F7840D
00F78406 894424 1C mov dword ptr , eax
00F7840A 61 popad
00F7840B 50 push eax
00F7840C C3 retn
00F7840D E8 00000000 call 00F78412
00F78412 5D pop ebp
00F78413 81ED 4DE14B00 sub ebp, 4BE14D
00F78419 8D85 F2E04B00 lea eax, dword ptr
00F7841F 8D8D 94E14B00 lea ecx, dword ptr
00F78425 03CB add ecx, ebx
00F78427 8941 01 mov dword ptr , eax
00F7842A 8D85 36E14B00 lea eax, dword ptr
00F78430 8D8D FAE04B00 lea ecx, dword ptr
00F78436 8901 mov dword ptr , eax
00F78438 B8 5E140000 mov eax, 145E
00F7843D 8D8D FFE04B00 lea ecx, dword ptr
00F78443 8901 mov dword ptr , eax
00F78445 8D8D 94E14B00 lea ecx, dword ptr
00F7844B 8D85 94F34B00 lea eax, dword ptr
00F78451 51 push ecx
00F78452 50 push eax
00F78453 E8 76FFFFFF call 00F783CE
00F78458 61 popad //这里停止单步走,要F7跟进了(后面一直都要用到F7)
00F78459 /EB 02 jmp short 00F7845D
然后就可以单不走了,一直走过了 popad,就要F7跟进了,去寻找stole code.
进去后,一直跟进,知道看到语言的特征(就是“头”)。我脱的这个软件是用C++写的,所以呢,
第一次捕获的stole code是:
00F784DF 55 push ebp
00F784E0 8BEC mov ebp, esp
00F784E2 6A FF push -1
00F784E4 68 A8A44900 push 49A4A8
00F784E9 68 B8634300 push 4363B8
00F784EE 64:A1 00000000mov eax, dword ptr fs:
第二次:
00F784F7 50 push eax
00F784F8 64:8925 0000000>mov dword ptr fs:, esp
00F784FF 83EC 58 sub esp, 58
第三次:
00F78505 53 push ebx
第四次:
00F78509 56 push esi ; kernel32.7C809AE0
第五次:
00F7850D 57 push edi ; kernel32.7C839AD8
00F7850E 8965 E8 mov dword ptr , esp
捕获完毕。。。。。
然后呢就继续跟进,直到看见了:
00F76566 51 push ecx
00F76567 57 push edi
00F76568 9C pushfd
00F76569 FC cld
00F7656A BF A765F700 mov edi, 0F765A7
00F7656F B9 5E140000 mov ecx, 145E
00F76574 F3:AA rep stos byte ptr es:
00F76576 9D popfd
00F76577 5F pop edi
00F76578 59 pop ecx
00F76579 C3 retn
00F7657A 55 push ebp
00F7657B 8BEC mov ebp, esp
00F7657D 53 push ebx
00F7657E 56 push esi
00F7657F 8B75 0C mov esi, dword ptr
00F76582 8B5D 08 mov ebx, dword ptr
就可以单步走了,单步走过了retn后,你会看到这些代码:
004364B6 FF15 98224900 call dword ptr
004364BC 33D2 xor edx, edx
004364BE 8AD4 mov dl, ah
004364C0 8915 C4CC4D00 mov dword ptr , edx
004364C6 8BC8 mov ecx, eax
004364C8 81E1 FF000000 and ecx, 0FF
004364CE 890D C0CC4D00 mov dword ptr , ecx
004364D4 C1E1 08 shl ecx, 8
004364D7 03CA add ecx, edx
004364D9 890D BCCC4D00 mov dword ptr , ecx
004364DF C1E8 10 shr eax, 10
004364E2 A3 B8CC4D00 mov dword ptr , eax
004364E7 6A 01 push 1
004364E9 E8 93370000 call 00439C81
004364EE 59 pop ecx
004364EF 85C0 test eax, eax
004364F1 75 08 jnz short 004364FB
呵呵,别以为一直往下看哈,其实看上面了,上面是一大排空代码,这是什么呢?那就是被抽取了的代码,我们把捕获的代码填上去,然后新建EIP,那么就搞顶了!
脱壳后,有个问题要说明的,用ImportREC修复时要注意,有几个指针是用专用插件修复的,那就是说,全部指针都有用,大家别乱剪了哈!
好了,我奉上软件:
http://www.namipan.com/d/CrystalButton2.rar/4673aa196d1863fe7f470c5f9ae66cd916ca0634f49a1f00
请高手指导下!!
页:
[1]