能力值:
( LV2,RANK:10 )
|
-
-
2 楼
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:AA0A7A23E" //这里一定要出现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:AA0A7A23E"
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
稻草人(23380605) 9:21:41
0BF4689 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
稻草人(23380605) 9:21:51
------------------------------------------------------------------------
打好补丁之后,在寄存器中,双击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。成功了............结束。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
写成
xor eax, 65E6C08A
cmp eax, 331AD583 //判断 EAX 是否是我的机器码, 331AD583 是我的机器码。根据自己的硬盘号,改成自己的机器码
jnz 00401011 //不是就返回
mov eax, 5B09DF2D //如果是我的机器码就将 5B09DF2D(别人的机器码,也是有正确的KEY的机器码)替换成自己的。
retn 8
他这上面说..要用自己的机器码换别人的机器码...我想知道自己的机器码在哪里!!!!
|