看了好多大侠的帖子,今天终于动手作了自己的教程,有好多地方不到位,请高手不要见笑
一、准备工作

1 侦壳:用PEID 查一下 显示为 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks的壳,根据经验应该是Armadillo 4.00 的壳

2 判断进程:启动程序。然后在 Windows 任务管理器或LordPE里查看是单进程的Armadillo还是双进程的。

打开程序,是带KEY的双进程程序

3 必须要有一个正确的KEY、用户名和对应的机器码才行

名字qmz
硬盘号:A3C2-5A13
注册号:000015-486QGW-QR2Q1B-J0T9HA-XYNCE9-7P2FPZ-GG0D33-7FZ9R5-GGTAPY-FACJHC 


二 、脱壳


OD 载入

0182C243 >/$  55            PUSH EBP
0182C244  |.  8BEC          MOV EBP,ESP
0182C246  |.  6A FF         PUSH -1
0182C248  |.  68 405F8501   PUSH Cam.01855F40
0182C24D  |.  68 80BF8201   PUSH Cam.0182BF80                        ;  SE 处理程序安装
0182C252  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0182C258  |.  50            PUSH EAX
0182C259  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP

1 分离父子进程

下断点BP OpenMutexA

F9运行中断后,看堆栈:

0012F798   01817DB8  /CALL 到 OpenMutexA 来自 Cam.01817DB2
0012F79C   001F0001  |Access = 1F0001
0012F7A0   00000000  |Inheritable = FALSE
0012F7A4   0012FDD8  \MutexName = "90C::DA3428C337"
0012F7A8   0012B884
0012F7AC   00000000

在CPU窗口中 Ctrl+G:401000  键入以下代码:

00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 D8FD1200     PUSH 12FDD8                              ; ★ 堆栈里看到的值
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 08A6A577     CALL kernel32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 D012A677     JMP kernel32.OpenMutexA
00401017    90              NOP

二进值:

60 9C 68 D8 FD 12 00 33 C0 50 50 E8 08 A6 A5 77 9D 61 E9 D0 12 A6 77 90

在 401000 处点鼠标右键 "此处为新 EIP",F9运行,再次中断在OpenMutexA处,此时Ctrl+G:401000 撤销刚才的修改的代码,使代码还原。

OK,父进程分离完毕!清除 OpenMutexA 断点.

2 找PATCH的地方

下断he GetDlgItem  shift+f9  两次,出现提示后ALT+F9返回
77D1CEB9 >  8B4C24 04       MOV ECX,DWORD PTR SS:[ESP+4]       ALT+F9返回
77D1CEBD    E8 4EB7FFFF     CALL USER32.77D18610
77D1CEC2    85C0            TEST EAX,EAX
77D1CEC4    74 20           JE SHORT USER32.77D1CEE6
77D1CEC6    56              PUSH ESI
77D1CEC7    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77D1CECB    50              PUSH EAX
77D1CECC    E8 B5FFFFFF     CALL USER32.77D1CE86
77D1CED1    85C0            TEST EAX,EAX
77D1CED3  ^ 0F84 CBF5FFFF   JE USER32.77D1C4A4
77D1CED9    8B30            MOV ESI,DWORD PTR DS:[EAX]
77D1CEDB    85F6            TEST ESI,ESI
77D1CEDD  ^ 0F84 C3F5FFFF   JE USER32.77D1C4A6

来到这里

02484618    50              PUSH EAX
02484619    68 15040000     PUSH 415
0248461E    57              PUSH EDI
0248461F    FFD6            CALL ESI
02484621    50              PUSH EAX
02484622    68 07040000     PUSH 407
02484627    57              PUSH EDI
02484628    FFD6            CALL ESI
0248462A    50              PUSH EAX
0248462B    E8 2370FFFF     CALL 0247B653
02484630    8B0D E01E4A02   MOV ECX,DWORD PTR DS:[24A1EE0]
02484636    83C4 0C         ADD ESP,0C
02484639    E8 9F3EFEFF     CALL 024684DD
0248463E    33DB            XOR EBX,EBX
02484640    84C0            TEST AL,AL
02484642    75 36           JNZ SHORT 0248467A
02484644    381D E8C04902   CMP BYTE PTR DS:[249C0E8],BL
0248464A    74 2E           JE SHORT 0248467A
0248464C    8B0D E01E4A02   MOV ECX,DWORD PTR DS:[24A1EE0]
02484652    894D 08         MOV DWORD PTR SS:[EBP+8],ECX
02484655    E8 833EFEFF     CALL 024684DD
0248465A    84C0            TEST AL,AL
0248465C    74 07           JE SHORT 02484665
0248465E    A1 44904902     MOV EAX,DWORD PTR DS:[2499044]
02484663    EB 06           JMP SHORT 0248466B
02484665    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]

F4到02484640时程序中断在这里
77D1CEB9 >  8B4C24 04       MOV ECX,DWORD PTR SS:[ESP+4]   ALT+F9返回
77D1CEBD    E8 4EB7FFFF     CALL USER32.77D18610
77D1CEC2    85C0            TEST EAX,EAX
77D1CEC4    74 20           JE SHORT USER32.77D1CEE6
77D1CEC6    56              PUSH ESI
77D1CEC7    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77D1CECB    50              PUSH EAX
77D1CECC    E8 B5FFFFFF     CALL USER32.77D1CE86
77D1CED1    85C0            TEST EAX,EAX
77D1CED3  ^ 0F84 CBF5FFFF   JE USER32.77D1C4A4
77D1CED9    8B30            MOV ESI,DWORD PTR DS:[EAX]
77D1CEDB    85F6            TEST ESI,ESI
77D1CEDD  ^ 0F84 C3F5FFFF   JE USER32.77D1C4A6
77D1CEE3    8BC6            MOV EAX,ESI
77D1CEE5    5E              POP ESI
77D1CEE6    C2 0800         RETN 8

继续ALT+F9返回来在这里

02484621    50              PUSH EAX
02484622    68 07040000     PUSH 407
02484627    57              PUSH EDI
02484628    FFD6            CALL ESI
0248462A    50              PUSH EAX
0248462B    E8 2370FFFF     CALL 0247B653
02484630    8B0D E01E4A02   MOV ECX,DWORD PTR DS:[24A1EE0]
02484636    83C4 0C         ADD ESP,0C
02484639    E8 9F3EFEFF     CALL 024684DD
0248463E    33DB            XOR EBX,EBX
02484640    84C0            TEST AL,AL
02484642    75 36           JNZ SHORT 0248467A
02484644    381D E8C04902   CMP BYTE PTR DS:[249C0E8],BL
0248464A    74 2E           JE SHORT 0248467A
0248464C    8B0D E01E4A02   MOV ECX,DWORD PTR DS:[24A1EE0]
02484652    894D 08         MOV DWORD PTR SS:[EBP+8],ECX
02484655    E8 833EFEFF     CALL 024684DD
0248465A    84C0            TEST AL,AL
0248465C    74 07           JE SHORT 02484665
0248465E    A1 44904902     MOV EAX,DWORD PTR DS:[2499044]
02484663    EB 06           JMP SHORT 0248466B
02484665    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
02484668    83C0 08         ADD EAX,8

F8到02484642处,跳转实现,来到0248467A处

0248467A    395D 14         CMP DWORD PTR SS:[EBP+14],EBX
0248467D    0F84 B7000000   JE 0248473A
02484683    53              PUSH EBX
02484684    B9 98FA4902     MOV ECX,249FA98
02484689    E8 253CFEFF     CALL 024682B3                        F7进入
0248468E    53              PUSH EBX
0248468F    B9 98FA4902     MOV ECX,249FA98
02484694    8945 08         MOV DWORD PTR SS:[EBP+8],EAX
02484697    E8 353CFEFF     CALL 024682D1
0248469C    837D 14 01      CMP DWORD PTR SS:[EBP+14],1
024846A0    75 27           JNZ SHORT 024846C9
024846A2    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
024846A5    8BC8            MOV ECX,EAX
024846A7    81E1 FFFF0000   AND ECX,0FFFF

看到02484689处的CALL,F7进入

024682B3    56              PUSH ESI                                 ; USER32.GetDlgItem
024682B4    8BF1            MOV ESI,ECX
024682B6    FF7424 08       PUSH DWORD PTR SS:[ESP+8]
024682BA    8B8E 5C060000   MOV ECX,DWORD PTR DS:[ESI+65C]
024682C0    6A 00           PUSH 0
024682C2    E8 24D70000     CALL 024759EB                              F7进入
024682C7    3386 5C200000   XOR EAX,DWORD PTR DS:[ESI+205C]
024682CD    5E              POP ESI
024682CE    C2 0400         RETN 4

在024682C2 处的CALL处,F7进入

024759EB    8B4424 04       MOV EAX,DWORD PTR SS:[ESP+4]
024759EF    C1E0 06         SHL EAX,6
024759F2    034424 08       ADD EAX,DWORD PTR SS:[ESP+8]
024759F6    8B4481 18       MOV EAX,DWORD PTR DS:[ECX+EAX*4+18]
024759FA    35 8AC0E665     XOR EAX,65E6C08A
024759FF    C2 0800         RETN 8
02475A02    E8 05000000     CALL 02475A0C
02475A07    E9 0C000000     JMP 02475A18
02475A0C    68 78304A02     PUSH 24A3078
02475A11    FF15 70624902   CALL DWORD PTR DS:[2496270]              ; kernel32.InitializeCriticalSection
02475A17    C3              RETN

找到024759F6    8B4481 18       MOV EAX,DWORD PTR DS:[ECX+EAX*4+18],PATCH 的好地方,在024759F6 处下硬件执行断点后,CTRL+F2重

新载入程序。

步骤和刚才一样父子进程分离

下断点BP OpenMutexA

F9运行中断后,看堆栈:

0012F798   01817DB8  /CALL 到 OpenMutexA 来自 Cam.01817DB2
0012F79C   001F0001  |Access = 1F0001
0012F7A0   00000000  |Inheritable = FALSE
0012F7A4   0012FDD8  \MutexName = "90C::DA3428C337"
0012F7A8   0012B884
0012F7AC   00000000

在CPU窗口中 Ctrl+G:401000  键入以下代码:

00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 D8FD1200     PUSH 12FDD8                              ; ★ 堆栈里看到的值
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 08A6A577     CALL kernel32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 D012A677     JMP kernel32.OpenMutexA
00401017    90              NOP

二进值:

60 9C 68 D8 FD 12 00 33 C0 50 50 E8 08 A6 A5 77 9D 61 E9 D0 12 A6 77 90

在 401000 处点鼠标右键 "此处为新 EIP",F9运行,再次中断在OpenMutexA处,此时Ctrl+G:401000 撤销刚才的修改的代码,使代码还原。

OK,父进程分离完毕!清除 OpenMutexA 断点.

然后直接F9运行中断在024759F6处,不要告诉我不知道这是什么地方,现在开如PATCH代码了

024759F6    8B4481 18       MOV EAX,DWORD PTR DS:[ECX+EAX*4+18]
024759FA    35 8AC0E665     XOR EAX,65E6C08A
024759FF    C2 0800         RETN 8


PATCH之前,我们先要知道自己的机器码,我的是493F-1E33,找空白处写代码,我找的是401000
将024759FA的地方改为JMP 401000

在CPU窗口中 Ctrl+G:401000  键入以下代码:

00401000    35 8AC0E665     XOR EAX,65E6C08A
00401005    3D 331E3F49     CMP EAX,493F1E33
0040100A    75 05           JNZ SHORT Cam.00401011
0040100C    B8 135AC2A3     MOV EAX,A3C25A13
00401011    C2 0800         RETN 8

35 8A C0 E6 65 3D 33 1E 3F 49 75 05 B8 13 5A C2 A3 C2 08 00

好了,写好代码之后,就一直F9,直到程序提示注册,点YES,发现机器码已经变成A3C2-5A13了,输入那个正确的用户名和KEY后,程序提示注

册成功了

接下来,我们就可以按双进程脱壳了,今天第一次做教程,电脑出了点问题,做了两边,现在2点了,还没做完明天再续吧~!~!     


程序有点大,我没办法上传,明天搞个网络硬盘,传上去,先去睡了,老婆都骂了,呵呵  

程序下载地址http://xiucai.ys168.com