好友
阅读权限20
听众
最后登录1970-1-1
|
大家好我是wasdzjh,好长时间没出教程了,有时间给大家写一篇分享技术大家一起进步。自己也是菜鸟,中途也借用AI才可以成功,AI发展真是越来越快了。
———————————————————废话不说了教程开始————-----————————————————————————————————————
准备工具:
查壳:peid0.95
破解:od,traeCN
———————————————————开始破解——————————————————————————————————————————————
第一步查壳:无壳
第二步破解:
拖入od查找字符串(当然就是软件提示的错误信息):请输入正确的注册码
查找字符串:请输入正确的注册码 操作(右键--中文搜索引擎--搜索ASCII)
双击请输入正确的注册码--往上看找到段首下段F2双击下断点,之后点击注册的时候程序会断下来,然后慢慢分析过程位置是在0041c910
断下来之后程序会先判断注册名随便写就好好像会跟内置的名字做比较,不用管,一直往下走来到一个je跳转,这个跳转跳到失败的位置,如果想成功就不让他跳转改成jne
然后一直走,就可以成功了 看图
————————————————————————————至此爆破就结束了,我也不怎么用这个软件,如果有暗桩记得提醒一下,好奇问一句注册跟没注册有区别吗————————————
其实我也是菜鸟一个至于算法分析也借助了AI,traeCN帮我整理了一个通用的注册机,多了解别人算法也算是增长知识了,高手飞过,菜鸟留步。至于为什么说是通用因为我发现
石子店铺账本,麦风店铺账本,家庭账本的注册页面都相同索性就想偷懒,一劳永逸。
我们找到算法部分位置0041c9fc(je上面最近的一个call) 跟进去看看,我将里面的代码扔给豆包跟traeCN分别给的回复是
豆包:这是 MFC42 老 MFC 程序(VC6 编译) 的一个函数,32 位,带 SEH 异常帧,核心逻辑:- 准备多段缓冲区
- 硬编码字符串:62639、278473669397057464181817422968261
- 调用内部函数做运算 / 拼接
- 最后用 _mbscmp 做字符串比对
- 比对结果决定返回 eax=1(成功) 或者 eax=0(失败)
重点:00406218 call _mbscmp 就是关键校验点test eax,eax → jnz 004062BA- _mbscmp返回0:两个字符串相等 → 不走 jnz,eax=1(验证通过)
- _mbscmp非0:字符串不等 → 跳转到 004062BA,eax=0(验证失败)
traeCN:
这是一个 定长 1344 位大整数类的"有符号运算"成员函数 :`输出大数 = 这个大数 OP 一个 32 位小整数` 。从内部结构(试减 + 借位传播 + 异号边界符号翻转)判断,OP 极大概率是"除以小整数"(整除/取模),而不是乘法 ——它属于 RSA 大整数库的底层原语之一。
由此我们可以肯定是关于rsa算法的。
那么怎么计算呢?豆包给了回复如下:
RSA 完整参数详解(结合你这个软件场景:RSA 验签)
RSA 一共 5 个核心参数:p、q、n、φ(n)、e、d
其中:p,q,d 是私钥(开发者保密);n,e 是公钥(写在软件里面,任何人能看到) 1. p 和 q (两个不相等的大质数,私钥核心)- 生成 RSA 的时候,随机挑选两个素数 p、q
- 要求:p ≠ q,都是质数
- 你现在的场景:n = p × q
n = 278473669397057464181817422968261你的任务就是用 Pollard Rho 分解 n,找回 p 和 q。 2. n = p × q 模数(公钥一部分,软件硬编码)- n 是 p 和 q 的乘积
- 作用:所有加减乘运算都在 mod n 下进行,把大数限制在 [0, n-1]
- 软件里面写死这个 n,就是公钥模数
3. φ(n) 欧拉函数(只用于计算私钥 d,不会写进软件)
\(\varphi(n)=(p-1)\times(q-1)\)- 原理:小于 n 并且和 n 互质的整数数量
- 只有拿到 p,q 才能算出 φ(n);只知道 n 算不出,这就是 RSA 的安全根基
- 你算出 φ(n),下一步求 d
4. e 公钥指数(公钥第二部分,软件硬编码)
你这个软件:e = 62639- e 是一个整数,要求满足两个条件:
- \(1 < e < \varphi(n)\)
- \(\gcd(e,\varphi(n)) = 1\),也就是 e 和 φ(n) 互质(最大公约数 = 1)
- 行业常用固定小 e:3,17,65537,你这个用的是 62639,属于比较少见的自定义 e。
公钥 = (n, e),软件内置这两个,用来验签 5. d 私钥指数(私钥核心,软件里面没有!)
d 是 e 在模 φ(n) 下的模逆元公式:
\(e\times d \equiv 1 \pmod{\varphi(n)}\)也就是:(e * d) mod φ(n) = 1Python 直接求:d = pow(e, -1, phi)
私钥 = (p, q, d),只有软件作者持有;你分解 n 拿到 p,q,就能算出 d,就等于拿到私钥,可以生成注册码。 RSA 两条核心公式(重点!对应你这个注册软件)
这个软件做的是 验签:用户输入注册码 serial
\(R = serial^e \pmod n\)软件算出 R,把 R 转为十进制字符串,和预期字符串比对,匹配则注册成功。
\(serial = R^d \pmod n\)给定 R,用私钥 d 还原出合法 serial(注册码)
一句话记忆:- 私钥 d:签名(作者生成序列号)
- 公钥 (n,e):验签(软件校验序列号)
你的完整操作流程- \(n=278473669397057464181817422968261\),用 Pollard Rho 分解,得到 p、q
- 计算 phi = (p-1)*(q-1)
- 计算私钥 d = pow(e, -1, phi),e=62639
- 取调试拿到的 \(R=70859849230829212094692536460802\)
- serial = pow(R, d, n),输出 serial,就是合法注册
现在 我们就来调试一下,看看需要的东西都有什么:
e=62639 n=278473669397057464181817422968261 将n分解p跟q还得用到traeCN p=4,294,967,279 q=64,837,203,943,005,281,317,259
φ(n) = (p-1)(q-1) = 278473669397057464114434263145524 算出d=231122609256908106599644667593567
将这些数据填入我用AI帮我生成的通用注册机里面看看:
可用预置方案:
1. 家庭帐本
0. 不用预置, 全部手工填写
选择预置编号 [1]: 0
模数 n (十进制, 可加0x) []: 278473669397057464181817422968261
公钥指数 e (注意程序用10进制还是16进制) []: 62639
私钥 d 的获取方式:
1. 自动分解 n 求 d (n 不太大时)
2. 已知 p, q
3. 已知 phi(n)
4. 已知 d, 直接填
选择 [1]: 4
私钥 d []: 231122609256908106599644667593567 d = 231122609256908106599644667593567
机器码 T 来源:
1. 直接填机器码 (注册窗口显示的数字)
2. 硬件值 + 变换 (默认: 卷序列号)
选择 [1]: 1
机器码 T (十进制, 可加0x) []: 1196830453
计算方向:
A. 注册码 = T^d mod n (程序校验: 注册码^e mod n == 机器码)
B. 注册码 = T^e mod n (程序校验: 机器码^e mod n == 注册码)
选择 [A]: A
输出分几段/各段长度 (如 6,6,6,5; 留空=不分组) []: 6,6,6,5
========================================================
机器码 T : 1196830453
私钥 d : 231122609256908106599644667593567
注册码 : 86219411597721037437752359090022
分段填写 : 862194 115977 210374 37752359090022
(十六进) : 0x4403DF1B3098D62722809517766
========================================================
最后验证一下是不是正确
小提示:使用脚本分解n的时候需要时间,实在不行的话就用traeCN来进行分解,省时间。
希望大家可以学到东西一起进步,有什么不懂的欢迎留言,我看到就会回复。
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|
|