# 授权验证分析决策树与证据分级 ## 场景决策树(入口 → 分支) ### 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]] 最高原则);带壳/混淆样本先还原再定位 - 本技能只做授权机制分析方法与结构描述,不涉及具体软件破解流程;产物交付限授权范围(自有软件/测试/研究)