navicat-keygen
Navicat Keygen
This repository will tell you how Navicat offline activation works.
- Keyword Explanation.
Navicat Activation Public Key
It is a RSA-2048 public key that Navicat used to encrypt or decrypt offline activation information.
It is stored in navicat.exe as a kind of resource called RCData. The resource name is “ActivationPubKey”. You can see it by a kind of software Resource Hacker. The concrete content is:
1 | -----BEGIN PUBLIC KEY----- |
If you have the corresponding private key, please tell me. I would be very appreciated for your generous.
NOTICE:
Start from Navicat Premium 12.0.25, Navicat do not load this public key from resource in navicat.exe. Actually the public key is stored in libcc.dll and encrypted. And to avoid being replaced easily, the public key is split into 5 parts:
At file offset + 0x1A12090 in libcc.dll, stored as char string:
1 | "D75125B70767B94145B47C1CB3C0755E |
At file offset + 0x59D799 in libcc.dll, stored as immediate value in a instruction:
1 | 0xFE 0xEA 0xBC 0x01 |
In decimal: 29158142
At file offset + 0x1A11DA0 in libcc.dll, stored as char string:
1 | "E1CED09B9C2186BF71A70C0FE2F1E0AE |
At file offset + 0x59D77F in libcc.dll, stored as immediate value in a instruction:
1 | 0x59 0x08 0x01 0x00 (in decimal ) |
In decimal: 67673
At file offset + 0x1A11D8C in libcc.dll, stored as char string:
1 | "92933" |
Then output encrypted public key with format “%s%d%s%d%s”, the order is the same as it list:
1 | D75125B70767B94145B47C1CB3C0755E7CCB8825C5DCE0C58ACF944E082801409A02472FAFFD1CD77864BB821AE36766FEEDE6A24F12662954168BFA314BD95032B9D82445355ED7BC0B880887D650F529158142E1CED09B9C2186BF71A70C0FE2F1E0AEF3BD6B75277AAB20DFAF3D110F75912BFB63AC50EC4C48689D1502715243A79F39FF2DE2BF15CE438FF885745ED54573850E8A9F40EE2FF505EB7476F95ADB783B28CA374FAC4632892AB82FB3BF4715FCFE6E82D03731FC3762B6AAC3DF1C3BC646FE9CD3C62663A97EE72DB932A301312B4A7633100C8CC357262C39A2B3A64B224F5276D5EDBDF0804DC3AC4B835162BB1969EAEBADC43D2511D6E023928781B167A48273B953378D3D2080CC06777E8A2364F0234B81064C5C739A8DA28DC5889072BF37685CBC94C2D31D0179AD86D8E3AA8090D4F0B281BE37E0143746E6049CCC06899401264FA471C016A96C79815B55BBC26B43052609D9D175FBCDE455392F10E51EC162F51CF732E6BB391F56BBFD8D957DF3D4C55B71CEFD54B19C16D458757373E698D7E693A8FC39815A8BF03BA05EA8C8778D38F9873D62B4460F41ACF997C30E7C3AF025FA171B5F5AD4D6B15E95C27F6B35AD61875E5505449B4E6767392933 |
This encrypted public key can be decrypted by my another repo: how-does-navicat-encrypt-password, while the key used is b’23970790’
Example:
1 | E:\GitHub>git clone https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password.git |
Request Code
It is a Base64 string that represents 256-bytes-long data, while the 256-bytes-long data is the cipher text of the offline activation information encrypted by Navicat Activation Public Key.
Offline Activation Request Information
It is just a JSON-style ASCII string which contains 3 items. Respectively they are “K”, “DI” and “P”, which represent snKey, DeviceIdentifier (related with your machine), Platform (Appropriately speaking, it should be OS Type).
Like:
1 | {"K": "xxxxxxxxxxxxxxxx", "DI": "yyyyyyyyyyyyy", "P": "WIN8"} |
Activation Code
It is a Base64 string that represents 256-bytes-long data, while the 256-bytes-long data is the cipher text of the offline activation response information encrypted by Navicat Activation Private Key (so far, we don’t know official activation private key).
Offline Activation Response Information
Just like Offline Activation Request Information, it is also a JSON-style ASCII string. But it contains 5 items. Respectively they are “K”, “N”, “O”, “T”, ‘DI’.
“K” and “DI” has the same meaning mentioned in Offline Activation Request Information and must be same with the corresponding items in Offline Activation Request Information.
“N”, “O”, “T” represent Name, Organization, Time respectively. Name and Organization are string and the type of Time can be string or integer (Thanks for discoveries from @Wizr, issue #10).
“T” can be omitted.
snKey
It is a 4-block-long string, while every block is 4-chars-long.
snKey is generated by 10-bytes-long data. In order to explain it easily, I use data[10] to represent the 10-bytes-long data.
data[0] and data[1] must be 0x68 and 0x2A respectively.
1 | May change when Navicat product changes. Uncertain yet. |
data[2], data[3] and data[4] can be any byte. Just set them whatever you want.
1 | May change when Navicat product changes. Uncertain yet. But it's very possible right. |
data[5] and data[6] are related with your Navicat product language. It depends.
1 | May change when Navicat product changes. Uncertain yet. |
Language data[5] data[6] Discoverer English 0xAC 0x88
简体中文 0xCE 0x32
繁體中文 0xAA 0x99
日本語 0xAD 0x82 @dragonflylee Polski 0xBB 0x55 @dragonflylee Español 0xAE 0x10 @dragonflylee Français 0xFA 0x20 @Deltafox79 Deutsch 0xB1 0x60 @dragonflylee 한국어 0xB5 0x60 @dragonflylee Русский 0xEE 0x16 @dragonflylee Português 0xCD 0x49 @dragonflylee
According to Navicat 12 for Mac x64 version, what IDA 7.0 indicates is that this two bytes are product signature.
data[7] represents whether it is commercial license or non-commercial license.
For Navicat 12 x64: 0x65 is commercial license, 0x66 is non-commercial license.
For Navicat 11 x64: 0x15 is commercial license, 0x16 is non-commercial license.
1 | May change when Navicat product changes. Uncertain yet. |
According to Navicat 12 for Mac x64 version, what IDA 7.0 indicates is that commercial license is Enterprise License and non-commercial license is Educational License.
High 4 bits of data[8] represents version number. Low 4 bits is unknown, but we can use it to delay activation deadline. Possible value is 0000 or 0001.
For Navicat 12 x64: High 4 bits must be 1100, which is the binary of number 12.
For Navicat 11 x64: High 4 bits must be 1011, which is the binary of number 11.
1 | Must change when version change. Confirmed by Navicat 12 for Mac x64 with IDA Pro 7.0 |
data[9] is unknown, but you can set it 0xFD or 0xFC or 0xFB if you want to use not-for-resale license.
1 | May change when Navicat product changes. Uncertain yet. |
According to Navicat 12 for Mac x64 version, what IDA 7.0 indicates is that:
1 | 0xFB is Not-For-Resale-30-days license. |
The DES key is:
1 | unsigned char DESKey = { 0x64, 0xAD, 0xF3, 0x2F, 0xAE, 0xF2, 0x1A, 0x27 }; |
Then encode the 10-bytes-long data: (Use Base32 encode if you just want a conclusion.)
Regard data[10] as a 80-bits-long data.
If data[10] starts with 0x68 and 0x2A, so the 80-bits-long data is 01011000 00101010……
Divide the 80-bits-long data as 16 5-bits-long blocks.
If data[10] starts with 0x68 and 0x2A, so the 80-bits-long data is 01011, 00000, 10101, 0…., …
So the value every block is less than 32. Map them by a encode-table:
1 | char EncodeTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; |
Then you will get a 16-char-long string.
If data[10] starts with 0x68 and 0x2A, so after encoded, it should starts with “N”, “A”, “V”.
Divide the 16-char-long string to four 4-chars-long blocks, Then you get snKey.
- Activation Process
Check whether sn_Key that user inputs is legal.
After user clicks Activate, Navicat will start online activation first. If fails, user can choose offline activation.
Navicat will use the snKey that user inputs and some information collected from user’s machine to generate Offline Activation Request Information, then encrypt it by Navicat Activation Public Key and return Base64-encoded string as Request Code.
In legal way, the Request Code should be sent to Navicat official activation server by a Internet-accessible computer. And Navicat official activation server will return a legal Activation Code.
But now, we use keygen to play the official activation server’s role.
According to the Request Code, Get “DI” value and “K” value.
Fill Offline Activation Response Information with “K” value, name, organization name and “DI” value.
Encrypt Offline Activation Response Information by Navicat Activation Private Key and you will get 256-byte-long data.
Encode 256-byte-long data by Base64. The result is Activation Code.
Input Activation Code, then offline activation is done.
- How to use
Build patcher and keygen in Release configuration or download the latest release.
Replace Navicat Activation Public Key in navicat.exe or libcc.dll.
Example:
For Navicat Premium version < 12.0.25
1 | E:\GitHub\navicat-keygen\x64\Release>navicat-patcher.exe "D:\Program Files\PremiumSoft\Navicat Premium 12" |
For Navicat Premium version >= 12.0.25
1 | E:\GitHub\navicat-keygen\x64\Release>navicat-patcher.exe "D:\Program Files\PremiumSoft\Navicat Premium 12" |
You may wait for a few seconds or even longer, because patcher is search for a appropriate RSA key. Finally you will get RegPrivateKey.pem file at current directory.
If you do not want to search, use RegPrivateKey.pem in my latest release, then:
1 | E:\GitHub\navicat-keygen\x64\Release>navicat-patcher.exe "D:\Program Files\PremiumSoft\Navicat Premium 12" RegPrivateKey.pem |
Then in console:
1 | E:\GitHub\navicat-keygen\x64\Release>navicat-keygen.exe RegPrivateKey.pem |
You will get a snKey and be asked to input your name and organization.
Just input and then you will be asked to input the request code. Now DO NOT CLOSE KEYGEN.
Disconnect network and open Navicat Premium, find and click Registration. Then input Registration Key by snKey that keygen gave. Then click Activate.
Generally online activation will failed and Navicat will ask you do Manual Activation, just choose it.
Copy your request code and paste it in keygen. Input empty line to tell keygen that your input ends.
Then you will get activation code which looks like a Base64 string. Just copy it and paste it in Navicat Manual Activation window, then click Activate. If nothing is wrong, activation should be done successfully.