Navicat Keygen - 注冊機是怎么作業的?
1. 關鍵詞解釋.
-
Navicat激活公鑰
這是一個2048位的RSA公鑰,Navicat使用這個公鑰來完成相關激活資訊的加密和解密,
這個公鑰被作為 RCData 型別的資源儲存在 navicat.exe 當中,資源名為
"ACTIVATIONPUBKEY",你可以使用一個叫Resource Hacker的軟體來查看它,這個公鑰的具體內容為:-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1dqF3SkCaAAmMzs889I qdW9M2dIdh3jG9yPcmLnmJiGpBF4E9VHSMGe8oPAy2kJDmdNt4BcEygvssEfginv a5t5jm352UAoDosUJkTXGQhpAWMF4fBmBpO3EedG62rOsqMBgmSdAyxCSPBRJIOF R0QgZFbRnU0frj34fiVmgYiLuZSAmIbs8ZxiHPdp1oD4tUpvsFci4QJtYNjNnGU2 WPH6rvChGl1IRKrxMtqLielsvajUjyrgOC6NmymYMvZNER3htFEtL1eQbCyTfDmt YyQ1Wt4Ot12lxf0wVIR5mcGN7XCXJRHOFHSf1gzXWabRSvmt1nrl7sW6cjxljuuQ awIDAQAB -----END PUBLIC KEY-----如果您有相應的私鑰并樂意公開的話歡迎聯系我,我將非常感謝您的慷慨,
注意:
從 Navicat Premium 12.0.25 開始,Navicat不再從
navicat.exe的資源中加載私鑰,事實上,公鑰轉為從libcc.dll中加載,并且已經被加密,與此同時,為了防止被輕松地替換,加密的公鑰被分到5個地方儲存:以下內容是從 Navicat Premium x64 12.0.25 簡體中文版 的
libcc.dll中發現的,libcc.dll的SHA256值為607e0a84c75966b00f3d12fa833e91d159e4f51ac51b6ba66f98d0c3cbefdce0,我不保證在Navicat的其他版本中相關偏移量和下述的相同,但相關的 字串 以及 立即數 是很可能找得到的,-
在
libcc.dll中,檔案偏移量+0x01A12090的地方,儲存了加密公鑰的第一部分,以 字串 的形式儲存:"D75125B70767B94145B47C1CB3C0755E 7CCB8825C5DCE0C58ACF944E08280140 9A02472FAFFD1CD77864BB821AE36766 FEEDE6A24F12662954168BFA314BD950 32B9D82445355ED7BC0B880887D650F5" -
在
libcc.dll中,檔案偏移量+0x0059D799的地方,儲存了加密公鑰的第二部分,以 立即數 的形式儲存在一條指令中:0xFE 0xEA 0xBC 0x01相應的十進制值為:
29158142 -
在
libcc.dll中,檔案偏移量+0x01A11DA0的地方,儲存了加密公鑰的第三部分,以 字串 的形式儲存:"E1CED09B9C2186BF71A70C0FE2F1E0AE F3BD6B75277AAB20DFAF3D110F75912B FB63AC50EC4C48689D1502715243A79F 39FF2DE2BF15CE438FF885745ED54573 850E8A9F40EE2FF505EB7476F95ADB78 3B28CA374FAC4632892AB82FB3BF4715 FCFE6E82D03731FC3762B6AAC3DF1C3B C646FE9CD3C62663A97EE72DB932A301 312B4A7633100C8CC357262C39A2B3A6 4B224F5276D5EDBDF0804DC3AC4B8351 62BB1969EAEBADC43D2511D6E0239287 81B167A48273B953378D3D2080CC0677 7E8A2364F0234B81064C5C739A8DA28D C5889072BF37685CBC94C2D31D0179AD 86D8E3AA8090D4F0B281BE37E0143746 E6049CCC06899401264FA471C016A96C 79815B55BBC26B43052609D9D175FBCD E455392F10E51EC162F51CF732E6BB39 1F56BBFD8D957DF3D4C55B71CEFD54B1 9C16D458757373E698D7E693A8FC3981 5A8BF03BA05EA8C8778D38F9873D62B4 460F41ACF997C30E7C3AF025FA171B5F 5AD4D6B15E95C27F6B35AD61875E5505 449B4E" -
在
libcc.dll中,檔案偏移量+0x0059D77F的地方,儲存了加密公鑰的第四部分,以 立即數 的形式儲存在一條指令中:0x59 0x08 0x01 0x00相應的十進制值為:
67673 -
在
libcc.dll中,檔案偏移量+0x01A11D8C的地方,儲存了加密公鑰的第五部分,以 字串 的形式儲存:"92933"
這五部分按照
"%s%d%s%d%s"的形式輸出則為加密的公鑰,順序和上述的順序相同,具體的輸出為:D75125B70767B94145B47C1CB3C0755E7CCB8825C5DCE0C58ACF944E082801409A02472FAFFD1CD77864BB821AE36766FEEDE6A24F12662954168BFA314BD95032B9D82445355ED7BC0B880887D650F529158142E1CED09B9C2186BF71A70C0FE2F1E0AEF3BD6B75277AAB20DFAF3D110F75912BFB63AC50EC4C48689D1502715243A79F39FF2DE2BF15CE438FF885745ED54573850E8A9F40EE2FF505EB7476F95ADB783B28CA374FAC4632892AB82FB3BF4715FCFE6E82D03731FC3762B6AAC3DF1C3BC646FE9CD3C62663A97EE72DB932A301312B4A7633100C8CC357262C39A2B3A64B224F5276D5EDBDF0804DC3AC4B835162BB1969EAEBADC43D2511D6E023928781B167A48273B953378D3D2080CC06777E8A2364F0234B81064C5C739A8DA28DC5889072BF37685CBC94C2D31D0179AD86D8E3AA8090D4F0B281BE37E0143746E6049CCC06899401264FA471C016A96C79815B55BBC26B43052609D9D175FBCDE455392F10E51EC162F51CF732E6BB391F56BBFD8D957DF3D4C55B71CEFD54B19C16D458757373E698D7E693A8FC39815A8BF03BA05EA8C8778D38F9873D62B4460F41ACF997C30E7C3AF025FA171B5F5AD4D6B15E95C27F6B35AD61875E5505449B4E6767392933這個加密的公鑰可以用我的另外一個repo(how-does-navicat-encrypt-password)解密,其中密鑰為
b'23970790',例如:
E:\GitHub>git clone https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password.git ... E:\GitHub>cd how-does-navicat-encrypt-password\python3 E:\GitHub\how-does-navicat-encrypt-password\python3>python Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from NavicatCrypto import * >>> cipher = Navicat11Crypto(b'23970790') >>> print(cipher.DecryptString('D75125B70767B94145B47C1CB3C0755E7CCB8825C5DCE0C58ACF944E082801409A02472FAFFD1CD77864BB821AE36766FEEDE6A24F12662954168BFA314BD95032B9D82445355ED7BC0B880887D650F529158142E1CED09B9C2186BF71A70C0FE2F1E0AEF3BD6B75277AAB20DFAF3D110F75912BFB63AC50EC4C48689D1502715243A79F39FF2DE2BF15CE438FF885745ED54573850E8A9F40EE2FF505EB7476F95ADB783B28CA374FAC4632892AB82FB3BF4715FCFE6E82D03731FC3762B6AAC3DF1C3BC646FE9CD3C62663A97EE72DB932A301312B4A7633100C8CC357262C39A2B3A64B224F5276D5EDBDF0804DC3AC4B835162BB1969EAEBADC43D2511D6E023928781B167A48273B953378D3D2080CC06777E8A2364F0234B81064C5C739A8DA28DC5889072BF37685CBC94C2D31D0179AD86D8E3AA8090D4F0B281BE37E0143746E6049CCC06899401264FA471C016A96C79815B55BBC26B43052609D9D175FBCDE455392F10E51EC162F51CF732E6BB391F56BBFD8D957DF3D4C55B71CEFD54B19C16D458757373E698D7E693A8FC39815A8BF03BA05EA8C8778D38F9873D62B4460F41ACF997C30E7C3AF025FA171B5F5AD4D6B15E95C27F6B35AD61875E5505449B4E6767392933')) -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1dqF3SkCaAAmMzs889I qdW9M2dIdh3jG9yPcmLnmJiGpBF4E9VHSMGe8oPAy2kJDmdNt4BcEygvssEfginv a5t5jm352UAoDosUJkTXGQhpAWMF4fBmBpO3EedG62rOsqMBgmSdAyxCSPBRJIOF R0QgZFbRnU0frj34fiVmgYiLuZSAmIbs8ZxiHPdp1oD4tUpvsFci4QJtYNjNnGU2 WPH6rvChGl1IRKrxMtqLielsvajUjyrgOC6NmymYMvZNER3htFEtL1eQbCyTfDmt YyQ1Wt4Ot12lxf0wVIR5mcGN7XCXJRHOFHSf1gzXWabRSvmt1nrl7sW6cjxljuuQ awIDAQAB -----END PUBLIC KEY-----
注意:
從 Navicat Premium 12.1.11 開始,Navicat不再用上面說的方法加載密鑰,當然密鑰還是儲存在
libcc.dll檔案中,當Navicat啟動時,它會用8位元組長的XOR密鑰來加密公鑰,并儲存到一個靜態資料區中,當驗證 激活碼 時,Navicat會重新生成一樣的8位元組XOR密鑰,并解密在靜態儲存區中的密文,從而獲取公鑰,在
libcc.dll,x64版本中,你會看到如下的幾條指令:xoreax,'M' mov byte_xxxxxx,al ... xoreax,'I' mov byte_xxxxxx,al ... xoreax,'I' mov byte_xxxxxx,al ... xoreax,'B' mov byte_xxxxxx,al ... xoreax,'I' mov byte_xxxxxx,al ... xoreax,'j' mov byte_xxxxxx,al ... ...
-
-
請求碼
這是一個Base64編碼的字串,代表的是長度為256位元組的資料,這256位元組的資料是 離線激活資訊 用 Navicat激活公鑰 加密的密文,
-
離線激活請求資訊
這是一個JSON風格的字串,它包含了3個Key:
"K"、"DI"和"P",分別代表 序列號、設備識別碼(與你的電腦硬體資訊相關)和 平臺 (其實就是作業系統型別),例如:
{"K": "xxxxxxxxxxxxxxxx", "DI": "yyyyyyyyyyyyy", "P": "WIN8"} -
激活碼
這是一個Base64編碼的字串,代表的是長度為256位元組的資料,這256位元組的資料是 離線激活回復資訊 用 Navicat激活私鑰 加密的密文,目前我們不知道官方的 Navicat激活私鑰,所以我們得替換掉軟體里的公鑰,
-
離線激活回復資訊
和 離線激活請求資訊 一樣,它也是一個JSON風格的字串,但是它包含5個Key,分別為
"K"、"N"、"O"、"T"和"DI"."K"和"DI"的意義與 離線激活請求資訊 中的相同,且Value必須與 離線激活請求資訊 中的相同,"N"、"O"、"T"分別代表 注冊名、組織、授權時間,注冊名 和 組織 的值型別為UTF-8編碼的字串,授權時間 的值型別可以為字串或整數(感謝@Wizr在issue #10中的報告),
"T"可以被省略, -
序列號
這是一個被分為了4個部分的字串,其中每個部分都是4個字符長,
序列號 是通過10個位元組的資料來生成的,為了表達方便,我用 uint8_t data[10] 來表示這10個位元組,
-
data[0] 和 data[1] 必須分別為
0x68和0x2A,這兩個位元組為Navicat的標志數,
-
data[2]、data[3] 和 data[4] 可以是任意位元組,你想設成什么都行,
-
data[5] 和 data[6] 是Navicat的語言標志,值如下:
語言型別 data[5] data[6] 發現者 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 -
data[7] 是Navicat產品ID,(感謝 @dragonflylee 和 @Deltafox79提供的資料)
產品名 Enterprise Standard Educational Essentials Navicat Report Viewer 0x0B Navicat Data Modeler 3 0x84 0x85 Navicat Premium 0x65 0x66 0x67 Navicat MySQL 0x68 0x69 0x6A 0x6B Navicat PostgreSQL 0x6C 0x6D 0x6E 0x6F Navicat Oracle 0x70 0x71 0x72 0x73 Navicat SQL Server 0x74 0x75 0x76 0x77 Navicat SQLite 0x78 0x79 0x7A 0x7B Navicat MariaDB 0x7C 0x7D 0x7E 0x7F Navicat MongoDB 0x80 0x81 0x82 -
data[8] 的高4位代表 版本號,低4位未知,但可以用來延長激活期限,可取的值有
0000和0001,例如:
對于 Navicat 12: 高4位必須是
1100,為12的二進制形式,
對于 Navicat 11: 高4位必須是1011,為11的二進制形式, -
data[9] 目前暫未知,但如果你想要 not-for-resale license 的話可以設成
0xFD、0xFC或0xFB,根據 Navicat 12 for Mac x64 版本殘留的符號資訊可知:
0xFB是 Not-For-Resale-30-days license.0xFC是 Not-For-Resale-90-days license.0xFD是 Not-For-Resale-365-days license.0xFE是 Not-For-Resale license.0xFF是 Site license.
之后Navicat使用 ECB 模式的 DES 演算法來加密 data[10] 的后8位元組,也就是 data[2] 到 data[9] 的部分,
相應的DES密鑰為:
unsigned char DESKey = { 0x64, 0xAD, 0xF3, 0x2F, 0xAE, 0xF2, 0x1A, 0x27 };
之后使用Base32編碼 data[10],其中編碼表改為:
char EncodeTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
編碼之后你應該會得到一個16位元組長的字串,并且以"NAV"打頭,
將16位元組的字串分成4個4位元組的小塊,然后用
"-"連接就可以得到 序列號, -
2. 激活程序
-
檢查用戶輸入的 序列號 是否合法,
-
在用戶點擊了
激活按鈕之后,Navicat會先嘗試在線激活,如果失敗,用戶可以選擇離線激活, -
Navicat會使用用戶輸入的 序列號 以及從用戶電腦收集來的資訊生成 離線激活請求資訊,然后用 Navicat激活公鑰 加密,并將密文用Base64編碼,最后得到 請求碼,
-
正常流程下,請求碼 應該通過可聯網的電腦發送給Navicat的官方激活服務器,之后Navicat的官方激活服務器會回傳一個合法的 激活碼,
但現在我們使用注冊機來扮演官方激活服務器的角色,只是Navicat軟體里的激活公鑰得換成自己的公鑰:
-
根據 請求碼, 獲得
"DI"值和"K"值, -
用
"K"值、用戶名、組織名和"DI"值填寫 離線激活回復資訊, -
用自己的2048位RSA私鑰加密 離線激活回復資訊,你將會得到256位元組的密文,
-
用Base64編碼這256位元組的密文,就可以得到 激活碼,
-
在Navicat軟體中填入 激活碼 即可完成離線激活,
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/97506.html
標籤:MySQL
