软件名:GJ婆ERP(无壳)
软件版本:T9 Top v20.5(需要的自己网上找)
破解方法:爆破(非模拟狗)
所需工具:OD吾爱版
教程开始:
1.思路:破解一款软件,首先你要了解这个软件有哪些限制?它是通过什么方法实现的?你要如何处理?当你有了这些思路才能把它办掉。
2.开整:
2.1软件打开会提示你服务器端没找到加密狗,所以我们要把服务器端加密狗类型改成软狗,所谓软狗就相当于是个注册码,不需要你插硬件狗就行。
做完这一步就是开始搞客户端了。
2.2.1断点返回法,先让软件跑起来弹出注册框后随便输入一串码后反回OD暂停,一路执行到返回(Ctrl+F9)直到可以点软件的“确定”按钮后再一路执行到返回(Ctrl+F9)直到返回程序领空。看是从哪个call中出来的,出来后到哪里做了判断(判断是否真码)……
2.2.2 简单的方法是有提示“绑定失败,请稍后重试。”,直接搜这个也行,上面的方法可以不用了,如果你用了说明你看完教程就上了,哈哈~~
直接上代码:
[Asm] 纯文本查看 复制代码
005CBC90 . /EB 3E jmp short GraspStd.005CBCD0 ;注册狗关键跳,我是jnz改的jmp
005CBC92 . |8D45 D0 lea eax,dword ptr ss:[ebp-0x30]
005CBC95 . |8B55 FC mov edx,dword ptr ss:[ebp-0x4]
005CBC98 . |E8 2357E3FF call <jmp.&rtl150.System::UStrFromWStr>
005CBC9D . |8B45 D0 mov eax,dword ptr ss:[ebp-0x30]
005CBCA0 . |33D2 xor edx,edx ; GraspStd.<ModuleEntryPoint>
005CBCA2 . |E8 3165E3FF call <jmp.&rtl150.Sysutils::SameText>
005CBCA7 . |84C0 test al,al
005CBCA9 . |74 0D je short GraspStd.005CBCB8
005CBCAB . |8D45 FC lea eax,dword ptr ss:[ebp-0x4]
005CBCAE . |BA 9CBE5C00 mov edx,GraspStd.005CBE9C ; 绑定失败,请稍后重试。
005CBCB3 . |E8 D855E3FF call <jmp.&rtl150.System::WStrLAsg>
005CBCB8 > |8D45 CC lea eax,dword ptr ss:[ebp-0x34]
005CBCBB . |8B55 FC mov edx,dword ptr ss:[ebp-0x4]
005CBCBE . |E8 FD56E3FF call <jmp.&rtl150.System::UStrFromWStr>
005CBCC3 . |8B45 CC mov eax,dword ptr ss:[ebp-0x34]
005CBCC6 . |E8 5D95E3FF call <jmp.&GraspCMRunStd.Udllmessageintf>
005CBCCB . |E9 A6000000 jmp GraspStd.005CBD76
005CBCD0 > \A1 94496F00 mov eax,dword ptr ds:[0x6F4994]
2.2.3上面的也可以跳过,就是检测加密狗的时候跳,就不会弹注册框了
可以直接搜软件启动时弹出的 “正在检测加密狗,请稍候...”字符串找到地址(方法看注解):
[Asm] 纯文本查看 复制代码 006A7FD4 . BA 38856A00 mov edx,GraspStd.006A8538 ; 正在检测加密狗,请稍候...
006A7FD9 . E8 BA4CFAFF call GraspStd.0064CC98
006A7FDE . A1 144B6F00 mov eax,dword ptr ds:[0x6F4B14] ; ╡o
006A7FE3 . 8B00 mov eax,dword ptr ds:[eax]
006A7FE5 . E8 2EB0D5FF call <jmp.&vcl150.Controls::TControl::Re>
006A7FEA > A1 70496F00 mov eax,dword ptr ds:[0x6F4970]
006A7FEF . 8B00 mov eax,dword ptr ds:[eax]
006A7FF1 . E8 76CDEEFF call GraspStd.00594D6C
006A7FF6 . E9 A5000000 jmp GraspStd.006A80A0
006A7FFB > A1 D4496F00 mov eax,dword ptr ds:[0x6F49D4]
006A8000 . 33D2 xor edx,edx ; GraspStd.<ModuleEntryPoint>
006A8002 . 8910 mov dword ptr ds:[eax],edx ; GraspStd.<ModuleEntryPoint>
006A8004 . A1 BC486F00 mov eax,dword ptr ds:[0x6F48BC]
006A8009 . 8338 01 cmp dword ptr ds:[eax],0x1
006A800C . 75 59 jnz short GraspStd.006A8067
006A800E . 8D95 DCFEFFFF lea edx,dword ptr ss:[ebp-0x124]
006A8014 . B8 181A0000 mov eax,0x1A18
006A8019 . E8 FAA1D5FF call <jmp.&rtl150.Sysutils::IntToStr>
006A801E . 8B95 DCFEFFFF mov edx,dword ptr ss:[ebp-0x124]
006A8024 . 8D85 E0FEFFFF lea eax,dword ptr ss:[ebp-0x120]
006A802A . E8 9993D5FF call <jmp.&rtl150.System::WStrFromUStr>
006A802F . 8B85 E0FEFFFF mov eax,dword ptr ss:[ebp-0x120]
006A8035 . 50 push eax ; kernel32.BaseThreadInitThunk
006A8036 . 68 58856A00 push GraspStd.006A8558
006A803B . A1 4C4B6F00 mov eax,dword ptr ds:[0x6F4B4C] ; deo
006A8040 . 8B00 mov eax,dword ptr ds:[eax]
006A8042 . 8B40 70 mov eax,dword ptr ds:[eax+0x70]
006A8045 . 50 push eax ; kernel32.BaseThreadInitThunk
006A8046 . 8D85 E4FEFFFF lea eax,dword ptr ss:[ebp-0x11C]
006A804C . 50 push eax ; kernel32.BaseThreadInitThunk
006A804D . E8 2E94D5FF call <jmp.&rtl150.System::IntfDispCall>
006A8052 . 83C4 10 add esp,0x10
006A8055 . 8B95 E4FEFFFF mov edx,dword ptr ss:[ebp-0x11C]
006A805B . A1 94496F00 mov eax,dword ptr ds:[0x6F4994]
006A8060 . E8 5B93D5FF call <jmp.&rtl150.System::UStrFromWStr>
006A8065 . EB 39 jmp short GraspStd.006A80A0
006A8067 > 8D85 D8FEFFFF lea eax,dword ptr ss:[ebp-0x128]
006A806D . 50 push eax ; kernel32.BaseThreadInitThunk
006A806E . 8D95 D4FEFFFF lea edx,dword ptr ss:[ebp-0x12C]
006A8074 . B8 181A0000 mov eax,0x1A18
006A8079 . E8 9AA1D5FF call <jmp.&rtl150.Sysutils::IntToStr>
006A807E . 8B85 D4FEFFFF mov eax,dword ptr ss:[ebp-0x12C]
006A8084 . 33C9 xor ecx,ecx
006A8086 . BA 70856A00 mov edx,GraspStd.006A8570 ; DogNo(这个很明显是没有狗了)
006A808B . E8 7014DCFF call GraspStd.00469500
006A8090 . 8B95 D8FEFFFF mov edx,dword ptr ss:[ebp-0x128]
006A8096 . A1 94496F00 mov eax,dword ptr ds:[0x6F4994]
006A809B . E8 D891D5FF call <jmp.&rtl150.System::UStrAsg>
006A80A0 > A1 044A6F00 mov eax,dword ptr ds:[0x6F4A04]
006A80A5 . 8038 01 cmp byte ptr ds:[eax],0x0 ;此处比较eax是否为0(可以把这里改为1,因为eax到这里后为1)
006A80A8 . 74 1C je short GraspStd.006A80C6 ;或把这里的je改为jmp强跳
006A80AA . 8B4D F0 mov ecx,dword ptr ss:[ebp-0x10]
006A80AD . 33D2 xor edx,edx ; GraspStd.<ModuleEntryPoint>
006A80AF . 8B45 CC mov eax,dword ptr ss:[ebp-0x34]
006A80B2 . E8 21620000 call GraspStd.006AE2D8
006A80B7 . 84C0 test al,al
006A80B9 . 75 27 jnz short GraspStd.006A80E2
006A80BB . 8B45 C8 mov eax,dword ptr ss:[ebp-0x38] ; wow64.74E9E0D8
006A80BE . C600 01 mov byte ptr ds:[eax],0x1
006A80C1 . E9 CB000000 jmp GraspStd.006A8191
006A80C6 > 8B4D F0 mov ecx,dword ptr ss:[ebp-0x10]
006A80C9 . 33D2 xor edx,edx ; GraspStd.<ModuleEntryPoint>
006A80CB . 8B45 CC mov eax,dword ptr ss:[ebp-0x34]
006A80CE . E8 F16F0000 call GraspStd.006AF0C4
006A80D3 . 84C0 test al,al
006A80D5 . 75 0B jnz short GraspStd.006A80E2
006A80D7 . 8B45 C8 mov eax,dword ptr ss:[ebp-0x38] ; wow64.74E9E0D8
006A80DA . C600 01 mov byte ptr ds:[eax],0x1
006A80DD . E9 AF000000 jmp GraspStd.006A8191
006A80E2 > 8B45 CC mov eax,dword ptr ss:[ebp-0x34]
006A80E5 . C680 55040000>mov byte ptr ds:[eax+0x455],0x1
006A80EC . 8B45 CC mov eax,dword ptr ss:[ebp-0x34]
006A80EF . E8 04050000 call GraspStd.006A85F8
006A80F4 . 84C0 test al,al
006A80F6 . 0F84 95000000 je GraspStd.006A8191
至此软件已基本能够使用了,但使用插件时仍会提示未注册不能使用插件
3.于是我们找“----未注册”如果不知道可以在所有未注册上下断,我这里直接上关键代码:
[Asm] 纯文本查看 复制代码 00593FBB |. E8 F8E1E6FF call <jmp.&rtl150.Sysutils::LowerCase>
00593FC0 |. 8B45 FC mov eax,[local.1]
00593FC3 |. BA 84405900 mov edx,GraspStd.00594084 ; /q
00593FC8 |. E8 3BD4E6FF call <jmp.&rtl150.System::UStrEqual>
00593FCD |. 74 33 je short GraspStd.00594002
00593FCF |. 8D55 E8 lea edx,[local.6]
00593FD2 |. 33C0 xor eax,eax ; kernel32.BaseThreadInitThunk
00593FD4 |. E8 77D0E6FF call <jmp.&rtl150.System::ParamStr>
00593FD9 |. 8B45 E8 mov eax,[local.6]
00593FDC |. 8D55 EC lea edx,[local.5]
00593FDF |. E8 04E2E6FF call <jmp.&rtl150.Sysutils::Trim>
00593FE4 |. 8B45 EC mov eax,[local.5]
00593FE7 |. 8D55 F0 lea edx,[local.4]
00593FEA |. E8 C9E1E6FF call <jmp.&rtl150.Sysutils::LowerCase>
00593FEF |. 8B45 F0 mov eax,[local.4]
00593FF2 |. BA 98405900 mov edx,GraspStd.00594098 ; q
00593FF7 |. E8 0CD4E6FF call <jmp.&rtl150.System::UStrEqual>
00593FFC |. 74 04 je short GraspStd.00594002
00593FFE |. 33DB xor ebx,ebx
00594000 |. EB 02 jmp short GraspStd.00594004
00594002 |> B3 01 mov bl,0x1
00594004 |> A1 484B6F00 mov eax,dword ptr ds:[0x6F4B48]
00594009 |. 8338 03 cmp dword ptr ds:[eax],0x3
0059400C |. 75 0D jnz short GraspStd.0059401B
0059400E |. BB 10270000 mov ebx,0x2710
00594013 |. C706 10270000 mov dword ptr ds:[esi],0x2710
00594019 |. EB 33 jmp short GraspStd.0059404E
0059401B |> E8 40FFFFFF call GraspStd.00593F60 ;此call是个关键进入后可以看到关键代码
00594020 |. 84DB test bl,bl
00594022 |. 74 21 je short GraspStd.00594045
00594024 |. A1 484B6F00 mov eax,dword ptr ds:[0x6F4B48]
00594029 |. C700 01000000 mov dword ptr ds:[eax],0x1
0059402F |. A1 D4496F00 mov eax,dword ptr ds:[0x6F49D4]
0059401B |> E8 40FFFFFF call GraspStd.00593F60 中如下:
[Asm] 纯文本查看 复制代码 00593F60 /$ A1 0C496F00 mov eax,dword ptr ds:[0x6F490C]
00593F65 |. 33D2 xor edx,edx ; GraspStd.<ModuleEntryPoint>
00593F67 |. 8910 mov dword ptr ds:[eax],edx ; GraspStd.<ModuleEntryPoint>
00593F69 |. A1 484B6F00 mov eax,dword ptr ds:[0x6F4B48]
00593F6E |. C700 00000000 mov dword ptr ds:[eax],0x0 把此处改为0
00593F74 |. A1 D4496F00 mov eax,dword ptr ds:[0x6F49D4]
00593F79 |. C700 00000000 mov dword ptr ds:[eax],0x0 此处也改为0
00593F7F \. C3 retn
至此,所有的限制都可以正常使用了,我用这个版本一年多了,没有任何问题。
如果哪位大佬有更好的方法请指教!
如果你觉得对你有所帮助请给我热心值,我要洗违规点~~~呜~~~~~ |