[菜菜打杂]笨笨菜菜脱壳练手三之ASProtect 1.23 RC4 - 1.3.08.24
【破解作者】 EasyStudy
【作者邮箱】 PhantomNet@163.com
【使用工具】 ODICE,LordPE,ImprotREC16F
【破解平台】 Win9x/NT/2000/XP
【软件名称】 探测到是用ASProtect 1.23 RC4 - 1.3.08.24加壳的MAIN.EXE
【加壳方式】 ASProtect 1.23 RC4
【破解声明】 我是只菜菜鸟,技术不高给新手和想学脱壳的给个示范,希望共同学习!
声明:我是在大大们的基础资料上学习的,谢谢大大们!
压缩壳我基本都脱了一遍...
现在我们来看保护壳,最后学习..变态壳...
//========================脱壳相关======================
[LOGIN]
Version=1.02.11
TestVersion=1.02.11
[PARTITION]
Version=194
//========================================================
好我们开始..
比较难先做好准备:
1.查壳:
PEID查到是:
ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov [Overlay]
这个是不是保护壳..大家应该清楚吧:
2.在开始之前,把调试设置除内存异常之外,其他都忽略...OD跟入:
00401000 > 68 0110D507 PUSH main.07D51001
00401005 E8 01000000 CALL main.0040100B
0040100A C3 RETN
0040100B C3 RETN
//SHIFT+F9 大约16次到这里..这里是特征哦:
088539EC 3100 XOR DWORD PTR DS:[EAX],EAX
088539EE 64:8F05 0000000>POP DWORD PTR FS:[0]
088539F5 58 POP EAX
088539F6 833D B07E8508 0>CMP DWORD PTR DS:[8857EB0],0
088539FD 74 14 JE SHORT 08853A13
088539FF 6A 0C PUSH 0C
08853A01 B9 B07E8508 MOV ECX,8857EB0
08853A06 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
08853A09 BA 04000000 MOV EDX,4
08853A0E E8 2DD1FFFF CALL 08850B40
08853A13 FF75 FC PUSH DWORD PTR SS:[EBP-4]
08853A16 FF75 F8 PUSH DWORD PTR SS:[EBP-8]
08853A19 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
08853A1C 8338 00 CMP DWORD PTR DS:[EAX],0
08853A1F 74 02 JE SHORT 08853A23
08853A21 FF30 PUSH DWORD PTR DS:[EAX]
08853A23 FF75 F0 PUSH DWORD PTR SS:[EBP-10]
08853A26 FF75 EC PUSH DWORD PTR SS:[EBP-14]
08853A29 C3 RETN //F2这里断下,SHIFT+F9在这里,取消断点.
08853A2A 5F POP EDI
08853A2B 5E POP ESI
08853A2C 5B POP EBX
08853A2D 8BE5 MOV ESP,EBP
08853A2F 5D POP EBP
08853A30 C3 RETN
//看到了堆载为:
0012FF60 00400000 main.00400000
0012FF64 B2487E7B
0012FF68 0012FFA4
//下断点HR 0012FF68
//F9到这里:
08864D94 /EB 44 JMP SHORT 08864DDA
08864D96 |EB 01 JMP SHORT 08864D99
08864D98 |9A 51579CFC BF0>CALL FAR 00BF:FC9C5751 ; 远调用
08864D9F |0000 ADD BYTE PTR DS:[EAX],AL
08864DA1 |00B9 00000000 ADD BYTE PTR DS:[ECX],BH
08864DA7 |F3:AA REP STOS BYTE PTR ES:[EDI]
08864DA9 |9D POPFD
08864DAA |5F POP EDI
08864DAB |59 POP ECX
08864DAC |C3 RETN
//F8跟
08864DDA 03C3 ADD EAX,EBX ; main.00400000
08864DDC BB 2E010000 MOV EBX,12E
08864DE1 0BDB OR EBX,EBX
08864DE3 75 07 JNZ SHORT 08864DEC
08864DE5 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
08864DE9 61 POPAD
08864DEA 50 PUSH EAX
08864DEB C3 RETN
//下面要用F7,不然跟不到...
//我们开始找入口代码:
08866553 896C24 00 MOV DWORD PTR SS:[ESP],EBP ;=push ebp
08866557 8BEC MOV EBP,ESP
08866559 6A FF PUSH -1
0886655B 68 00E96A00 PUSH 6AE900
08866560 68 9C706900 PUSH 69709C
08866565 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
08866583 894424 00 MOV DWORD PTR SS:[ESP],EAX ;=push eax
08866587 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0886658E 83EC 58 SUB ESP,58
088665A9 895C24 00 MOV DWORD PTR SS:[ESP],EBX ;=push ebx
088665C5 897424 00 MOV DWORD PTR SS:[ESP],ESI ;=push esi
088665E1 897C24 00 MOV DWORD PTR SS:[ESP],EDI ;=push edi
088665E5 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
把代码整理出来:
push ebp
MOV EBP,ESP
PUSH -1
PUSH 6AE900
PUSH 69709C
MOV EAX,DWORD PTR FS:[0]
push eax
MOV DWORD PTR FS:[0],ESP
SUB ESP,58
push ebx
push esi
push edi
MOV DWORD PTR SS:[EBP-18],ESP
//我们来到了OEP....
00693378 0000 ADD BYTE PTR DS:[EAX],AL //真OEP
0069337A 0000 ADD BYTE PTR DS:[EAX],AL
0069337C 0000 ADD BYTE PTR DS:[EAX],AL
0069337E 0000 ADD BYTE PTR DS:[EAX],AL
00693380 0000 ADD BYTE PTR DS:[EAX],AL
00693382 0000 ADD BYTE PTR DS:[EAX],AL
00693384 0000 ADD BYTE PTR DS:[EAX],AL
00693386 0000 ADD BYTE PTR DS:[EAX],AL
00693388 0000 ADD BYTE PTR DS:[EAX],AL
0069338A 0000 ADD BYTE PTR DS:[EAX],AL
0069338C 0000 ADD BYTE PTR DS:[EAX],AL
0069338E 0000 ADD BYTE PTR DS:[EAX],AL
00693390 0000 ADD BYTE PTR DS:[EAX],AL
00693392 0000 ADD BYTE PTR DS:[EAX],AL
00693394 0000 ADD BYTE PTR DS:[EAX],AL
00693396 0000 ADD BYTE PTR DS:[EAX],AL
00693398 0000 ADD BYTE PTR DS:[EAX],AL
0069339A 0000 ADD BYTE PTR DS:[EAX],AL
0069339C 0000 ADD BYTE PTR DS:[EAX],AL
0069339E FF15 BC916A00 CALL DWORD PTR DS:[6A91BC] //假OEP
006933A4 33D2 XOR EDX,EDX
006933A6 8AD4 MOV DL,AH
006933A8 8915 D0C0D407 MOV DWORD PTR DS:[7D4C0D0],EDX
006933AE 8BC8 MOV ECX,EAX
006933B0 81E1 FF000000 AND ECX,0FF
006933B6 890D CCC0D407 MOV DWORD PTR DS:[7D4C0CC],ECX
006933BC C1E1 08 SHL ECX,8
006933BF 03CA ADD ECX,EDX
006933C1 890D C8C0D407 MOV DWORD PTR DS:[7D4C0C8],ECX
006933C7 C1E8 10 SHR EAX,10
006933CA A3 C4C0D407 MOV DWORD PTR DS:[7D4C0C4],EAX
006933CF 6A 01 PUSH 1
006933D1 E8 947A0000 CALL main.0069AE6A
脱壳完成为121MB..好大哦...$_$
重建PE为2.9MB不大了哦..嘿嘿..
00693378-00400000=00293378 在修复的时候OEP添这个的..
发现有很多是无效指针没关系
追踪1...
就没几个了再用插件..ASProctect 1.22追踪就没有了
只是又有一个是不能确定的指针...郁闷了...
修复后是2.91MB..别拿砖头盖我了....我知道还没完工了.
激动啥子呀!!
点程序不能运行吧..
拿出我们的杀手剑:
OD再入修复后的文件,也就是2.91MB的那个文件.
//停这里
00693378 >/$ 0000 ADD BYTE PTR DS:[EAX],AL
0069337A |. 0000 ADD BYTE PTR DS:[EAX],AL
0069337C |. 0000 ADD BYTE PTR DS:[EAX],AL
0069337E |. 0000 ADD BYTE PTR DS:[EAX],AL
00693380 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693382 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693384 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693386 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693388 |. 0000 ADD BYTE PTR DS:[EAX],AL
0069338A |. 0000 ADD BYTE PTR DS:[EAX],AL
0069338C |. 0000 ADD BYTE PTR DS:[EAX],AL
0069338E |. 0000 ADD BYTE PTR DS:[EAX],AL
00693390 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693392 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693394 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693396 |. 0000 ADD BYTE PTR DS:[EAX],AL
00693398 |. 0000 ADD BYTE PTR DS:[EAX],AL
0069339A |. 0000 ADD BYTE PTR DS:[EAX],AL
0069339C |. 0000 ADD BYTE PTR DS:[EAX],AL
0069339E |. FF15 BC916A00 CALL DWORD PTR DS:[<&kernel32.GetVersion>; kernel32.GetVersion
006933A4 |. 33D2 XOR EDX,EDX
006933A6 |. 8AD4 MOV DL,AH
006933A8 |. 8915 D0C0D407 MOV DWORD PTR DS:[7D4C0D0],EDX
把下面代码修改进去:
push ebp
MOV EBP,ESP
PUSH -1
PUSH 6AE900
PUSH 69709C
MOV EAX,DWORD PTR FS:[0]
push eax
MOV DWORD PTR FS:[0],ESP
SUB ESP,58
push ebx
push esi
push edi
MOV DWORD PTR SS:[EBP-18],ESP
//别问我是那来的..不就是刚开始找的吗???
郁闷....%_%
修改后的代码入下了:
00693378 > 55 PUSH EBP
00693379 8BEC MOV EBP,ESP
0069337B 6A FF PUSH -1
0069337D 68 00E96A00 PUSH dump_.006AE900
00693382 68 9C706900 PUSH dump_.0069709C ; 入口地址
00693387 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0069338D 50 PUSH EAX
0069338E 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00693395 83EC 58 SUB ESP,58
00693398 53 PUSH EBX
00693399 56 PUSH ESI
0069339A 57 PUSH EDI
0069339B 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0069339E FF15 BC916A00 CALL DWORD PTR DS:[<&kernel32.GetVersion>; kernel32.GetVersion
不会多也不会上刚刚够,如果修改下来和我的这个示范代码不一样代表你修改错了,刚好合适的
用OD保存:
点程序,运行正常...
[课程]Android-CTF解题方法汇总!