首页
社区
课程
招聘
[原创]笨笨菜菜脱壳练手一之Armadillo3.60标准版
发表于: 2006-10-5 02:56 4608

[原创]笨笨菜菜脱壳练手一之Armadillo3.60标准版

2006-10-5 02:56
4608
[菜菜打杂]笨笨菜菜脱壳练手一之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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1657
活跃值: (291)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
把带1的区段修剪掉再摸掉两个多余的区段..文件大小减到100,我不知道再怎么减肥..希望大大们告诉
我的破解资料都在
phantomnet.ys168.com
2006-10-5 03:26
0
雪    币: 47147
活跃值: (20380)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
最初由 menting 发布
把带1的区段修剪掉再摸掉两个多余的区段..文件大小减到100,我不知道再怎么减肥..希望大大们告诉
我的破解资料都在
phantomnet.ys168.com


一些建议仅参考
由于记事本是一个EXE文件,因此重定位表也可去除,你可以这样优化:
1.在dumped.exe先找出原输入表的位置,ImportREC重建输入表,将新输入表放到指定的地址处
2.用资源工具ResFixer,DT_FixRes 将资源提取出来
3.删除.reloc,.adata,.rsrc
4.将提取的资源放回文件中去
这样优化后的文件区块:.text,data,.idata,.rsrc

具体操作过程参考CCDebuger这文章,会有些帮助的:http://bbs.pediy.com/showthread.php?s=&threadid=28402
2006-10-5 11:34
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
鼓励一下

ArmInline――Armadillo客户版Code Splicing+Import Table Elimination的简便修复方法
http://www.unpack.cn/viewthread.php?tid=1687

优化看这个部分:
六、Armadillo保护程序脱壳后PE的修复和优化
2006-10-5 12:59
0
雪    币: 1657
活跃值: (291)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
大大门能不能把我的发表主题3贴的限制取掉!我打算发点新的东西给和我一样的菜菜鸟们..郁闷死了本来想把我脱壳的手记全都发出来的..可是被限制了..伤心死了
大大们说的方法我在试..试好了会把我的心得发在后面...
2006-10-5 19:54
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
6
不要急
2006-10-5 20:07
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
初学者的好教材,支持!(大大们的水平都超高啊,不太看的起........)
2006-10-9 16:42
0
游客
登录 | 注册 方可回帖
返回
//