Navicat Keygen - 註冊機是怎麼工作的?

来源:https://www.cnblogs.com/88223100/archive/2019/12/05/how_does_navicat_keygen_work.html
-Advertisement-
Play Games

Navicat Keygen - 註冊機是怎麼工作的? 1. 關鍵詞解釋. Navicat激活公鑰 這是一個2048位的RSA公鑰,Navicat使用這個公鑰來完成相關激活信息的加密和解密。 這個公鑰被作為 RCData 類型的資源儲存在 navicat.exe 當中。資源名為"ACTIVATION ...


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的其他版本中相關偏移量和下述的相同,但相關的 字元串 以及 立即數 是很可能找得到的。

    1. libcc.dll中,文件偏移量+0x01A12090的地方,儲存了加密公鑰的第一部分,以 字元串 的形式儲存:

      "D75125B70767B94145B47C1CB3C0755E  
       7CCB8825C5DCE0C58ACF944E08280140  
       9A02472FAFFD1CD77864BB821AE36766  
       FEEDE6A24F12662954168BFA314BD950  
       32B9D82445355ED7BC0B880887D650F5" 
      
    2. libcc.dll中,文件偏移量+0x0059D799的地方,儲存了加密公鑰的第二部分,以 立即數 的形式儲存在一條指令中:

      0xFE 0xEA 0xBC 0x01
      

      相應的十進位值為: 29158142

    3. 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"
      
    4. libcc.dll中,文件偏移量+0x0059D77F的地方,儲存了加密公鑰的第四部分,以 立即數 的形式儲存在一條指令中:

      0x59 0x08 0x01 0x00
      

      相應的十進位值為: 67673

    5. 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個位元組。

    1. data[0]data[1] 必須分別為 0x680x2A

      這兩個位元組為Navicat的標誌數。

    2. data[2]data[3]data[4] 可以是任意位元組,你想設成什麼都行。

    3. 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
    4. data[7] 是Navicat產品ID。(感謝 @dragonflylee 和 @Deltafox79提供的數據)

      產品名EnterpriseStandardEducationalEssentials
      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  
    5. data[8] 的高4位代表 版本號。低4位未知,但可以用來延長激活期限,可取的值有00000001

      例如:

      對於 Navicat 12: 高4位必須是1100,為12的二進位形式。
      對於 Navicat 11: 高4位必須是1011,為11的二進位形式。

    6. data[9] 目前暫未知,但如果你想要 not-for-resale license 的話可以設成0xFD0xFC0xFB

      根據 Navicat 12 for Mac x64 版本殘留的符號信息可知:

      • 0xFBNot-For-Resale-30-days license.
      • 0xFCNot-For-Resale-90-days license.
      • 0xFDNot-For-Resale-365-days license.
      • 0xFENot-For-Resale license.
      • 0xFFSite 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. 激活過程

  1. 檢查用戶輸入的 序列號 是否合法。

  2. 在用戶點擊了激活按鈕之後,Navicat會先嘗試線上激活。如果失敗,用戶可以選擇離線激活。

  3. Navicat會使用用戶輸入的 序列號 以及從用戶電腦收集來的信息生成 離線激活請求信息,然後用 Navicat激活公鑰 加密,並將密文用Base64編碼,最後得到 請求碼

  4. 正常流程下,請求碼 應該通過可聯網的電腦發送給Navicat的官方激活伺服器。之後Navicat的官方激活伺服器會返回一個合法的 激活碼

    但現在我們使用註冊機來扮演官方激活伺服器的角色,只是Navicat軟體里的激活公鑰得換成自己的公鑰:

    1. 根據 請求碼, 獲得"DI"值和"K"值。

    2. "K"值、用戶名、組織名和"DI"值填寫 離線激活回覆信息

    3. 用自己的2048位RSA私鑰加密 離線激活回覆信息,你將會得到256位元組的密文。

    4. 用Base64編碼這256位元組的密文,就可以得到 激活碼

    5. 在Navicat軟體中填入 激活碼 即可完成離線激活。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 其實這裡說得字元串處理,對應的是bash官網中的【Shell Parameter Expansion】,不過直接去看這部分內容實在是太難以理解了。就按照馬哥所說的字元串處理會比較好理解,平常使用應該也是足夠的了。 字元串切片 這塊在上一篇講解數組的文章中,也大概提到了Shell Paramet ...
  • 版權聲明:本文為博主原創文章,轉載請註明出處。 https://www.cnblogs.com/YaoYing/ 系統配置和軟體安裝 歡迎界面 當你看到這個界面的時候,那麼恭喜你,你入坑了(哈哈) 同時也表示我們製作的SD卡是沒問題的。 接下來我們開始配置它。 國家和語言設置,不出意外和我一樣就行。 ...
  • 需要在文件夾內所有txt文件的文件名前面添加"gt_"; 就是由原來的文件“xxx.txt”變成“gt_xxx.txt”: 網上搜來的腳本如下: for i in `ls`; do mv -f $i 'echo "gt_"$i`; done 1、首先, linux命令行切換到你需要修改文件名的目錄之 ...
  • 首篇筆記,多多關照。方便回憶和給新手指導,大神繞道 首先在Linux系統部署.net Core項目首先準備一個Linux系統的伺服器,百度雲,阿裡雲都行。 1.net core 部署在Linux系統上運行的環境搭建總結 指導連接:https://www.cnblogs.com/hzzxq/archi ...
  • 1、進入docker hub鏡像倉庫地址:https://hub.docker.com/ 2、搜索rabbitMq,進入官方的鏡像,可以看到以下幾種類型的鏡像;我們選擇帶有“mangement”的版本(包含web管理頁面); 3、拉起鏡像 docker pull rabbitmq:3.7.7-man ...
  • 眾所周知,ElasticSearch 存在一個問題,無法查詢最近 1s 的寫入。近實時這個屬性,限制了其在某些場景的應用。本文記錄了我在日常工作中想到的,解決特定場景的一些方案。既然是記錄,便會有好有壞,僅供大家參考。 預設上下文 一個書籍(book)索引(index),文檔(doc)屬性有:名稱( ...
  • 1:masterha_check_repl 副本集方面報錯 replicates is not defined in the configuration file! 具體信息如下: 分析:MHA 漂移過後,我們知道配置信息中 主節點的信息就不在了,我們需要及時維護,否則/usr/local/bin/ ...
  • 有人在社區問到:C#調用Oracle中自定義函數的返回值時,無法正常調用。但在PL/SQL中正常調用返回。 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...