首页
社区
课程
招聘
[分享] 010 注册机的实现
发表于: 7小时前 142

[分享] 010 注册机的实现

7小时前
142

先看版本号:

如果已经注册了可以删除这里的注册表进行测试,整个010注册表全删就行:

计算机\HKEY_CURRENT_USER\Software\SweetScape\010 Editor

可以看到未注册的说明:

随便输入一下,可以看到报错字符串(Qt窗口用的控件直接复制):

交叉引用找到位置直接 F5 可以查看前后逻辑:

显然这一块是注册成功的提示窗:

再往上翻

v21 = sub_1400088A5(g_c1, 17, 20300); //g_c1为某全局类当一块内存区域就行

进入到 sub_1400088A5 函数可以发现需要一个函数的返回值为 0x2D,暂且命名为 verifyLicense:

 这个函数需要重点分析一下:

前面是一段判断用户名是否在黑名单的逻辑,我们自己生成的用户名撞车概率接近于 0 ,直接跳过:

code_buf 进入 parseLicenseKey 函数可以发现是将序列号两两转成十六进制的 unsigned char

然后可以发现是利用这个 code_buf 计算结果,判断结果:

我们发现走到 0xFC 分支一定无法返回 0x2D,所以跳过该分支

0x9C 分支计算的值跟 code_buf[4] 没关系,所以直接计算就行,过于简单跳过

主要看 0xAC 分支

首先看一下相关函数,:

其中 Mod17 这个函数的第二个参数直接 用 5999655 常量替换就行

假设原注册码为 X0X1-X2X3-X4X5-X6X7-X8X9

其中 Xi, i = 0, ..., 9 为 unsigned char

X3 = 0xAC

slat1 = decryptAndValidateValue_Mod17((X6 ^ X0) + ((X8 ^ X4) << 8) + ((X5 ^ X9) << 16);

需要保证 slat1 >= 20300

slat2 = decryptAndValidateValue_Mod11((X5 ^ X2) + ((X7 ^ X1) << 8));

需要保证 1 <= slat2 <= 5000

需要保证 X7X6X5X4 == calcCustomAvalancheHash(m_name.toUtf8().data(), true, slat1, slat2);

注意到:

X5 ^ X2 = 3B

X7 ^ X1 = A9

X6 ^ X0 = 81

X8 ^ X4 = D9

X5 ^ X9 = 95

时满足所有条件,此时 slat1 = 0xC22E,slat2 = 0x3E8,此时可以实现注册机了

可以直接复制 calcCustomAvalancheHash 的汇编,注意全局变量需要替换为自己的指针

通过 calcCustomAvalancheHash 的结果初始化 X4 ~ X7

通过异或可以计算出剩余的

附件中包含注册机源码和exe


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回