1 Star 0 Fork 6

ythyty / navicat-keygen

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.zh-CN.md 12.40 KB
一键复制 编辑 原始数据 按行查看 历史
Double Sine 提交于 2018-06-24 12:18 . Add Chinese README

Navicat Keygen

这份repo将会告诉你Navicat是怎么完成离线激活的。

1. 关键词解释

  • Navicat激活公钥

    这是一个2048位的RSA公钥,Navicat使用这个公钥来完成相关激活信息的加密和解密。

    这个公钥储存在 Navicat Premium.app/Contents/Resources/rpk 中,你可以用任何一种文本编辑器打开并查看它。这个公钥的具体内容为:

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1dqF3SkCaAAmMzs889I
    qdW9M2dIdh3jG9yPcmLnmJiGpBF4E9VHSMGe8oPAy2kJDmdNt4BcEygvssEfginv
    a5t5jm352UAoDosUJkTXGQhpAWMF4fBmBpO3EedG62rOsqMBgmSdAyxCSPBRJIOF
    R0QgZFbRnU0frj34fiVmgYiLuZSAmIbs8ZxiHPdp1oD4tUpvsFci4QJtYNjNnGU2
    WPH6rvChGl1IRKrxMtqLielsvajUjyrgOC6NmymYMvZNER3htFEtL1eQbCyTfDmt
    YyQ1Wt4Ot12lxf0wVIR5mcGN7XCXJRHOFHSf1gzXWabRSvmt1nrl7sW6cjxljuuQ
    awIDAQAB
    -----END PUBLIC KEY-----

    如果您有相应的私钥并乐意公开的话欢迎联系我,我将非常感谢您的慷慨。

    注意:

    Navicat Premium for Mac 12.0.24 开始,公钥不再存储在 Navicat Premium.app/Contents/Resources/rpk 中。事实上,公钥放在了Navicat的二进制执行文件 Navicat Premium.app/Contents/MacOS/Navicat Premium 中,你可以通过搜索"-----BEGIN PUBLIC KEY-----"来找到它。

  • 请求码

    这是一个Base64编码的字符串,代表的是长度为256字节的数据。这256字节的数据是 离线激活请求信息Navicat激活公钥 加密的密文。

  • 离线激活请求信息

    这是一个JSON风格的字符串。它包含了3个Key:"K""DI""P",分别代表 序列号设备识别码(与你的电脑硬件信息相关)和 平台 (其实就是操作系统类型)。

    例如:

    {
        "K": "xxxxxxxxxxxxxxxx",
        "P": "Mac 10.13",
        "DI": "xxxxxxxxxxxxxxxxxxxx"
    }

  • 激活码

    这是一个Base64编码的字符串,代表的是长度为256字节的数据。这256字节的数据是 离线激活回复信息Navicat激活私钥 加密的密文,目前我们不知道官方的 Navicat激活私钥

  • 离线激活回复信息

    离线激活请求信息 一样,它也是一个JSON风格的字符串。但是它包含5个Key,分别为"K""N""O""T""DI".

    "K""DI" 的意义与 离线激活请求信息 中的相同,且Value必须与 离线激活请求信息 中的相同。

    "N""O""T" 分别代表 注册名组织授权时间注册名组织 的值类型为字符串,授权时间 的值类型可以为字符串或整数(感谢@Wizr在issue #10的报告)。

    与Windows版本不同的是,"T"是必须的,且代表的时间必须位于当前时间-1 ~ +4天之内。下面是一个 离线激活回复信息 的示例:

    {
        "DI" : "xxxxxxxxxxxxxxxxxxxx",
        "T" : "1515770827.925012",
        "K" : "xxxxxxxxxxxxxxxx",
        "N" : "DoubleLabyrinth",
        "O" : "Shadow"
    }

  • 序列号

    这是一个被分为了4个部分的字符串,其中每个部分都是4个字符长。

    序列号 是通过10个字节的数据来生成的。为了表达方便,我用 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

      根据 Navicat 12 for Mac x64 版本残留的符号信息可知这两个字节为 Product Signature

    4. data[7] 指示这是 commercial license 还是 non-commercial license

      对于 Navicat 12: 0x65commercial license0x66non-commercial license
      对于 Navicat 11: 0x15commercial license0x16non-commercial license

      Navicat产品类型变化时,这两个值可能会变。目前暂未确认。

      根据 Navicat 12 for Mac x64 版本残留的符号信息可知:commercial licenseEnterprise Licensenon-commercial licenseEducational License

    5. data[8] 的高4位代表 版本号。低四位未知,但可以用来延长激活期限,可取的值有00000001

      对于 Navicat 12: 高4位必须是1100,为12的二进制形式。
      对于 Navicat 11: 高4位必须是1011,为11的二进制形式。

    6. data[9] 目前暂未知,但如果你想要 not-for-resale license 的话可以设成0xFD0xFC0xFB。这个值一定不能是0x00,其他值随便。

      根据 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 };

    之后编码 data[10]

    1. data[10] 视作为一个80位长的数据。

      如果 data[10]0x680x2A开始的话,80位长的数据应该为01011000 00101010......

    2. 将80位长的数据分为16个5位长的块。

      如果 data[10]0x680x2A开始的话,16个5位长的块应为0101100000101010....

    3. 这样每一块的值就会小于32。将它们通过下表编码:

      // Thanks for discoveries from @Wizr, issue #10
      char EncodeTable[] = "ABCDEFGH8JKLMN9PQRSTUVWXYZ234567";

      你就会得到一个16字节的字符串。

      如果 data[10]0x680x2A开始的话,编码之后应该以"N""A""V"打头。

    4. 将16字节的字符串分成4个4字节的小块,然后用"-"连接就可以得到 序列号

3. 激活过程

  1. 检查用户输入的 序列号 是否合法。

  2. 在用户点击了激活按钮之后,Navicat会先尝试在线激活。如果失败,用户可以选择离线激活。

  3. Navicat会使用用户输入的 序列号 以及从用户电脑收集来的信息生成 离线激活请求信息,然后用 Navicat激活公钥 加密,并将密文用Base64编码,最后得到 请求码

  4. 正常流程下,请求码 应该通过可访问Internet的电脑发送给Navicat的官方激活服务器。之后Navicat的官方激活服务器会返回一个合法的 激活码

    但现在我们使用注册机来扮演官方激活服务器的角色,只是Navicat软件里的激活公钥得换成自己的公钥:

    1. 根据 请求码, 获得"DI"值和"K"值。

    2. "K"值、用户名、组织名和"DI"值填写 离线激活回复信息

    3. 用自己的2048位RSA私钥加密 离线激活回复信息,你将会得到256字节的密文。

    4. 用Base64编码这256字节的密文,就可以得到 激活码

    5. 在Navicat软件中填入 激活码 即可完成离线激活。

4. 如何编译

  • 在编译之前,你应该确保你安装了OpenSSL。如果你有brew的话,你可以通过brew install openssl来完成OpenSSL的安装。

    $ cd navicat-keygen
    $ make release
  • 如果你的Navicat版本号等于或大于12.0.24,你需要编译patcher。

    $ cd navicat-patcher
    $ make release

注意:

对于Navicat版本号等于或大于12.0.24的,如果你想要使用自己的RSA密钥,请在编译patcher之前替换掉navicat-patcher/main.c里下面的内容

const char pubkey[9][72] = {
"-----BEGIN PUBLIC KEY-----",
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxqkTcfbKw8ysVygePlcB",
"oUAhCF6oniyP13iDtu85ZsHwqw8PnMyTp6n6FnMN9YinleIAy6NFveBu/vshTN8S",
"oXbYyy5AqdZ8CQpfvuriO9UNfgV1l7SFdPPpruFAmOw+uzA3GawMsg3QNK/htqJe",
"b4xKHFS04xC2AueE2RTmk6tJcL8TEBfRG7DEYOHPjebKl1NQ3ZIu15U97cCPYKO2",
"pWHzsb+Fr4Wj0DChLoxlXxaBcJ2ozogaq0tW2t4Aopvt9kRSuSK9HcgxICJM5ct4",
"naU91WFGWlw0+0JpiMIl5OnMbpak/5xQre9DL8zM8LjRy14I88txvXvhPEsWaYCO",
"1QIDAQAB",
"-----END PUBLIC KEY-----"
};

为你自己的RSA公钥。

4. 如何使用这个Keygen

  1. 编译好keygen。

  2. 生成2048位的RSA密钥对。(仅限Navicat Premium版本号小于12.0.24)

    $ openssl genrsa -out 2048key.pem 2048
    $ openssl rsa -in 2048key.pem -pubout -out rpk

    你会得到两个文件:2048key.pemrpk

    现在你们可以不用生成RSA密钥了,我已经准备好了这两个文件:

    • rpk文件在navicat-patcher文件夹中。

    • 2048key.pemnavicat-keygen文件夹中。

  3. 对于Navicat Premium版本 < 12.0.24的:

    • 用生成或提供的rpk文件替换掉Navicat Premium.app/Contents/Resources/rpk

    对于Navicat Premium版本 >= 12.0.24的:

    • 备份好Navicat Premium.app/Contents/MacOS/Navicat Premium文件,以及Navicat中所有的数据库连接配置信息(包括密码)

    • 删掉Keychain.app中所有由Navicat保存的密码。

    • 运行patcher:

      $ cd navicat-patcher
      $ ./navicat-patcher <your navicat executable file path>

      例如:

      $ cd navicat-patcher
      $ ./navicat-patcher /Applications/Navicat\ Premium.app/Contents/MacOS/Navicat\ Premium
    • 生成一个自签名的代码签名证书,并在Keychain.app中总是信任它。然后使用codesign命令对Navicat Premium.app进行重签名。这一步非常重要。

      $ codesign -f -s "Your self-signed code-sign certificate name" <path to Navicat Premium.app>
  4. 接下来,打开Terminal.app,并定位到navicat-keygen文件夹:

    $ ./navicat-keygen 2048key.pem

    接下来你会被要求输入Navicat的语言版本,然后得到一个 序列号,同时keygen会要求你输入用户名和组织名。
    直接填写,之后你会被要求填写你得到的 请求码。注意此时 不要关闭Terminal.

  5. 打开Navicat Premium。找到注册按钮并点击,在弹出的窗口中填入keygen给你的 序列号。然后点击激活按钮。

  6. 一般来说在线激活肯定会失败,这时候Navicat会询问你是否手动激活,直接选吧。

  7. 手动激活窗口你会得到一个请求码,复制它并把它粘贴到keygen里。最后别忘了连按至少两下回车结束输入。

  8. 如果不出意外,你会得到一个看似用Base64编码的 激活码。直接复制它,并把它粘贴到Navicat的手动激活窗口,最后点激活按钮。如果没什么意外的话应该能成功激活。

  9. 最后,如果你备份了数据库连接配置信息,那么恢复它把。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
HTML
1
https://gitee.com/ythyty/navicat-keygen.git
git@gitee.com:ythyty/navicat-keygen.git
ythyty
navicat-keygen
navicat-keygen
mac

搜索帮助