注册机算法还原(keygen)

SkillDev tools

注册机算法还原。触发词:注册机、keygen、算法还原、序列号生成

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the 注册机算法还原(keygen) skill

What this skill tells your AI

The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-keygen/SKILL.md and read by ahel’s review.

何时使用 / 何时不用

  • 边界(继承 [[re-cracking]]):仅限自有软件 / 授权测试 / CTF·研究环境;禁止未授权软件解锁与商业软件绕过;注册机产物不得扩散分发
  • 用:已从 [[re-license]] 拿到校验算法,且算法可逆(比较 / 变换 / 查表可逆向成生成步骤)
  • 用:需要为任意输入(用户名 / 机器码)生成合法序列号(分发、测试、验证场景)
  • 用:不修改目标文件的分发方案(比 [[re-patching]] 干净,不触发自校验 / 签名问题)
  • 不用:校验点 / 校验算法都还没定位(先 [[re-license]])
  • 不用:算法含不可逆部分(哈希 / 非对称验签)——正推生成不可能,改走 [[re-patching]](见坑 1)
  • 不用:序列号是服务器生成后下发的随机值(生成逻辑在服务器端,本地只有校验)
  • 不用:程序对序列号还有服务器侧二次验证(生成逻辑再可逆也无用,先确认全校验点清单)
  • 注意:生成的序列号必须在沙箱内验证([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);与合法序列号对照验证(见坑 4)

工具准备

反编译产物(算法还原的原料)

  • [[re-ghidra]] / [[re-ida]] / [[re-radare2]] 对校验函数的反编译伪代码(来自 [[re-license]] 步骤 3);导出函数级伪代码与比较链(pdf @ sym.check_license 等),作为逐行翻译的对照(见坑 4)
  • 验证: 反编译视图能完整展示校验函数的比较 / 变换语句

python3(注册机实现)

  • Linux: apt install python3(多数自带);macOS: brew install python;Windows: choco install python / 官方安装包
  • 验证: python3 --version
  • python 标准库足够(argparse/struct/hashlib/re);位宽运算注意掩码(& 0xFFFFFFFF 模拟 32 位无符号溢出)

z3-solver(可选,约束求解)

  • pip install z3-solver
  • 验证: python3 -c "import z3; print(z3.get_version_string())"
  • 适用:校验是"比较链 / 数学关系"(如序列号满足多个等式),直接逆推繁琐时建模求解(建模思路见 [[re-z3]])
  • 注意:z3 只对可逆部分建模;纯哈希 / 签名部分无解(见坑 1)

调试器(可选,中间值对照)

  • [[re-x64dbg]](Windows)/ [[re-gdb]](Linux / Wine)/ [[re-lldb]](macOS)——断在比较指令处看程序内部中间值,与脚本中间值逐一对照(坑 4 的方法)

操作步骤

按顺序执行,每步记录结果(算法伪代码 / 生成脚本 / 验证结果,证据路径见 [[re-triage]])。输入输出清单先行:输入(用户名 / 机器码 / 固定常量)、输出(序列号格式)、比对方式(逐位相等 / 校验位)。

  1. 从 [[re-license]] 拿到的校验算法

    • 取校验点清单中的算法伪代码:输入来源(读注册表 / 用户输入 / 机器码)、变换步骤(每次算术 / XOR / 查表)、最终比对方式(strcmp / 校验位 / 签名验证)
    • 列出"合法序列号必须满足"的每条约束(格式长度、字符集、校验位、与输入的关系),写进算法文档
  2. 序列号格式分析(先于算法)

    • 长度 / 字符集(数字 / 大写 / 混合)/ 分隔符(XXXX-XXXX-XXXX)/ 大小写敏感 / 校验位位置(尾部 / 固定位)
    • 例:ABCD-1234-EFGH-5678 可能是 4 组 × 4 字符 + 校验组——格式约束决定生成器的输出框架,先按格式生成候选再填算法结果,比算法做完再套格式少出错
    • 格式与算法耦合:分隔符是否参与校验(常见两类:只比数字 / 全串比对)要确认,参与与否改变生成器的分段逻辑
  3. 算法分类与可逆判定

    • 等值比较型serial == f(name)):直接 serial = f(name)——比较方向反转即可
    • 变换型(算术 / XOR / 移位):XOR 对称直接逆;模运算用模逆(pow(a, -1, m),需 gcd(a,m)=1);LCG 逆推(state = a^{-1}(state' - c) mod m
    • 查表型:把映射表求逆(输入→输出 变成 输出→输入);表非双射时列全部候选
    • 校验位型(Luhn / CRC16/32 / mod 97 / mod 11):先算数据位再补校验位;CRC 是 GF(2) 线性运算,可反解出"使 CRC 等于目标值"的后缀字节
    • 加解密型(XOR / base64 / 自定义对称变换):解密器逆用即生成器([[re-crypto-id]] / [[re-crypto-decrypt]] 思路)
    • 单向型(哈希 / RSA / ECC 验签):不可逆——该部分如实报告,转 [[re-patching]](见坑 1)
    • 每类结论写进算法文档:类型判定 + 逆推依据(哪一步可逆、哪一步不可逆)
    • 混合型常见:变换 + 校验位叠加(数据位过变换、整体加校验)——按"变换层 → 校验层"分层逆推,每层单独验证
  4. 逆推生成算法(正推 / 约束求解)

    • 正推:把校验方向反过来——比较式改成生成式(if (x == f(name)) okserial = f(name));XOR 对称可直接反转;查表求出逆映射表;模运算用模逆(pow(a, -1, m)
    • 约束求解:比较链 / 数学关系用 z3 建模,符号变量 + 约束(长度 / 字符集 / 位宽)后求解任意合法输入:
      from z3 import *
      s = Solver()
      c = BitVec('c', 32)                      # 序列号的 32 位部分
      s.add(c ^ 0xDEADBEEF == c * 3 + 0x55)    # 来自反编译的约束
      s.add(c & 0xFF == 0x5A)                  # 校验位约束
      print(s.check(), s.model() if s.check() == sat else '')
      
    • 位宽与字节序对齐反编译语义(无符号 / 有符号、小端 / 大端,见坑 4)
    • 约束不全时先补约束:长度 / 字符集 / 位宽每条都是解空间裁剪——z3 无解时逐条放宽定位矛盾约束(建模细节见 [[re-z3]])
  5. python 实现注册机

    • keygen.pyargparse 接输入(用户名 / 机器码),内部按逆推步骤生成序列号,按格式输出(含 / 不含分隔符)
    • 逐行对照反编译伪代码(每行变换对应一段实现,加注释),不要"凭感觉重写"
    • 单测内置:生成 → 用校验算法再算一遍必须通过(把校验逻辑也写进脚本做自检函数)
  6. 边界(校验码 / 校验位)处理

    • 常见校验位:Luhn(银行卡类)、CRC16 / CRC32、mod 97 / mod 11、长度位、分隔符格式(XXXX-XXXX-XXXX);先算数据位 → 补校验位
    • 字符集:大写 / 数字 / 去掉易混字符(0-O、1-I);输出长度与程序要求严格一致
    • 规范化:生成前先对输入做程序的预处理(去空格、toUpper、补零),保证和校验侧一致(见坑 3)
  7. 多平台输出(CLI 脚本)

    • 纯 python3 标准库(argparse 即可,避免平台差异);Linux / macOS / Windows 均可 python3 keygen.py --name Alice
    • 可选输出格式:带 / 不带分隔符、批量生成(多组测试用)
    • 脚本附带验证模式:--verify 输入序列号反向跑校验逻辑,通过才输出(自检闭环)

验证:沙箱内([[re-sandbox]])用生成的序列号跑目标程序——必须通过[[re-license]] 清单的全部校验点(启动 + 功能点);再用程序已知合法的序列号对照脚本输出(见坑 4)。结论与算法文档入档 [[re-analyze/analysis-contract]]。

黑盒回归:多组不同输入批量生成批量验证(长用户名 / 纯数字 / 空串 / 边界字符)——覆盖规范化与边界分支,避免只在单一输入上通过。

跨域联合

  • [[re-cracking]]:本网关是 re-cracking 工作流第 5 步(注册机),第 6 步统一验证
  • [[re-license]]:上游——校验算法与输入来源(机器码绑定见其步骤 5)来自本技能调用方;本技能产物也可回验 re-license 的算法还原正确性
  • [[re-patching]]:互替关系——算法不可逆 / 快速绕过用补丁;本技能无法覆盖的校验点(不可逆部分)交补丁处理
  • [[re-binary-core]]:反编译工作台([[re-ghidra]] / [[re-ida]] / [[re-radare2]])
  • [[re-crypto-id]] / [[re-crypto-decrypt]]:序列号加解密环节(XOR / 查表 / 自定义变换)的识别与还原思路
  • [[re-sandbox]]:生成序列号验证沙箱([[re-analyze/platform-tips]] 最高原则)
  • [[re-ioc]]:keygen 特征 / 序列号生成算法指纹可作检测特征

常见坑与陷阱

  • 算法含不可逆部分(哈希 / 非对称):现象——校验算法里有 SHA1 / MD5 / RSA 验签,注册机正推生成不了;原因——单向函数不可逆,序列号由私钥 / 哈希不可逆得;对策——诚实报告:该部分改 [[re-patching]](跳过验签 / 改分支);z3 只对可逆部分建模,别把不可逆段硬塞进约束
  • 用户名绑定 → 生成逻辑需含输入:现象——生成的序列号在一台机器 / 一个用户名上有效,换输入就无效;原因——算法输入含机器码 / 用户名([[re-license]] 步骤 5 的机器码绑定);对策——注册机必须把输入参数化:CLI 要求提供用户名 / 机器码,生成逻辑从输入派生(模板里预留 --name / --machine 参数)
  • 大小写 / 格式校验:现象——算法还原正确但生成的序列号被程序拒绝;原因——程序比对前做了规范化(tolower / 去分隔符 / 补零 / 指定长度),或要求特定字符集;对策——把程序的规范化步骤还原进生成逻辑(先规范化输入再生成),对照 [[re-license]] 步骤 3 的比对代码逐字确认;多种格式(带 / 不带分隔符)分别验证
  • 算法还原错一位(溢出 / 进位 / 字节序):现象——手写实现与程序输出总差一位或偶对偶错;原因——无符号 / 有符号溢出、进位、大小端差异(尤其 32 位乘法 / 移位);对策——逐行对照反编译伪代码(步骤 5 注释对照法);用已知合法序列号当测试向量:沙箱内调试器断校验函数,喂一组输入记录程序内部计算值,与脚本中间值逐一比对定位差异
  • 第二层校验漏判:现象——启动校验通过,特定功能仍拒绝;原因——存在多个校验点(格式校验之外还有功能点 / 激活次数 / 有效期);对策——对照 [[re-license]] 全量校验点清单逐点验证,别只验启动路径
  • 校验位顺序 / 基数混淆:现象——校验位算法对但总差一位数字;原因——校验位参与顺序(先数据后校验 vs 校验位也算进下一轮)、进制(10 进制 vs 16 进制 vs base36)判断错;对策——用已知合法序列号逐位回推校验过程,确定参与顺序与基数后再实现

深度方法论(算法分类树 / 证据分级 / 坑边界)见 [[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-keygen
Source
github.com/dslsdzc/rev-skills