reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# 注册机还原决策树与证据分级
|
||||
|
||||
## 场景决策树(入口 → 分支)
|
||||
|
||||
### 1. 前置判定(第一级)
|
||||
|
||||
```
|
||||
拿到校验算法(来自 re-license 校验点清单)
|
||||
├─ 全校验点是否都在本地?
|
||||
│ ├─ 否(有服务器侧验证/激活次数记录)→ 先处理在线/服务端部分,或如实报告(走 [[re-license]] 步骤 4)
|
||||
│ └─ 是 → 继续
|
||||
├─ 算法含单向部分(哈希/RSA/ECC 验签)?
|
||||
│ ├─ 是 → 不可逆段转 [[re-patching]],只对可逆段建模
|
||||
│ └─ 否 → 进入分类(第 2 节)
|
||||
└─ 输入来源清楚(用户名/机器码/常量)? 否 → 回 [[re-license]] 补输入溯源
|
||||
```
|
||||
|
||||
### 2. 算法分类树(可逆判定 + 生成策略)
|
||||
|
||||
```
|
||||
校验方式
|
||||
├─ 等值比较(serial == f(name))→ 直接 serial = f(name)(比较反转为生成)
|
||||
├─ 变换型
|
||||
│ ├─ XOR/位运算 → 对称直接逆
|
||||
│ ├─ 模运算 → 模逆 pow(a,-1,m)(gcd(a,m)≠1 时退化为穷举候选)
|
||||
│ ├─ LCG/线性递推 → state = a^{-1}(state'-c) mod m
|
||||
│ └─ 移位/混合 → 按位逆推,注意进位与掩码(32/64 位)
|
||||
├─ 查表型
|
||||
│ ├─ 表为双射 → 逆映射表
|
||||
│ └─ 表非双射 → 列全部候选(约束筛选)
|
||||
├─ 校验位型
|
||||
│ ├─ Luhn/mod 97/mod 11 → 先数据位后校验位
|
||||
│ └─ CRC16/32 → GF(2) 线性,可反解"补位使 CRC 匹配"
|
||||
├─ 加解密型(对称) → 解密器逆用为生成器([[re-crypto-id]] 识别 → [[re-crypto-decrypt]] 还原)
|
||||
└─ 单向型(哈希/签名)→ 不可逆 → 转 [[re-patching]]
|
||||
```
|
||||
|
||||
### 3. 实现策略分支(第二级)
|
||||
|
||||
```
|
||||
分类完成后
|
||||
├─ 变换步骤少且清晰 → 正推(逐行反转)
|
||||
├─ 比较链/多等式 → z3 约束求解(符号变量 + 长度/字符集/位宽约束)
|
||||
├─ 步骤多但机械 → 正推为主,逐行对照反编译(注释对照法)
|
||||
└─ 生成-校验自检 → 生成器内置校验逻辑,输出必须回验通过
|
||||
```
|
||||
|
||||
### 4. 验证分支(收尾)
|
||||
|
||||
```
|
||||
生成器输出
|
||||
├─ 沙箱内跑目标程序全校验点 → 通过 → 完成,结论入 [[re-analyze/analysis-contract]]
|
||||
├─ 被拒
|
||||
│ ├─ 规范化差异(大小写/分隔符/补零)→ 修正规范化后重试
|
||||
│ ├─ 校验位顺序/基数错 → 用已知合法序列号逐位回推
|
||||
│ ├─ 溢出/字节序错 → 调试器断比较点对中间值
|
||||
│ └─ 非格式问题仍拒 → 查第二校验点(多校验点漏判)
|
||||
└─ 多组输入回归(不同用户名/机器码)→ 全部通过才算完成
|
||||
```
|
||||
|
||||
## 证据分级表
|
||||
|
||||
| 级别 | 证据形态 | 示例 | 用途 |
|
||||
|---|---|---|---|
|
||||
| A 强 | 生成-程序全链路闭合 | 生成的序列号在沙箱程序全部校验点通过,且已知合法序列号回推一致 | 可下"还原正确"结论 |
|
||||
| B 中 | 生成-自检闭合 | 脚本自检函数通过但未在真实程序验证(程序环境缺失) | 标注"待程序侧验证" |
|
||||
| C 弱 | 局部还原 | 只还原了部分变换,仍有约束未满足 | 不发布为可用生成器 |
|
||||
| 反证 | 差异定位 | 中间值对照发现某步不符 | 记录差异点,修正后重验 |
|
||||
|
||||
- 结论必须标注验证环境(沙箱程序版本、校验点覆盖范围);只过了启动校验 ≠ 全校验点通过
|
||||
|
||||
## 实现教训(内化)
|
||||
|
||||
- 先格式后算法:序列号格式约束(长度/字符集/校验位位置)先列全,生成器输出框架先行,算法结果往框架里填
|
||||
- 分类决定工具:等值比较不用 z3、单向型别硬塞约束——先分类再选实现策略,减少无用功
|
||||
- 逐行注释对照是最稳的还原方式:"凭感觉重写"是错位的第一来源
|
||||
- 已知合法序列号是黄金测试向量:程序里断校验函数记录中间值,与脚本中间值逐位比对,一次定位错位
|
||||
- 多校验点意识:启动通过后必须按 [[re-license]] 全量清单逐点验证(功能点/激活次数/有效期)
|
||||
- 溢出与字节序是隐蔽差异源:32 位乘法/移位、大端小端、无符号/有符号——每步变换明确语义再写代码
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 全部验证在沙箱内([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);生成器只用于授权范围(自有软件/测试/研究)
|
||||
- 不可逆部分如实报告,不伪造"还原成功";本技能只描述算法结构与方法,不涉及具体软件破解流程
|
||||
@@ -0,0 +1,36 @@
|
||||
# 注册机还原方法论坑与边界
|
||||
|
||||
## 可逆性边界组
|
||||
|
||||
- **单向函数没有生成器**:哈希、RSA/ECC 验签、KDF 类校验不可逆——正推生成不可能;z3 对这类段无解(约束不可满足不是模型写错);诚实报告并转 [[re-patching]] 是正确路径,别伪造"还原成功"
|
||||
- **"可逆"指算法结构可逆,不是每步可逆**:混合算法常是"可逆段 + 单向段"组合——可逆段生成、单向段跳过(如校验位只算一边);逐段标注可逆性
|
||||
- **服务器端生成是硬边界**:序列号由服务端下发(本地只验响应/签名)时,本地算法再完整也造不出合法序列号——生成逻辑在另一端,先确认归属再动手(反例:把响应校验当生成算法,白忙一场)
|
||||
- **二次验证是隐藏边界**:程序可能对序列号还有联网核对/激活次数/有效期校验——本地可逆 ≠ 完整可用,全链路验证前不下结论
|
||||
|
||||
## 数论与位运算陷阱组
|
||||
|
||||
- **模逆存在条件**:`pow(a, -1, m)` 只在 gcd(a,m)=1 时有解——不互素时退化为穷举候选或换约束表述
|
||||
- **32 位溢出是默认语义**:反编译里的 32 位乘法/加法在 C 里按无符号溢出——python 实现必须 `& 0xFFFFFFFF`(或 0xFFFFFFFFFFFFFFFF),漏掩码是"差一位/偶对偶错"的高发原因
|
||||
- **字节序与宽度**:小端/大端、BYTE/WORD/DWORD/QWORD 混用(序列号分段处理常见)——struct 解包时逐段核对宽度
|
||||
- **有符号陷阱**:比较用有符号(jge/jg)而生成用无符号会错——看反编译跳转指令(jg/jge vs ja/jae)判断有符号性
|
||||
- **进位与截断**:中间进位被丢弃(8 位运算在 32 位寄存器)——逐行对照时注意每条指令的操作数宽度
|
||||
- **CRC 线性可构造**:CRC16/32 是 GF(2) 线性映射——可反解"追加 N 字节使 CRC 等于目标值",不必暴力枚举;但 CRC 参与位置(数据前/后)决定解算方向
|
||||
|
||||
## 格式与规范化组
|
||||
|
||||
- **程序先规范化再比对**:tolower/去空格/去分隔符/补零/截断到固定长度——生成器必须先做同样的规范化,否则算法对但输出被拒(对照 [[re-license]] 步骤 3 的比对代码逐字确认)
|
||||
- **字符集含混**:易混字符(0-O、1-I)常被排除;字符集判断错会让生成的序列号"看起来合法但程序不认"
|
||||
- **分隔符多样性**:程序可能同时接受带/不带分隔符、不同分隔符(- / 空格)——格式约束先列全,输出按需切换
|
||||
- **校验位顺序反例**:校验位可能参与下一轮计算(滚动校验),不是简单"数据位 + 尾部校验"——用已知合法序列号逐位回推校验过程确认顺序
|
||||
|
||||
## 验证方法组
|
||||
|
||||
- **调试器中间值对照是定位利器**:断在比较指令处,记录程序内部中间值(寄存器/栈),与脚本中间值逐位比对——一次对照定位一步错位,比反复试错快
|
||||
- **已知合法序列号是测试向量**:程序已知合法的序列号回喂生成器脚本——输出不一致说明还原有误;一致才能进入沙箱全链路验证
|
||||
- **启动通过 ≠ 完成**:功能点/定时器/升级检查等第二校验点可能后续触发——按 [[re-license]] 全量校验点清单逐点验证
|
||||
- **验证环境要记录**:沙箱程序版本、校验点覆盖范围、操作系统差异(Wine vs 原生 Windows 行为可不同)——结论随环境标注
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 生成与验证全部在沙箱内([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);产物只用于授权范围(自有软件/测试/研究),不提供具体软件破解流程
|
||||
- 分析结论按 [[decision-tree]] 证据分级标注(A 全链路闭合 / B 自检闭合 / C 局部)
|
||||
Reference in New Issue
Block a user