本帖最后由 A-new 于 2017-9-9 18:45 编辑
先上个效果图
以前 破解过这个东西没仔细看,感觉貌似有点麻烦,突然发现又更新到12了,就又看了一下,屡屡思路,发现原来这么简单
标题写了破解Windows&Linux版,说起这个Linux版,就有点扯了,其实就是Windows绿色版+wine打包,如果不想安装的话直接下载Linux版的解压出来Navicat目录就好了
貌似有点扯远了,以x86为例介绍一下,x64的也一模一样,其实就是三个标志
标志一版本标志
[Asm] 纯文本查看 复制代码 0188527A | A1 80 23 91 01 | MOV EAX, DWORD PTR DS:[0x1912380] |[0x1912380]即为版本标志
0188527F | 0F B6 00 | MOVZX EAX, BYTE PTR DS:[EAX] |
01885282 | 83 C0 C3 | ADD EAX, 0xFFFFFFC3 |0xFFFFFFC3即为-0x3D
01885285 | 83 F8 07 | CMP EAX, 0x7 |
01885288 | 77 74 | JA navicat.18852FE | 0
0188528A | FF 24 85 91 52 88 01 | JMP DWORD PTR DS:[EAX * 4 + 0x1885291] |EAX=0时跳到018852B1由此可知Premium版的标志为0x3D
01885291 | B1 52 | MOV CL, 0x52 | 52:'R'
01885293 | 88 01 | MOV BYTE PTR DS:[ECX], AL |
01885295 | C0 52 88 01 | RCL BYTE PTR DS:[EDX - 0x78], 0x1 |
01885299 | D0 52 88 | RCL BYTE PTR DS:[EDX - 0x78], 0x1 |
0188529C | 01 FE | ADD ESI, EDI |
0188529E | 52 | PUSH EDX |
0188529F | 88 01 | MOV BYTE PTR DS:[ECX], AL |
018852A1 | E0 52 | LOOPNE navicat.18852F5 |
018852A3 | 88 01 | MOV BYTE PTR DS:[ECX], AL |
018852A5 | E0 52 | LOOPNE navicat.18852F9 |
018852A7 | 88 01 | MOV BYTE PTR DS:[ECX], AL |
018852A9 | F0 | ??? |
018852AA | 52 | PUSH EDX |
018852AB | 88 01 | MOV BYTE PTR DS:[ECX], AL |
018852AD | F0 | ??? |
018852AE | 52 | PUSH EDX |
018852AF | 88 01 | MOV BYTE PTR DS:[ECX], AL |
018852B1 | 8D 45 FC | LEA EAX, DWORD PTR SS:[EBP - 0x4] |
018852B4 | BA 90 57 88 01 | MOV EDX, navicat.1885790 | 1885790:L"Premium"
018852B9 | E8 EE 51 B8 FE | CALL <navicat.System.@UStrLAsg> |
018852BE | EB 3E | JMP navicat.18852FE |
018852C0 | 8D 45 FC | LEA EAX, DWORD PTR SS:[EBP - 0x4] |
018852C3 | 8B 15 F8 CD 90 01 | MOV EDX, DWORD PTR DS:[0x190CDF8] | 190CDF8:&L"Standard"
018852C9 | E8 DE 51 B8 FE | CALL <navicat.System.@UStrLAsg> |
018852CE | EB 2E | JMP navicat.18852FE |
标志二注册类型标志
[Asm] 纯文本查看 复制代码
018854C3 | A1 DC 14 91 01 | MOV EAX, DWORD PTR DS:[0x19114DC] |[0x19114DC]标志二
018854C8 | 81 38 FF 00 00 00 | CMP DWORD PTR DS:[EAX], 0xFF |[[0x19114DC]]=0xFF即为Site License
018854CE | 75 36 | JNE navicat.1885506 |
018854D0 | 8D 55 9C | LEA EDX, DWORD PTR SS:[EBP - 0x64] |
018854D3 | 8B BB A0 03 00 00 | MOV EDI, DWORD PTR DS:[EBX + 0x3A0] |
018854D9 | 8B C7 | MOV EAX, EDI |
018854DB | E8 14 5C CC FE | CALL <navicat._Unit34.TControl.GetText> |
018854E0 | FF 75 9C | PUSH DWORD PTR SS:[EBP - 0x64] | Arg3
018854E3 | 68 24 58 88 01 | PUSH navicat.1885824 | Arg2 = "Site License"
018854E8 | 68 E8 57 88 01 | PUSH navicat.18857E8 | Arg1 = "\r\n"
018854ED | 8D 45 A0 | LEA EAX, DWORD PTR SS:[EBP - 0x60] |
018854F0 | BA 03 00 00 00 | MOV EDX, 0x3 |
018854F5 | E8 6E 5E B8 FE | CALL <navicat.System.@UStrCatN> | System.
018854FA | 8B 55 A0 | MOV EDX, DWORD PTR SS:[EBP - 0x60] |
标志三激活标志
[Asm] 纯文本查看 复制代码 0188556E | A1 3C 20 91 01 | MOV EAX, DWORD PTR DS:[0x191203C] |[0x191203C]激活标志
01885573 | 80 38 00 | CMP BYTE PTR DS:[EAX], 0x0 |
01885576 | 75 1B | JNE navicat.1885593 |看下面注册类型标志可知如果此处跳转不实现总是未激活的
01885578 | A1 DC 14 91 01 | MOV EAX, DWORD PTR DS:[0x19114DC] |注册类型标志
0188557D | 81 38 FB 00 00 00 | CMP DWORD PTR DS:[EAX], 0xFB |
01885583 | 74 0E | JE navicat.1885593 |
01885585 | A1 80 23 91 01 | MOV EAX, DWORD PTR DS:[0x1912380] |
0188558A | 80 38 44 | CMP BYTE PTR DS:[EAX], 0x44 | 44:'D'
0188558D | 0F 85 98 00 00 00 | JNE navicat.188562B |
01885593 | A1 DC 14 91 01 | MOV EAX, DWORD PTR DS:[0x19114DC] |注册类型标志
01885598 | 81 38 FD 00 00 00 | CMP DWORD PTR DS:[EAX], 0xFD |
0188559E | 74 1E | JE navicat.18855BE |
018855A0 | A1 DC 14 91 01 | MOV EAX, DWORD PTR DS:[0x19114DC] |注册类型标志
018855A5 | 81 38 FC 00 00 00 | CMP DWORD PTR DS:[EAX], 0xFC |
018855AB | 74 11 | JE navicat.18855BE |
018855AD | A1 DC 14 91 01 | MOV EAX, DWORD PTR DS:[0x19114DC] |注册类型标志
018855B2 | 81 38 FB 00 00 00 | CMP DWORD PTR DS:[EAX], 0xFB |
018855B8 | 0F 85 94 00 00 00 | JNE navicat.1885652 | not active
018855BE | 8D 45 F0 | LEA EAX, DWORD PTR SS:[EBP - 0x10] |
018855C1 | BA 88 58 88 01 | MOV EDX, navicat.1885888 | 1885888:L"yyyy/mm/dd"
018855C6 | E8 E1 4E B8 FE | CALL <navicat.System.@UStrLAsg> |
018855CB | A1 C4 17 91 01 | MOV EAX, DWORD PTR DS:[0x19117C4] |
018855D0 | 8B 10 | MOV EDX, DWORD PTR DS:[EAX] |
018855D2 | 89 55 E0 | MOV DWORD PTR SS:[EBP - 0x20], EDX | Arg4
018855D5 | 8B 50 04 | MOV EDX, DWORD PTR DS:[EAX + 0x4] |
018855D8 | 89 55 E4 | MOV DWORD PTR SS:[EBP - 0x1C], EDX | Arg3
018855DB | FF 75 E4 | PUSH DWORD PTR SS:[EBP - 0x1C] | Arg2
018855DE | FF 75 E0 | PUSH DWORD PTR SS:[EBP - 0x20] | Arg1
018855E1 | 8D 4D EC | LEA ECX, DWORD PTR SS:[EBP - 0x14] |
018855E4 | 8B 15 D0 33 91 01 | MOV EDX, DWORD PTR DS:[0x19133D0] |
018855EA | 8B 45 F0 | MOV EAX, DWORD PTR SS:[EBP - 0x10] |
018855ED | E8 E2 6D BA FE | CALL <navicat._Unit7.FormatDateTime> | Unit7.FormatDateTime
018855F2 | 8D 55 8C | LEA EDX, DWORD PTR SS:[EBP - 0x74] |
018855F5 | 8B BB A0 03 00 00 | MOV EDI, DWORD PTR DS:[EBX + 0x3A0] |
018855FB | 8B C7 | MOV EAX, EDI |
018855FD | E8 F2 5A CC FE | CALL <navicat._Unit34.TControl.GetText> |
01885602 | FF 75 8C | PUSH DWORD PTR SS:[EBP - 0x74] | Arg4
01885605 | 68 AC 58 88 01 | PUSH navicat.18858AC | Arg3 = "Expiration Date"
0188560A | 68 D8 58 88 01 | PUSH navicat.18858D8 | Arg2 = ": "
0188560F | FF 75 EC | PUSH DWORD PTR SS:[EBP - 0x14] | Arg1
01885612 | 8D 45 90 | LEA EAX, DWORD PTR SS:[EBP - 0x70] |
01885615 | BA 04 00 00 00 | MOV EDX, 0x4 |
0188561A | E8 49 5D B8 FE | CALL <navicat.System.@UStrCatN> | System.
0188561F | 8B 55 90 | MOV EDX, DWORD PTR SS:[EBP - 0x70] |
01885622 | 8B C7 | MOV EAX, EDI |
01885624 | E8 1F 5B CC FE | CALL <navicat._Unit34.TControl.SetText> |
01885629 | EB 27 | JMP navicat.1885652 |
0188562B | 8D 55 88 | LEA EDX, DWORD PTR SS:[EBP - 0x78] |
0188562E | 8B BB A0 03 00 00 | MOV EDI, DWORD PTR DS:[EBX + 0x3A0] |
01885634 | 8B C7 | MOV EAX, EDI |
01885636 | E8 B9 5A CC FE | CALL <navicat._Unit34.TControl.GetText> |
0188563B | 8D 45 88 | LEA EAX, DWORD PTR SS:[EBP - 0x78] |
0188563E | BA EC 58 88 01 | MOV EDX, navicat.18858EC | 18858EC:L"Not Activated"
01885643 | E8 40 5C B8 FE | CALL <navicat.System.@UStrCat> |
01885648 | 8B 55 88 | MOV EDX, DWORD PTR SS:[EBP - 0x78] |
0188564B | 8B C7 | MOV EAX, EDI |
关键已介绍清楚
实现方法很多,自己发挥吧,最直接就是对这三个地址下写入断点,如果写入的值不是我们想要的就该一下
x64的也一样就不贴代码了,不过提示一下如果x64dbg调试x64版的时候总是出现异常跑不起来得时候就把ScyllaHide禁用一下
这三处标志搞定基本就没啥问题了,本人不怎么玩这个软件若还有什么限制请指出,补丁大家自己搞吧我就不做了
@gjianbo 今天又下载看了一下试了一下命令行启动,用我的方法修改是不存在未注册的情况,虽说这个软件已经小版本更新到12.0.13 以上三个标志未变化依然有效,大家可以自己操练一下 |