[菜菜打杂]笨笨菜菜脱壳练手一之Armadillo3.60标准版
【破解作者】 EasyStudy
【作者邮箱】 PhantomNet@163.com
【使用工具】 ODICE,LordPE,ImprotREC16F
【破解平台】 Win9x/NT/2000/XP
【软件名称】 Armadillo360标准加壳的win98记事本程序
【加壳方式】 Armadillo360标准加壳
【破解声明】 我是只菜菜鸟,技术不高给新手和想学脱壳的给个示范,希望共同学习!
声明:我是在大大们的基础资料上学习的,谢谢大大们!
1.在这里下内存断点
Memory map, 条目 23
地址=00401000
大小=00004000 (16384.)
属主=NOTEPAD 00400000
区段=.text
类型=Imag 01001002
访问=R
初始访问=RWE
//一次F9,再一次SHIFT+F9后来到OEP
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 DS:[4063E4] ;这里出错了..看到了没有啊没有API函数
004010D9 8BF0 MOV ESI,EAX
004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
004010DD 3C 22 CMP AL,22
004010DF 75 1B JNZ SHORT NOTEPAD.004010FC
004010E1 56 PUSH ESI
004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4] ; USER32.CharNextA
004010E8 8BF0 MOV ESI,EAX
004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]
004010EC 84C0 TEST AL,AL
004010EE 74 04 JE SHORT NOTEPAD.004010F4
004010F0 3C 22 CMP AL,22
004010F2 ^ 75 ED JNZ SHORT NOTEPAD.004010E1
004010F4 803E 22 CMP BYTE PTR DS:[ESI],22
//根据大大的问题来了下面一步
2.修复IAT是个问题
//在4063E4下硬件写入DOWOD断点,F9运行程序,出现错误提示对话框,确定后SHIFT+F9。再F9一次,
OD停在这里,数据已经写入
00CD181A 8B85 20ECFFFF MOV EAX,DWORD PTR SS:[EBP-13E0] ; NOTEPAD.004063E4
00CD1820 83C0 04 ADD EAX,4
00CD1823 8985 20ECFFFF MOV DWORD PTR SS:[EBP-13E0],EAX
00CD1829 ^ E9 36FDFFFF JMP 00CD1564
00CD182E 83BD F4EAFFFF 0>CMP DWORD PTR SS:[EBP-150C],0
00CD1835 0F85 8A000000 JNZ 00CD18C5
//往上找到这里
00CD138F 8985 94E6FFFF MOV DWORD PTR SS:[EBP-196C],EAX
00CD1395 8B85 90E6FFFF MOV EAX,DWORD PTR SS:[EBP-1970]
00CD139B 8338 00 CMP DWORD PTR DS:[EAX],0
00CD139E 0F84 86000000 JE 00CD142A //..我们找到的关键
00CD13A4 8B85 90E6FFFF MOV EAX,DWORD PTR SS:[EBP-1970]
00CD13AA 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
00CD13AD 83E0 01 AND EAX,1
00CD13B0 85C0 TEST EAX,EAX
//第二次就停这里了
77C16FA3 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
77C16FA5 FF2495 B870C177 JMP DWORD PTR DS:[EDX*4+77C170B8]
77C16FAC 8BC7 MOV EAX,EDI
77C16FAE BA 03000000 MOV EDX,3
77C16FB3 83E9 04 SUB ECX,4
77C16FB6 72 0C JB SHORT msvcrt.77C16FC4
77C16FB8 83E0 03 AND EAX,3
//CTRL+F9 F7到这里...
00CD079A 83C4 0C ADD ESP,0C
00CD079D 8D85 D4E9FFFF LEA EAX,DWORD PTR SS:[EBP-162C]
00CD07A3 50 PUSH EAX
00CD07A4 FFB5 D4E9FFFF PUSH DWORD PTR SS:[EBP-162C]
00CD07AA FFB5 DCE9FFFF PUSH DWORD PTR SS:[EBP-1624]
00CD07B0 8B85 1CEBFFFF MOV EAX,DWORD PTR SS:[EBP-14E4]
00CD07B6 0385 D8E9FFFF ADD EAX,DWORD PTR SS:[EBP-1628]
00CD07BC 50 PUSH EAX
00CD07BD FF15 3481CD00 CALL DWORD PTR DS:[CD8134] ; kernel32.VirtualProtect
00CD07C3 8B85 E0E9FFFF MOV EAX,DWORD PTR SS:[EBP-1620]
//终于走到这里了..N...远......
00CD12CA 83C4 0C ADD ESP,0C
00CD12CD 8985 BCE8FFFF MOV DWORD PTR SS:[EBP-1744],EAX
00CD12D3 83BD BCE8FFFF 0>CMP DWORD PTR SS:[EBP-1744],0
00CD12DA 75 58 JNZ SHORT 00CD1334
00CD12DC 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00CD12DF 8B00 MOV EAX,DWORD PTR DS:[EAX]
//这里注意了
00CD1382 8985 90E6FFFF MOV DWORD PTR SS:[EBP-1970],EAX
00CD1388 8B85 94E6FFFF MOV EAX,DWORD PTR SS:[EBP-196C]
00CD138E 40 INC EAX
00CD138F 8985 94E6FFFF MOV DWORD PTR SS:[EBP-196C],EAX
00CD1395 8B85 90E6FFFF MOV EAX,DWORD PTR SS:[EBP-1970]
00CD139B 8338 00 CMP DWORD PTR DS:[EAX],0
00CD139E 0F84 86000000 JE 00CD142A //下内存访问断点
00CD13A4 8B85 90E6FFFF MOV EAX,DWORD PTR SS:[EBP-1970]
00CD13AA 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
00CD13AD 83E0 01 AND EAX,1
00CD13B0 85C0 TEST EAX,EAX
//F9运行,每次程序停在00CD139E时修改寄存器跳转标志Z为1,让其跳转。当程序停在别处时,再ALT+M打开内存镜像,在00401000行下内存访问断点,
00CB13AC 8B08 MOV ECX,DWORD PTR DS:[EAX]
00CB13AE 8365 08 00 AND DWORD PTR SS:[EBP+8],0
00CB13B2 8D50 04 LEA EDX,DWORD PTR DS:[EAX+4]
00CB13B5 894D E8 MOV DWORD PTR SS:[EBP-18],ECX
00CB13B8 8955 0C MOV DWORD PTR SS:[EBP+C],EDX
00CB13BB C745 10 2000000>MOV DWORD PTR SS:[EBP+10],20
00CB13C2 8B12 MOV EDX,DWORD PTR DS:[EDX]
00CB13C4 8955 E4 MOV DWORD PTR SS:[EBP-1C],EDX
//然后F9,程序直接停在入口处:
004010CC 55 PUSH EBP //这里是OEP
004010CD 8BEC MOV EBP,ESP
004010CF 83EC 44 SUB ESP,44
004010D2 56 PUSH ESI
004010D3 FF15 E4634000 CALL DWORD PTR DS:[4063E4] ; kernel32.GetCommandLineA
004010D9 8BF0 MOV ESI,EAX
004010DB 8A00 MOV AL,BYTE PTR DS:[EAX]
004010DD 3C 22 CMP AL,22
004010DF 75 1B JNZ SHORT NOTEPAD.004010FC
004010E1 56 PUSH ESI
004010E2 FF15 F4644000 CALL DWORD PTR DS:[4064F4] ; USER32.CharNextA
004010E8 8BF0 MOV ESI,EAX
004010EA 8A00 MOV AL,BYTE PTR DS:[EAX]
004010EC 84C0 TEST AL,AL
004010EE 74 04 JE SHORT NOTEPAD.004010F4
004010F0 3C 22 CMP AL,22
004010F2 ^ 75 ED JNZ SHORT NOTEPAD.004010E1
004010F4 803E 22 CMP BYTE PTR DS:[ESI],22
004010F7 75 15 JNZ SHORT NOTEPAD.0040110E
004010F9 46 INC ESI
004010FA EB 12 JMP SHORT NOTEPAD.0040110E
3.脱壳后修复
然后用LOAD把程序DUMP出来,直接用IMPREC修复OEP填10CC,这里有些无效的指针直接把指针修剪了就可以了.
点程序运行成功..脱壳完成...
=================================================================================
-By EasyStudy For MG
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!