【名称】Navicat Premium
【版本】12.1.18 32位
【所用工具】X32dbg IDA vs2017 crypto++ Openssl wxWidgets Detoures
Navicat 的注册机网上有不少。但详细分析的文章很少。本着学习的精神,把注册流程走了一遍。此次是官网最新版本
试了很多断点,不好使。发现CE还是挺不错的。
找到地址后下硬件断点
断下后栈回溯 可发现是宽字符串转多字符
对调用栈大致浏览,发现如下四个相同的函数较为可疑
实际就是取4个编辑框值的函数
拼接完后会判断长度是否达到16位。
然后送入导入函数 libcc.dll #4789函数
跟入
继续跟入
继续进入
继续
进入后对key 第一次变换
替换完后进入的第一个函数。关键call 函数返回数据会进行对比,跟进重点分析
进入函数
接下来填充了一块内存区域 通过一个固定字符串 "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
缓冲区内填充的是索引值。就是个固定数组arry
算法
接着初始化0x3c区域 传入函数74dce70
对象结构初始化后
0$ ==> 0893DAF0 libcc.0893DAF0
1$+4 0893DBB4 libcc.0893DBB4
2$+8 00000000 i值
3$+C 00000000
4$+10 00000000
5$+14 00000000
6$+18 0014E384 指向arry首地址
7$+1C 00000000
8$+20 00000005
9$+24 00000005
10$+28 00000000 k
11$+2C 00000000
12$+30 00000000
13$+34 00000005
14$+38 0C5E4948 指向key计算结果区
接着送入计算。Key二次变换 16位KEY 变成10位
算法
以上函数会执行两次产生10个字节数据
转换完后buff 的前两字节必须是 0x68 0x2A
此验证通过后,取后8位
接下来开始验证后8位。跟进
拷贝了一块数据区,用途不知道
进入计算函数
跟入
来到加密核心函数 进入
进入来到此
进入加密核心后 有三个连续加密函数,大致浏览下像DES,(就是DES)
经过后面分析拷贝的常量数据就是DES 的加密密钥
第二计算中用到8组常量数据 每组64个
一共16轮计算
大致流程 倒序值1倒序值2-> 前置换->16轮加密->后置换->倒序值1 倒序值2
这个两个值拷贝到返回空间进行校验
解密DES
逆序密钥
然后进行校验
校验1
校验2
校验3
校验4
进入
索引了一块常量数组判断
也就是值1的最后一个要是0xCE 值2第一个要是0x32
校验5 与校验4差不多,判断是不是0x33
{常数 0x975c52c
0x00000089, 0x000000AC, 0x00000001, 0x0000009A,
0x000000AA, 0x00000002, 0x00000033, 0x000000CE,
0x00000003, 0x00000083, 0x000000AC, 0x00000004,
0x00000061, 0x000000B5, 0x00000005, 0x00000061,
0x000000B1, 0x00000006, 0x00000021, 0x000000FA,
0x00000007, 0x00000011, 0x000000AE, 0x00000008,
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-4-30 22:38
被jilvan编辑
,原因: