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

序列号 

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

Libcc

__int64 __fastcall sub_1818810F0   

 

Request

 

 

验证激活码

sub_1818808E0

 

 

 

 

 

 

启动时验证

00000000029B84FB

 

.text:00000000029B83A0 start

 

 

Libcc

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

Libcc

.text:0000000181884670 CSRegistrationCenter_ICSRegistrationCenter_181884670

 

解密公钥:

 

CSRegistrationCenter_ICSRegistrationCenter_181884670-->sub_181884E60验证

 

 

Libcc rva 14C5020

 

读注册表,调用AES_CBC解密

 

 

 

公钥解密激活码

 

 

验证激活码

sub_1818808E0

验证序列号

sub_1818852F0àsub_1818852F0-->serial_check_18187F510


 

posted @ 2021-04-18 19:41  DirWangK  阅读(96)  评论(0编辑  收藏  举报