reverse-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok609hecl1pq6qi
2026-10-20 02:17:15 +03:00
commit da24c2bd20
2227 changed files with 443931 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
# 授权验证分析决策树与证据分级
## 场景决策树(入口 → 分支)
### 1. 授权机制存在性判定(第一级)
```
样本有注册/激活流程(注册 UI / 授权文件 / 注册表项 / 序列号输入)
├─ 带壳 / 混淆 → 先 [[re-anti-analysis]] 脱壳 / [[re-deobfuscate]] 还原,再进主线
├─ 无任何授权特征 → 诚实报告"无授权机制",不臆造校验点
└─ 有授权特征 → 进入定位主线(第 2 节)
```
### 2. 定位主线(校验点发现)
```
字符串 / API 交叉引用
├─ 命中"invalid/register/license/trial/expired"类字符串 → xref → 候选校验函数
├─ 命中注册表 API(RegQueryValueExW)→ xref → 授权值读取点
├─ 命中机器码 API(GetVolumeInformationW 等)→ xref → 机器绑定分支(第 4 节)
├─ 命中时间 API(GetSystemTimeAsFileTime/time)→ xref → 时间型分支(第 5 节)
└─ 命中网络 API(InternetOpen*/WinHttp*/socket)→ 在线激活分支(第 6 节)
↓
候选校验函数全部列出 → 逐一定位:
├─ 成功/失败跳转结构(jz/jnz)→ 确认是真校验(否则伪校验/蜜罐,见坑 5)
├─ 注册标志全局变量 → xref 全部消费点 → 全量校验点清单
└─ 动态断点确认分支方向与返回值(A 级证据)
```
### 3. 算法类型分支(可逆性判定)
```
校验函数内部结构
├─ 对比型(strcmp/逐字节)→ 可逆 → 还原派生计算 → [[re-keygen]] 路线
├─ 解密型(XOR/base64/自实现)→ 可逆(对称)→ 逆映射 → [[re-keygen]] 路线
├─ 签名验证型(RSA/ECC verify)→ 不可逆 → [[re-patching]] 路线(诚实报告)
├─ 哈希型(SHA/MD5 比较)→ 不可逆 → [[re-patching]] 路线
└─ 混合型(可逆段 + 不可逆段)→ 分段标注,可逆段还原、不可逆段转补丁
```
### 4. 机器绑定分支
```
校验函数读机器码(卷序列号 / MachineGuid / /etc/machine-id / 主机名)
├─ 确认绑定 → 报告注明"绑定机器码";keygen 生成逻辑必须参数化输入
├─ 机器码参与运算但可换 → 虚拟环境/注册表值替换可绕过(环境侧验证)
└─ 只读不参与校验(误报)→ 对照反编译确认数据流,别凭 API 存在下结论
```
### 5. 时间型分支(有效期 / 订阅 / 试用)
```
到期提示 / 时间 API 引用
├─ 到期时间存储位置(注册表/文件)→ 定位比较逻辑
├─ 时钟回拨检测(当前时间 < 上次记录)→ 先定位检测点再谈改时间
├─ 宽限期(许可过期仍可用 N 天)→ 回退逻辑独立校验点,纳入清单
└─ 与序列号校验并存 → 两个独立校验点都要进全量清单
```
### 6. 在线激活分支
```
网络 API + 激活流程
├─ 断网测试:失败/超时 → 确认在线依赖
├─ 本地只验响应格式(伪校验)→ 真验证在服务器 → [[re-protocol]] 抓包分析
├─ 有离线回退(宽限/离线激活码)→ 本地回退路径独立还原
└─ 服务器验证无法绕过 → 如实报告,转协议分析或终止
```
### 7. 处置路线汇聚
```
全量校验点清单(含证据级别)
├─ 全部可逆 → [[re-keygen]](生成器 + 沙箱全校验点验证)
├─ 部分可逆 → keygen 覆盖可逆段 + [[re-patching]] 覆盖不可逆段
├─ 全部不可逆 → [[re-patching]](跳转/分支修改)
└─ 在线主导 → [[re-protocol]] 协议层分析
```
## 证据分级表
| 级别 | 证据形态 | 示例 | 用途 |
|---|---|---|---|
| A 强 | 动态确认 | 断点命中校验函数、分支方向与静态推断一致、注册标志实际翻转 | 可下"该校验点成立"结论 |
| B 中 | 静态链完整 | xref 链 + 数据结构还原完整,无动态验证 | 标注"静态推断,待动态确认" |
| C 弱 | 静态特征 | 仅字符串/API 存在,调用关系未闭合 | 只作候选,不下结论 |
| 反证 | 伪校验 | 分支改动不影响行为、蜜罐路径 | 记录并排除,防误导 |
- 每个校验点独立分级:全量清单里 A/B/C 并存是常态,交付下游时标注清楚
- "程序已注册"的动态结论必须含注册标志/行为证据,不能只凭静态改判
## 实现教训(内化)
- 字符串 xref 只定位候选,动态断点才定性:候选函数必须验证"改分支真的改变行为"(伪校验反例)
- 注册标志是全局索引:xref 标志变量比逐个搜字符串更全地覆盖功能校验点
- 授权模型先于算法:节点锁定 / 订阅 / 功能开关 / 浮动授权决定处置路线,模型判错全链白做
- 在线与离线分开取证:断网测试是最快的模型区分手段,先区分再深入
- 时间型校验常被漏:序列号校验之外独立存在——查时间 API 引用与到期存储位置
- 每个结论带证据级别入档([[re-analyze/analysis-contract]]),下游(patch/keygen)按级别决定可信度
## 使用注意
- 动态环节全部在沙箱内([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);带壳/混淆样本先还原再定位
- 本技能只做授权机制分析方法与结构描述,不涉及具体软件破解流程;产物交付限授权范围(自有软件/测试/研究)

View File

@@ -0,0 +1,40 @@
# 授权验证分析方法论坑与边界
## 定位误导组(最容易白忙)
- **字符串 xref 不是结论**:命中"Invalid serial"的引用函数可能只是 UI 展示(弹窗封装),真校验在别处——每个候选都要动态断点确认"改分支是否改变行为",否则可能对着蜜罐/包装函数分析半天
- **伪校验与蜜罐**:程序可故意提供"看起来像校验"的分支(改了就退出/无效果)把分析引偏——伪校验特征:改动后程序行为无任何变化;真校验特征:注册标志翻转、功能解锁
- **同一字符串多处引用**:错误提示字符串常被多个校验点共用(封装函数)——逐个 xref 调用者,别只取第一个
- **Wine 环境差异**:Wine 下 RegQueryValueExW 行为与原生 Windows 有差异(注册表位置/返回值)——Wine 结论标注环境,必要时原生 Windows 复核
## 授权模型边界组
- **在线激活的"伪校验"陷阱**:本地分支全改完程序仍锁死——真验证在服务器端;断网测试是第一道区分手段,本地"激活成功"响应可能只是缓存/离线回退(宽限期),到期后照样失效
- **订阅型当永久型处理**:到期时间校验独立于序列号校验——只改序列号分支不解决过期;时间 API xref 与到期存储位置必须进清单
- **功能开关型校验点分散**:freemium 的校验点散在各功能入口,启动校验只是其中之一——注册标志 xref 全覆盖,否则"绕过启动、功能仍锁"
- **浮动授权无本地算法**:许可证服务器分发的授权,本地只有协议客户端——本地算法再完整也还原不出"服务器签发"的授权,转 [[re-protocol]]
- **宽限期反例**:授权文件里的到期日期已过但程序仍可用 N 天(宽限逻辑)——宽限期是独立校验点(回退分支),改到期时间不一定立即生效,需同时处理回退逻辑
## 机器绑定与指纹组
- **指纹源多样性**:卷序列号 / MachineGuid / 主机名 / 用户名 / 网卡 MAC / SMBIOS UUID 都可能参与——只查一个来源会漏(对照 [[re-crypto-keys]] 思路枚举读取点)
- **机器码"参与"不等于"绑定"**:API 存在不代表值进了校验运算——对照反编译数据流确认;只读不用的机器码 API 是常见误报源
- **绑定判断要动态确认**:换机器码/改注册表值重跑程序,看序列号是否失效——行为验证比静态推断可靠
- **虚拟化环境指纹差异**:VM 里的卷序列号/网卡特征与物理机不同——沙箱内验证绑定行为时,环境指纹变化可能干扰"绑定是否生效"的判断,先记录环境指纹基线
## 时间型校验组
- **时钟回拨检测**:程序记录上次运行时间并检测"当前时间 < 记录"——直接改系统时间会触发防回拨报错;先定位检测点(上次时间存储 + 比较逻辑)再动时间
- **时间源不只墙钟**:`GetSystemTimeAsFileTime`/`time()` 是墙钟;`GetTickCount64`/QPC 是开机计时——有的程序用双源交叉校验(墙钟 + 开机计时),只改系统时间会露馅
- **到期时间存储多种形态**:注册表 / 授权文件 / 隐藏文件 / 校验和保护的存储——ProcMon/strace 看授权相关读写定位存储点
## 工具与环境组
- **ProcMon 过滤授权路径**:ProcMon 全量记录量大,先按进程 + 注册表路径(授权相关 key)过滤再分析,别在全量事件里捞
- **调试器修改时间/返回值要记录**:动态验证里改过的时间与返回值是"环境干预",报告要注明——干预前后行为对比才有说服力
- **无符号调试的局限**:PDB/符号缺失时注册标志与结构靠人工识别——用公开符号版本对照 + 行为验证双保险(见 [[re-kernel]] 同类思路)
## 使用注意
- 全部动态验证在沙箱内([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);授权绕过类操作只用于授权范围(自有软件/测试/研究),不提供具体软件破解流程
- 结论按 [[decision-tree]] 证据分级入档([[re-analyze/analysis-contract]]):动态确认 A / 静态推断 B / 候选 C 分开标注,交付下游时级别透明