某数据库管理软件离线注册分析

摘要:
1.数据[0]和数据[1]必须分别为“0x68”和“0x2A”|语言类型|数据[5]|数据[6]| |--------------|:|产品名称|企业|标准|教育|基本知识||--------------------:“P”:{“K”:“DI”:“N”:“O”:“T”:

序列号 

libcc.dll sub_1818810F0

4x4=16字节

通过10个字节的数据来生成的。

1. data[0] 和 data[1]必须分别为 `0x68` 和 `0x2A`。这两个字节为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 | 
| Polski | 0xBB | 0x55 | 
| Español | 0xAE | 0x10 | 
| Français | 0xFA | 0x20 | 
| Deutsch | 0xB1 | 0x60 | 
| 한국어 | 0xB5 | 0x60 | 
| Русский | 0xEE | 0x16 | 
| Português | 0xCD | 0x49 | 

4. data[7] 是Navicat产品ID。

|产品名 |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 | |

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

例如:

navicat15 :1111   f0

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

6. 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编码

编码之后你应该会得到一个16字节长的字符串,并且以"NAV"打头。


请求码

请求码数据例如:{"K":"NAVDGCLU799LPHHH", "DI":"9DACE501FEE3822FA7D5", "P":"WIN"}

K:序列号

DI:机器码

P:操作系统

请求码数据使用navicat的公钥加密


激活码

激活码数据例如:{"K":"NAVDGCLU799LPHHH", "DI":"9DACE501FEE3822FA7D5", "N":"popk", "O":"test", "T":1616371200}

K、DI值与请求码数据中的值对应,

N:注册名

O:组织

T:激活时间戳

激活码为私钥加密,激活时通过公钥验证。


分析记录

Serial

Navicat.Exe-->check_2175B90

某数据库管理软件离线注册分析第1张

Libcc

某数据库管理软件离线注册分析第2张

某数据库管理软件离线注册分析第3张

__int64 __fastcall sub_1818810F0   

 某数据库管理软件离线注册分析第4张

Request

 某数据库管理软件离线注册分析第5张

 某数据库管理软件离线注册分析第6张

验证激活码

sub_1818808E0

 某数据库管理软件离线注册分析第7张

 某数据库管理软件离线注册分析第8张

启动时验证

00000000029B84FB

 某数据库管理软件离线注册分析第9张

.text:00000000029B83A0 start

 某数据库管理软件离线注册分析第10张

 某数据库管理软件离线注册分析第11张

Libcc

.text:00000001806AA220 public: bool CCNavicat::setupContext(bool)

Libcc

.text:0000000181884670 CSRegistrationCenter_ICSRegistrationCenter_181884670

 某数据库管理软件离线注册分析第12张

解密公钥:

 某数据库管理软件离线注册分析第13张

CSRegistrationCenter_ICSRegistrationCenter_181884670-->sub_181884E60验证

 某数据库管理软件离线注册分析第14张

Libcc rva 14C5020

 某数据库管理软件离线注册分析第15张

读注册表,调用AES_CBC解密

 某数据库管理软件离线注册分析第16张

 某数据库管理软件离线注册分析第17张

公钥解密激活码

 某数据库管理软件离线注册分析第18张

验证激活码

sub_1818808E0

验证序列号

sub_1818852F0àsub_1818852F0-->serial_check_18187F510


免责声明:文章转载自《某数据库管理软件离线注册分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇我用Bash编写了一个扫雷游戏php 随机生成汉字下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iframe用法总结

<p><iframe>是框架的一种形式,也比较常用到。 </p><div class="blogstory"><p><span style="font-size:18px;"><span style="color:#0000ff;"><span style="font...

【Excle数据透视表】如何按照地区交替填充背景颜色

现存在如下数据透视表 需要根据地区填充不同的背景颜色 步骤 选定数值区域→开始→条件格式→新建规则,出现如下窗口: 公式:=MOD(COUNT(1/(MATCH($A$4:$A4,$A$4:$A4,)=ROW($1:1))),2) 公式解析: 上述公式使用了MATCH=ROW的方法统计不重复个数的原理。使用MATCH函数返回区域内每个数据第一次出现的...

Oracle 数据类型

一、Oracle数据类型 1.字符数据类型 CHAR 固定长度的字符串,可以存储字母数字值。长度可以是1到2000个字节。如果在定义时未指定大小,则默认占用一个字节。 如果用户输入的值小于指定的长度,数据库则用空格填充至固定长度。 VARCHAR2 用于存储可变长度的字符串或字母数字值。长度可以是1到4000个字节。定义该数据类型时,应指定大小。 与CHA...

python 字节码死磕

前言:    如果你跟我一样,对python的字节码感兴趣,想了解python的代码在内存中到底是怎么去运行的,那么你可以继续往下看,如果你是python新手,我建议你移步它处,本文适合有点基础的python读者。    如果你不知道怎么生成python的字节码文件,可以查阅我的 python 代码反汇编  的博文       python代码的执...

CUDA之初体验——数组求和

在高性能计算领域,GPU因为其架构的原因,在并行计算领域正发挥越来越多的用途,比如进行大量计算的游戏、绘图、图像算法等方面,采用GPU进行加速可以得到显著的性能提高。如今,Nvidia显卡在pc上的普及,cuda正是nvidia推出的通用并行计算架构。 下面在学习《深入浅出CUDA》的基础上初次体验下CUDA。 1.工程设置 这个就不多说了,新建一个空的W...

html5中调用摄像头拍照

方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象。调用摄像头的參数 PopPosition: JSON对象,弹出拍照或摄像界面指示位置 回调方法: CameraSuccessCallback: 调用摄像头操作成功回调 CameraErrorCallback: 摄像头操作...