孤独刺客 发表于 2007-9-2 01:14:10

破解Armadillo 4.00双进程带KEY

【破文标题】破解Armadillo 4.00双进程带KEY
【破文作者】孤独刺客
【破解工具】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:
0044C258|.50            push    eax
0044C259|.64:8925 00000>mov   dword ptr fs:, 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 , 0
7C80EA46    56            push    esi
7C80EA47    0F84 D7540300   je      7C843F24
7C80EA4D    64:A1 18000000mov   eax, dword ptr fs:

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


00401000    0000            add   byte ptr , al
00401002    0000            add   byte ptr , al
00401004    0000            add   byte ptr , al
00401006    0000            add   byte ptr , al
00401008    0000            add   byte ptr , al
0040100A    0000            add   byte ptr , al
0040100C    0000            add   byte ptr , al
0040100E    0000            add   byte ptr , al
00401010    0000            add   byte ptr , al
00401012    0000            add   byte ptr , al
00401014    0000            add   byte ptr , al
00401016    0000            add   byte ptr , al
00401018    0000            add   byte ptr , 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 , 0
7C80EA46    56            push    esi
7C80EA47    0F84 D7540300   je      7C843F24
7C80EA4D    64:A1 18000000mov   eax, dword ptr fs:
7C80EA53    FF75 10         push    dword ptr

-------------------------------------------------------------------------------------
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
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
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
-----------------------------------------------------------------------------------------
删除刚才的断点,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
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
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 , eax
00BF4697    E8 353CFEFF   call    00BD82D1
00BF469C    837D 14 01      cmp   dword ptr , 1
00BF46A0    75 27         jnz   short 00BF46C9
00BF46A2    8B45 08         mov   eax, dword ptr
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
00BD82BA    8B8E 5C060000   mov   ecx, dword ptr
00BD82C0    6A 00         push    0
00BD82C2    E8 24D70000   call    00BE59EB                   //单步到这里,F7进入。
00BD82C7    3386 5C200000   xor   eax, dword ptr
00BD82CD    5E            pop   esi
00BD82CE    C2 0400         retn    4

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

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

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

00401000    0000            add   byte ptr , al
00401002    0000            add   byte ptr , al
00401004    0000            add   byte ptr , al
00401006    0000            add   byte ptr , al
00401008    0000            add   byte ptr , al
0040100A    0000            add   byte ptr , al
0040100C    0000            add   byte ptr , al
0040100E    0000            add   byte ptr , al
00401010    0000            add   byte ptr , al
00401012    0000            add   byte ptr , al
00401014    0000            add   byte ptr , al
00401016    0000            add   byte ptr , al
00401018    0000            add   byte ptr , al
0040101A    0000            add   byte ptr , al
0040101C    0000            add   byte ptr , 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                ; 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                ; 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的穿山甲相比,主要在打补丁的地方有所不同。
------------------------------------------------------------------------
【版权声明】本文纯属技术交流,转载请注明作者信息并保持文章的完整,谢谢!


[ 本帖最后由 孤独刺客 于 2008-5-2 16:38 编辑 ]

wyeth 发表于 2007-9-3 15:54:15

有点专业,下载慢慢学习,谢谢楼主!!/:good

网际飞鹰 发表于 2007-9-5 15:06:55

有点专业的说,,好文,,,在某些方面还真是有用/:017

tianxj 发表于 2007-9-7 07:29:11

/:good 记事本也放上来吧,让大家练练

zxwbj 发表于 2007-9-9 16:58:06

youcn28 发表于 2007-9-13 22:15:58

学习一下。。。。。

senots 发表于 2007-9-15 01:06:00

收藏着。慢慢学。`。`~~

gdwz2008 发表于 2007-11-6 12:55:07

这个不错值得收藏学习

woods 发表于 2007-11-6 23:15:49

在哪下载呢?/:010 /:010

hackercc 发表于 2007-12-1 19:55:17

有点难 收下了慢慢消化
页: [1] 2 3
查看完整版本: 破解Armadillo 4.00双进程带KEY