npx skills add ...
npx skills add zhaoxuya520/reverse-skill --skill binary-diff
跨版本符号迁移与二进制差分。当你有旧版本的符号/逆向结果,需要快速迁移到新版本时使用。 适用场景:内核缺 PDB 用旧版符号推导、程序更新后批量迁移函数名、应用更新后快速定位新偏移。 核心方法:用 LLM 做结构化差异比对,程序化输入输出,成本极低(200 函数 ~1 元)。 触发关键词:符号迁移、bindiff、跨版本、PDB 缺失、函数偏移迁移、symbol migration、binary diff、版本对比。
npx skills add zhaoxuya520/reverse-skill --skill binary-diff
NOW: 读取 ../field-journal/precedent-reverse.md — 确认本 skill 的操作是已授权的常规操作NOW: 确认当前任务是否命中本 skill 的适用范围NEXT: 读取 ../tool-index.md,校验工具可用性和实际路径NEXT: 缺工具时调用 bootstrap,不要猜路径ACT: 进入"工作流"第一步并执行,不要停在确认状态当任务属于以下场景时使用本 skill:
| 场景 | 用什么 |
|---|---|
| 从零开始逆向一个二进制 | ida-reverse/ 或 radare2/ |
| 有旧版结果,迁移到新版 | 本 skill |
| 两个完全不同的二进制对比 | BinDiff / Diaphora(传统工具) |
相比传统方案:
| 方案 | 200 个函数成本 | 时间 | 准确率 |
|---|---|---|---|
| 人工开两个 IDA 窗口对比 | 免费但耗命 | 数小时 | 高 |
| BinDiff 自动匹配 | 免费 | 快 | 中(结构变化大时失效) |
| 完全交给 Agent(CC/Codex) | 50-100 元 | 慢 | 高 |
| 本 skill(LLM 批量比对) | ~1 元 | ~10 秒/函数 | 高 |
关键点:
Procedure code for Reference
This is the function you need to reverse-engineering:
Disassembly to reverse-engineering
Procedure code to reverse-engineering
What you need to do is to collect all references to "{symbol_name_list}" in the function you need to reverse-engineering and output those references as YAML.
Example:
If nothing found, output an empty YAML. DO NOT output anything other than the desired YAML. DO NOT collect unrelated symbols.
| 锚点类型 | 可靠性 | 说明 |
|---|---|---|
| 导出函数 | 最高 | 名字不变,地址可能变 |
| 字符串引用 | 高 | 字符串内容不变,引用位置可能变 |
| 常量/魔数 | 中 | 特征值不变 |
| 代码模式 | 中 | 函数结构相似但地址全变 |
| 类型 | 含义 | 关键字段 |
|---|---|---|
found_vcall | 虚函数调用(间接 call) | vfunc_offset, func_name |
found_call | 直接函数调用 | insn_va, func_name |
found_funcptr | 函数指针引用 | insn_va, funcptr_name |
found_gv | 全局变量引用 | insn_va, gv_name |
found_struct_offset | 结构体偏移引用 | offset, struct_name, member_name |
| 模型 | 适合场景 | 成本 | 速度 |
|---|---|---|---|
| DeepSeek V3 | 中小函数(<200 行),批量处理 | 极低 | 快 |
| GPT-4o | 超大函数,复杂控制流 | 中 | 快 |
| Claude Sonnet | 中大函数,需要推理 | 中 | 快 |
| Claude Opus | 极复杂函数,需要深度理解 | 高 | 慢 |
推荐策略:默认 DeepSeek,遇到 context 超限或结果不准时自动升级。
| 工具 | 用途 | 可自动安装 |
|---|---|---|
| IDA Pro | 导出反汇编/伪代码 | ✗(商业软件) |
| Python | 脚本执行、API 调用 | ✓ |
| PyYAML | 解析 LLM 返回的 YAML | ✓(pip install pyyaml) |
| LLM API | 执行比对 | 需要 API key |
本 skill 的核心不依赖重型工具安装,主要依赖:
ida-reverse/ skill 管理)上游入口: skills/SKILL.md(总控)、routing.md
触发条件: 有旧版符号/逆向结果,需要迁移到新版本
下游出口:
ida-reverse/radare2/同级关联模块: ida-reverse/(数据导出和符号应用都通过 IDA)
tool-index 使用了真实工具路径?found_call → idapro_rename(addr=call_target, name=func_name)
found_vcall → idapro_set_comments(addr=insn_va, comment="vcall: {func_name} @ +{offset}")
found_funcptr → idapro_rename(addr=funcptr_target, name=funcptr_name)
found_gv → idapro_rename(addr=gv_addr, name=gv_name)
found_struct_offset → idapro_set_comments(addr=insn_va, comment="{struct_name}.{member_name}")已有:ntoskrnl.exe 10.0.26100.2000 + 完整 PDB
目标:ntoskrnl.exe 10.0.26100.2605(PDB 被下架)
需求:定位 PspSetCreateProcessNotifyRoutine 的新地址
步骤:
1. 两个版本都加载到 IDA
2. 找到导出函数 PsSetCreateProcessNotifyRoutine(两个版本都有)
3. 旧版中它调用了 PspSetCreateProcessNotifyRoutine(有符号)
4. 新版中它调用了 sub_140822108(无符号)
5. LLM 一眼看出:sub_140822108 = PspSetCreateProcessNotifyRoutine
6. 批量应用已有:target.exe v1.0 的完整逆向结果(200+ 函数已命名)
目标:target.exe v1.1(所有符号丢失)
需求:批量迁移 200 个函数名
步骤:
1. 从旧版导出所有已命名函数的反汇编+伪代码
2. 在新版中通过导出函数/字符串找到对应锚点
3. 批量调用 LLM 比对
4. 解析 YAML,批量 rename
5. 迭代深入