首页
社区
课程
招聘
[原创]破解Armadillo 4.00双进程带KEY
发表于: 2007-9-2 01:21 7774

[原创]破解Armadillo 4.00双进程带KEY

2007-9-2 01:21
7774
【破文标题】破解Armadillo 4.00双进程带KEY
【破文作者】lizheng
【破解工具】OD
【破解平台】Win9x/NT/2000/XP
【软件名称】记事本
【软件大小】576KB
【保护方式】Armadillo
【破解声明】破解双进程主要是把双转为单,然后步骤跟单进程就差不多了.

建议大家之前先把单进程的看完.

小弟新手,写得不好,不要见笑。有不足之处还希望您提出。
加KEY记事本我打包给大家,提供我的正确KEY和硬盘号给大家练手
Hardware fingerprint: FF3A-560E
用户名:shouzhi
KEY:000014-9GBQ37-BEB02A-P194RD-RNB7NH-9DF592-AQBWYP-UCQVN9-KH1RXQ-GKY85K
------------------------------------------------------------------------
【破解过程】OD载入.....,下断:bp OpenMutexA

0044C243 >/$  55            push    ebp
0044C244  |.  8BEC          mov     ebp, esp
0044C246  |.  6A FF         push    -1
0044C248  |.  68 405F4700   push    00475F40
0044C24D  |.  68 80BF4400   push    0044BF80                         ;  SE 处理程序安装
0044C252  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
0044C258  |.  50            push    eax
0044C259  |.  64:8925 00000>mov     dword ptr fs:[0], esp
0044C260  |.  83EC 58       sub     esp, 58
0044C263  |.  53            push    ebx
0044C264  |.  56            push    esi
0044C265  |.  57            push    edi
------------------------------------------------------------------------------------------
F9运行。

7C80EA3B >  8BFF            mov     edi, edi                         ; ntdll.7C930738
7C80EA3D    55              push    ebp
7C80EA3E    8BEC            mov     ebp, esp
7C80EA40    51              push    ecx
7C80EA41    51              push    ecx
7C80EA42    837D 10 00      cmp     dword ptr [ebp+10], 0
7C80EA46    56              push    esi
7C80EA47    0F84 D7540300   je      7C843F24
7C80EA4D    64:A1 18000000  mov     eax, dword ptr fs:[18]

----------------------------------------------------------------------------------------
Ctrl+G,00401000,又是空代码

00401000    0000            add     byte ptr [eax], al
00401002    0000            add     byte ptr [eax], al
00401004    0000            add     byte ptr [eax], al
00401006    0000            add     byte ptr [eax], al
00401008    0000            add     byte ptr [eax], al
0040100A    0000            add     byte ptr [eax], al
0040100C    0000            add     byte ptr [eax], al
0040100E    0000            add     byte ptr [eax], al
00401010    0000            add     byte ptr [eax], al
00401012    0000            add     byte ptr [eax], al
00401014    0000            add     byte ptr [eax], al
00401016    0000            add     byte ptr [eax], al
00401018    0000            add     byte ptr [eax], al
---------------------------------------------------------------------------------
分别填入以下代码:

00401000    60              pushad
00401001    9C              pushfd
00401002    68 D8FD1300     push    13FDD8         ; ASCII "370::DAA0A7A23E"  //这里一定要出现ASCII码,否则就不对,根据自己的改,看堆栈那里的值,就行了。
00401007    33C0            xor     eax, eax
00401009    50              push    eax
0040100A    50              push    eax
0040100B    E8 4FD9407C     call    kernel32.CreateMutexA
00401010    9D              popfd
00401011    61              popad
00401012  - E9 24DA407C     jmp     kernel32.OpenMutexA

--------------------------------------------------------------------------------------------
选择第一行,右键-新键EIP,F9运行。

7C80EA3B >  8BFF            mov     edi, edi                         ; ntdll.7C930738
7C80EA3D    55              push    ebp
7C80EA3E    8BEC            mov     ebp, esp
7C80EA40    51              push    ecx
7C80EA41    51              push    ecx
7C80EA42    837D 10 00      cmp     dword ptr [ebp+10], 0
7C80EA46    56              push    esi
7C80EA47    0F84 D7540300   je      7C843F24
7C80EA4D    64:A1 18000000  mov     eax, dword ptr fs:[18]
7C80EA53    FF75 10         push    dword ptr [ebp+10]

-------------------------------------------------------------------------------------
F2取消断点,Ctrl+G,00401000.把这10行代码全选上,“撤消选择处修改”。
00401000    60              pushad
00401001    9C              pushfd
00401002    68 D8FD1300     push    13FDD8                           ; ASCII "370::DAA0A7A23E"
00401007    33C0            xor     eax, eax
00401009    50              push    eax
0040100A    50              push    eax
0040100B    E8 4FD9407C     call    kernel32.CreateMutexA
00401010    9D              popfd
00401011    61              popad
00401012  - E9 24DA407C     jmp     kernel32.OpenMutexA

----------------------------------------------------------------------------------------
//以上就是把双进程改为单进程,你会以为什么的方法跟单进程一样,是一样,不过有一点点的小改变。//

F9运行,出现对话框不是不用管他,也不要关闭,现在我们下断:he GetDlgItem,现在我们就可以点‘OK’了。

77D247FE >  8BFF            mov     edi, edi
77D24800    55              push    ebp
77D24801    8BEC            mov     ebp, esp
77D24803    8B4D 08         mov     ecx, dword ptr [ebp+8]
77D24806    E8 C53CFFFF     call    77D184D0
77D2480B    85C0            test    eax, eax
77D2480D    74 1F           je      short 77D2482E
77D2480F    56              push    esi
77D24810    FF75 0C         push    dword ptr [ebp+C]
77D24813    50              push    eax
77D24814    E8 A9FFFFFF     call    77D247C2
77D24819    85C0            test    eax, eax
77D2481B    0F84 60D80000   je      77D32081
77D24821    8B30            mov     esi, dword ptr [eax]
-----------------------------------------------------------------------------------------
删除刚才的断点,Alt+F9,

00BF4618    50              push    eax
00BF4619    68 15040000     push    415
00BF461E    57              push    edi
00BF461F    FFD6            call    esi
00BF4621    50              push    eax
00BF4622    68 07040000     push    407
00BF4627    57              push    edi
00BF4628    FFD6            call    esi
00BF462A    50              push    eax
00BF462B    E8 2370FFFF     call    00BEB653
00BF4630    8B0D E01EC100   mov     ecx, dword ptr [C11EE0]
00BF4636    83C4 0C         add     esp, 0C
00BF4639    E8 9F3EFEFF     call    00BD84DD
------------------------------------------------------------------------------------
到了这里,我们不能再去找上一个RETN结束句了后那么做了,因为这样会又变成双进程了,

00BF4618    50              push    eax
00BF4619    68 15040000     push    415
00BF461E    57              push    edi
00BF461F    FFD6            call    esi
00BF4621    50              push    eax
00BF4622    68 07040000     push    407
00BF4627    57              push    edi
00BF4628    FFD6            call    esi
00BF462A    50              push    eax
00BF462B    E8 2370FFFF     call    00BEB653
00BF4630    8B0D E01EC100   mov     ecx, dword ptr [C11EE0]
00BF4636    83C4 0C         add     esp, 0C
00BF4639    E8 9F3EFEFF     call    00BD84DD

------------------------------------------------------------------------------------
看过我写的单进程的破文可以知道,第二次大跳转在,00BF4689,我们直接往下翻,找到后,F2下断,F9运行,F2取消断点,F7进入。

00BF4689    E8 253CFEFF     call    00BD82B3
00BF468E    53              push    ebx
00BF468F    B9 98FAC000     mov     ecx, 0C0FA98
00BF4694    8945 08         mov     dword ptr [ebp+8], eax
00BF4697    E8 353CFEFF     call    00BD82D1
00BF469C    837D 14 01      cmp     dword ptr [ebp+14], 1
00BF46A0    75 27           jnz     short 00BF46C9
00BF46A2    8B45 08         mov     eax, dword ptr [ebp+8]
00BF46A5    8BC8            mov     ecx, eax
00BF46A7    81E1 FFFF0000   and     ecx, 0FFFF
00BF46AD    C1E8 10         shr     eax, 10
--------------------------------------------------------------------------------------
00BD82B3    56              push    esi                              ; USER32.GetDlgItem
00BD82B4    8BF1            mov     esi, ecx
00BD82B6    FF7424 08       push    dword ptr [esp+8]
00BD82BA    8B8E 5C060000   mov     ecx, dword ptr [esi+65C]
00BD82C0    6A 00           push    0
00BD82C2    E8 24D70000     call    00BE59EB                   //单步到这里,F7进入。
00BD82C7    3386 5C200000   xor     eax, dword ptr [esi+205C]
00BD82CD    5E              pop     esi
00BD82CE    C2 0400         retn    4

------------------------------------------------------------------------------------------
到这里了,就跟我上一篇单进程的方法一样了。

00BE59EB    8B4424 04       mov     eax, dword ptr [esp+4]
00BE59EF    C1E0 06         shl     eax, 6
00BE59F2    034424 08       add     eax, dword ptr [esp+8]
00BE59F6    8B4481 18       mov     eax, dword ptr [ecx+eax*4+18]
00BE59FA    35 8AC0E665     xor     eax, 65E6C08A                    //改成 JMP 00401000,“跟随”。
00BE59FF    C2 0800         retn    8
00BE5A02    E8 05000000     call    00BE5A0C

-----------------------------------------------------------------------------
还是空代码,这里就是打补丁了。

00401000    0000            add     byte ptr [eax], al
00401002    0000            add     byte ptr [eax], al
00401004    0000            add     byte ptr [eax], al
00401006    0000            add     byte ptr [eax], al
00401008    0000            add     byte ptr [eax], al
0040100A    0000            add     byte ptr [eax], al
0040100C    0000            add     byte ptr [eax], al
0040100E    0000            add     byte ptr [eax], al
00401010    0000            add     byte ptr [eax], al
00401012    0000            add     byte ptr [eax], al
00401014    0000            add     byte ptr [eax], al
00401016    0000            add     byte ptr [eax], al
00401018    0000            add     byte ptr [eax], al
0040101A    0000            add     byte ptr [eax], al
0040101C    0000            add     byte ptr [eax], al

---------------------------------------------------------------------------------------------
写成
xor     eax, 65E6C08A
cmp     eax, 331AD583  //判断 EAX 是否是我的机器码, 331AD583 是我的机器码。根据自己的硬盘号,改成自己的机器码
jnz     00401011       //不是就返回
mov     eax, 5B09DF2D  //如果是我的机器码就将  5B09DF2D(别人的机器码,也是有正确的KEY的机器码)替换成自己的。
retn    8

------------------------------------------------------------------------
打好补丁之后,在寄存器中,双击EIP 00AC59EB返回。

00AC59FA  - E9 01B693FF     jmp     dumped_.00401000  //撤消选择出修改
00AC59FF    C2 0800         retn    8
00AC5A02    E8 05000000     call    00AC5A0C
00AC5A07    E9 0C000000     jmp     00AC5A18
00AC5A0C    68 7830AF00     push    0AF3078
00AC5A11    FF15 7062AE00   call    dword ptr [AE6270]               ; kernel32.InitializeCriticalSection
00AC5A17    C3              retn

------------------------------------------------------------------------
F9运行,出现对话框,把已有正确的KEY填进去。点‘OK’,提示无效,因为我们还没有运行补丁。不用关闭它,我们继续。

00AC59FA    35 8AC0E665     xor     eax, 65E6C08A //改成 jmp 00401000,“跟随”。
00AC59FF    C2 0800         retn    8
00AC5A02    E8 05000000     call    00AC5A0C
00AC5A07    E9 0C000000     jmp     00AC5A18
00AC5A0C    68 7830AF00     push    0AF3078
00AC5A11    FF15 7062AE00   call    dword ptr [AE6270]               ; kernel32.InitializeCriticalSection
00AC5A17    C3              retn

-------------------------------------------------------------------

00401000    35 8AC0E665     xor     eax, 65E6C08A  //F2下断,再把刚才的对话框点“OK”。
00401005    3D 64B77584     cmp     eax, 8475B764
0040100A    75 05           jnz     short 00401011
0040100C    B8 41DD485F     mov     eax, 5F48DD41
00401011    C2 0000         retn    0

再F2取消断点,F9运行。

这样就结束了,就可以运行文件试试看了,没有再要求输入KEY。成功了............结束。

------------------------------------------------------------------------
【破解总结】与不带KEY的穿山甲相比,主要在打补丁的地方有所不同。
------------------------------------------------------------------------
【版权声明】本文纯属技术交流,转载请注明作者信息并保持文章的完整,谢谢!

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习一下

支持
2007-9-2 03:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
附件呢?加KEY记事本啊
2007-10-15 18:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主,没有附件呀?没得练习了
2007-11-20 10:50
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很好,收藏。
请问:Epe的也可以参考这样的思路脱吗?
2007-12-5 19:38
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
高深啊,不懂咯
2007-12-8 20:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你是高手!支持哈,可些没有语音教程
2007-12-8 22:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
过来学习一下。。。
2007-12-9 13:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
如果有视频教学就更好啦。。
2007-12-9 13:52
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习一下

支持
2007-12-21 12:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习学习,强烈支持搞出个录像,
2008-1-20 16:20
0
游客
登录 | 注册 方可回帖
返回
//