授权验证逻辑分析(注册校验定位)
SkillDev tools授权验证逻辑分析:注册校验定位。触发词:注册码、授权验证、license、序列号校验、破解定位
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 授权验证逻辑分析(注册校验定位) skill
What this skill tells your AI
The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-license/SKILL.md and read by ahel’s review.
何时使用 / 何时不用
- 边界(继承 [[re-cracking]]):仅限自有软件 / 授权测试 / CTF·研究环境;禁止未授权软件解锁与商业软件绕过;断点观察返回值等动态步骤前,用户须说明目标归属(所有权 / 测试授权 / 研究环境)
- 用:程序有注册 / 激活流程(输入序列号、注册码、授权文件),需要定位"在哪校验、怎么校验"
- 用:破解前置——为 [[re-patching]] / [[re-keygen]] 提供校验点地址与校验算法
- 用:判断授权是在线激活还是离线校验;识别机器码绑定、有效期 / 订阅型授权
- 不用:目标已定位校验分支、只改字节绕过(直接 [[re-patching]])
- 不用:确认无授权机制(无注册 UI / 注册表 / 授权文件读取——诚实告诉用户,见坑 5)
- 不用:只做协议层分析(在线激活的流量分析走 [[re-protocol]])
- 注意:样本带壳先脱壳([[re-anti-analysis]]);校验函数被混淆先 [[re-deobfuscate]](见坑 1);动态环节沙箱执行([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则)
工具准备
调试器(按 OS)
- Linux / Wine 下调试 PE: [[re-gdb]] ——
apt install gdb/dnf install gdb/pacman -S gdb,验证gdb --version;Wine 直读:wine sample.exe运行后gdb -p <pid>attach([[re-analyze/platform-tips]] Linux 分支) - Windows: [[re-x64dbg]] —— 官方 release zip,attach 需管理员权限([[re-analyze/platform-tips]] Windows 分支);验证:载入样本能单步
- macOS: [[re-lldb]] ——
brew install lldb,验证lldb --version;attach 前检查 Developer Tools 授权([[re-analyze/platform-tips]] macOS 分支) - WSL: 无法 attach Windows 进程——跨边界分析走 Windows 侧工具,WSL 内只做静态([[re-analyze/platform-tips]] WSL 分支)
反编译器([[re-ghidra]] 等,交叉引用工作台)
- Ghidra:
apt install ghidra/dnf install ghidra/pacman -S ghidra/brew install --cask ghidra,验证analyzeHeadless -help(安装细节见 [[re-ghidra]]) - 替代: [[re-ida]](
idat64 -Aheadless)、[[re-radare2]](apt install rizin,验证rizin -v) - 作用:strings / API 的交叉引用(xref)是"谁在调用注册相关函数"的关键
strings —— 可打印串快速扫描(全平台)
- Linux:
apt install binutils/dnf install binutils/pacman -S binutils(多数自带) - macOS: 系统自带 /usr/bin/strings
- Windows/WSL: WSL 内 Linux 版;Windows 本机用 Sysinternals
strings.exe - 验证:
strings --version
动态补充(可选):strace / ltrace / ProcMon
- Linux:
apt install strace ltrace,验证strace --version;观察注册表(Wine 下)/ 文件 / API 调用(详见 [[re-tracing]]) - Windows: Sysinternals Process Monitor(官网下载独立 exe,无包管理器)——注册表 / 文件 / 进程 / 网络全量 trace([[re-behavior]] 衔接);注册表操作是授权读取的主路径
操作步骤
按顺序执行,每步记录结果(校验点地址 + 证据路径,见 [[re-triage]])。产物:全部校验点清单 + 校验算法,交给 [[re-patching]] / [[re-keygen]]。
-
字符串 / API 交叉引用定位校验函数:
strings -n 5 sample.exe | grep -iE 'register|serial|license|invalid|activation|trial|key' | head -50 strings -el sample.exe | grep -iE 'register|serial|license' | head -20 # UTF-16LE(Windows 常见)- 反编译器里对命中字符串查 xref(Ghidra 右键 Find References / IDA
x/ rizinaxt @ str.*)——看它被哪个函数引用:弹窗/输入框附近的引用函数就是候选校验函数(MessageBox 类"Invalid registration code"、注册对话框、注册表读取RegOpenKeyExW/RegQueryValueExW、GetVolumeInformationW机器码读取) - API 侧:导入表搜
MessageBox/Reg*/GetVolumeInformation/GetSystemTimeAsFileTime,反编译引用函数;Linux 目标用 ltrace 观察strcmp/ 文件读取调用([[re-tracing]]) - 记下每个候选函数的地址与文件名(可能多个校验函数,见坑 3)
- 反编译器里对命中字符串查 xref(Ghidra 右键 Find References / IDA
-
调用图与校验分支(成功 / 失败跳转):
- 反编译校验函数,确认结构:读输入(序列号字符串 / 注册表值)→ 计算 / 比较 → 按结果跳转(
jz/jnz到成功或失败处理)。失败路径特征:MessageBox 报错、置注册标志为假、调用ExitProcess - 找注册标志:全局变量(0/1)在成功路径置 1,功能代码检查它;xref 该标志可找出所有消费它的功能校验点(不只启动校验,见坑 3)
- 动态确认(沙箱内,[[re-analyze/platform-tips]] 最高原则):调试器断在校验函数返回处看返回值与跳转方向——[[re-gdb]]:
break <addr>后si跟跳转;[[re-x64dbg]]:bp <addr>后看标志位 - 产物:每个校验点的 地址 / 调用方 / 成功-失败分支地址 / 注册标志
- 反编译校验函数,确认结构:读输入(序列号字符串 / 注册表值)→ 计算 / 比较 → 按结果跳转(
-
算法还原(对比 / 解密 / 签名验证):
- 对比型:
strcmp/ 逐字节比较 → 序列号与固定值或动态派生值比较,还原派生计算(可能是 [[re-crypto-id]] 的 XOR / 查表 / 简单变换) - 解密型:序列号先解密(XOR / base64 / 自实现)再比对 → 还原解密为生成步骤(XOR 对称可直接逆;查表求逆映射)
- 签名验证型:
RSA_verify/ECC验签 → 算法不可逆,正推生成不可能 → 报告给网关转 [[re-patching]](见坑 4) - 用 [[re-crypto-id]] / [[re-crypto-decrypt]] 思路还原加解密环节;反编译伪代码转成独立脚本验证一遍(对已知合法序列号,程序行为与脚本结果一致)
- 对比型:
-
在线激活 vs 离线校验区分:
- 特征:导入表含网络 API(WinINet
InternetOpen*/WinHttp*/socket)、激活流程有"输入序列号 → 联网 → 返回激活码"、字符串含服务器 URL / "activation failed" - 在线激活:本地只校验响应格式(伪校验),真实验证在服务器 → 转 [[re-protocol]]([[re-netcap]] 沙箱抓包 + [[re-crypto-id]] [[re-crypto-keys]] [[re-crypto-decrypt]] 处理加密);本地侧只处理响应校验与离线回退逻辑
- 离线校验:算法完全在本地,正常走步骤 3 还原
- 区分方法:断网运行(沙箱断网)看激活是否失败/超时([[re-sandbox]] 网络隔离)
- 特征:导入表含网络 API(WinINet
-
机器码绑定识别:
- 搜索导入/调用:
GetVolumeInformationW(卷序列号)、GetComputerNameW、GetUserProfileDirectoryW、Windows 注册表MachineGuid、Linux/etc/machine-id读取 - 确认序列号生成 / 校验输入含机器码:反编译看校验函数是否先读机器码再参与运算
- 绑定确认后:注册机生成逻辑必须含输入(用户名 / 机器码参数化,见 [[re-keygen]] 坑 2);报告里注明"此授权绑定机器码"
- 搜索导入/调用:
-
授权模型识别(处置路线决定):
- 节点锁定(机器绑定):序列号 = f(机器码) → 可逆则 [[re-keygen]] 路线
- 有效期 / 订阅型:校验到期时间 → 时间型校验分支(步骤 7);到期提示字符串("expired"/"trial")xref 定位
- 功能开关型(freemium):校验点散在各功能入口,注册标志多个 → 全量清单必须完整(坑 3)
- 浮动授权(许可证服务器):本地无完整校验 → 转 [[re-protocol]] 分析许可证协议
- 模型判定依据:授权文件 / 注册表项内容(含到期日期字段 = 订阅型;含机器码哈希 = 节点锁定)
-
时间型校验(有效期):
- 时间读取 API:Windows
GetSystemTimeAsFileTime/GetLocalTime,Linuxtime()/gettimeofday——xref 到比较逻辑(> 到期时间) - 反篡改:程序可能记录"上次运行时间"并检测时钟回拨(当前时间 < 上次记录 → 报错)——改动系统时间前先定位该检测点
- 产物:到期时间存储位置(注册表 / 文件)、比较函数地址——补丁或绕过目标
- 时间读取 API:Windows
-
证据核对(收尾):
- 全量校验点清单(地址 / 分支 / 标志 / 证据级别)入档 [[re-analyze/analysis-contract]];结论按证据分级标注(动态确认 vs 静态推断,见 [[decision-tree]])
- 交付:校验点清单 + 算法文档 → [[re-cracking]] 网关统一验证
跨域联合
- [[re-cracking]]:本网关是 re-cracking 工作流第 2 步(授权定位),产物(校验点清单 + 算法)供第 4 / 5 步
- [[re-patching]]:下游——拿到校验点地址后改分支 / 跳过校验
- [[re-keygen]]:下游——拿到校验算法后逆推生成逻辑
- [[re-anti-analysis]]:带壳样本先脱壳(OEP 后再分析);校验函数被混淆先 [[re-deobfuscate]]
- [[re-protocol]]:在线激活 → 抓包分析激活协议(netcap → crypto-id → crypto-keys → crypto-decrypt → proto-rev)
- [[re-binary-core]]:反编译工作台([[re-ghidra]] / [[re-ida]] / [[re-radare2]])
- 动态:[[re-gdb]] / [[re-x64dbg]] / [[re-lldb]](断点看分支返回值)、[[re-tracing]](strace / ltrace 看注册表 / 文件 / API 调用)、[[re-memdump]](内存中的注册标志 / 校验结果)
- [[re-behavior]]:Windows 侧 ProcMon 注册表 / 文件行为 trace 衔接
- [[re-sandbox]]:动态定位与验证沙箱([[re-analyze/platform-tips]] 最高原则)
- [[re-ioc]]:注册相关字符串 / 校验指纹可作 YARA 特征
常见坑与陷阱
- 校验函数被混淆 / 加密:现象——定位到的校验函数反编译全是花指令 / 平坦化 / 字符串密文,看不出比较逻辑;原因——授权校验是重点保护对象,常叠加混淆;对策——先 [[re-deobfuscate]](花指令清除 → 平坦化还原 → 字符串解密)再分析,不要硬啃密文
- 在线激活当离线破解:现象——本地判定分支全改完,程序依然拒绝使用 / 功能锁死;原因——真实验证在服务器端(本地只有响应校验);对策——步骤 4 先区分在线 / 离线(断网测试),在线转 [[re-protocol]] 抓包分析激活协议,本地侧只处理响应校验
- 校验可能多次(启动 + 功能点):现象——启动校验绕过成功,用核心功能时又弹注册;原因——校验点不止一个(启动、功能点、定时器、版本升级检查);对策——步骤 2 遍历校验函数全部 xref / 注册标志的全部消费点,做全量校验点清单(这是 [[re-cracking]] 网关坑 2 的根源)
- 算法不可逆还硬还原:现象——校验含 SHA / MD5 / RSA 验签,序列号生成逻辑无法正推;原因——单向函数;对策——诚实报告不可逆,转 [[re-patching]](跳过验签 / 改分支),不要伪造"还原成功"
- 伪校验误导:现象——改了判定分支程序照常退出 / 无效果;原因——改动点不是真正的授权判定(假分支 / 蜜罐校验,真判定在别处);对策——动态断点确认每个分支真实影响注册标志与程序行为,再进补丁阶段
- 时间型校验漏判:现象——改完所有序列号校验仍提示过期;原因——另有到期时间校验(订阅 / 试用)独立于序列号校验;对策——步骤 7 查时间 API xref 与到期存储位置,纳入全量清单
- 更多决策分支与边界(授权模型判定树 / 证据分级 / 时间篡改反例)见 [[decision-tree]] 与 [[gotchas]]
Signals
- GitHub stars
- 57
- Forks
- 8
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
re-license- Source
- github.com/dslsdzc/rev-skills