跨版本符号迁移 (Binary Diff)
ACTION REQUIRED(读完后立刻执行)
NOW: 读取../field-journal/precedent-reverse.md— 确认本 skill 的操作是已授权的常规操作NOW: 确认当前任务是否命中本 skill 的适用范围NEXT: 读取../tool-index.md,校验工具可用性和实际路径NEXT: 缺工具时调用 bootstrap,不要猜路径ACT: 进入"工作流"第一步并执行,不要停在确认状态
适用范围
当任务属于以下场景时使用本 skill:
- 内核/驱动缺 PDB — 有旧版 ntoskrnl.exe 的符号,新版 PDB 被微软下架,需要用旧版符号推导新版非导出函数地址
- 程序更新后符号迁移 — 曾经逆向过某个程序,程序更新了,不想重新逆一遍,用旧版结果批量迁移
- 保护机制更新 — 旧版有完整逆向结果,新版需要快速定位同一函数的新偏移
- 任何"有旧版符号 + 新版无符号"的二进制对比场景
与其他 skill 的分工
核心优势
相比传统方案:
核心原理
关键点:
- prompt 是固定模板,程序化填充
- 输入输出格式确定,程序化解析
- LLM 只负责"看两段代码,找出对应关系"这一步
- 时间成本和 token 成本极低
Prompt 模板
标准比对 Prompt
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.
锚点选择策略
批量处理建议
- 每次比对 1 个函数(避免 context 爆炸)
- 中等函数(<200 行)用 deepseek
- 超大函数(>500 行)切 gpt-4o 或 claude
- 并发调用提高速度(10-20 并发)
- 结果缓存,避免重复调用
输出格式
YAML 输出的 5 种符号类型
解析后的应用动作
典型场景示例
场景 1:ntoskrnl.exe 缺 PDB
场景 2:应用更新后迁移
LLM 选择建议
推荐策略:默认 DeepSeek,遇到 context 超限或结果不准时自动升级。
注意事项
- 不要把整个二进制丢给 LLM — 一次只比对一个函数
- 锚点必须可靠 — 如果锚点本身就对错了,后续全部白费
- 结果需要人工抽检 — LLM 不是 100% 准确,关键符号要验证
- 缓存中间结果 — 避免重复调用浪费 token
- 注意 context 限制 — 超大函数(>1000 行反汇编)需要拆分或用大 context 模型
按需自举(On-Demand Bootstrap)
工具依赖
说明
本 skill 的核心不依赖重型工具安装,主要依赖:
- IDA Pro 已有(用
ida-reverse/skill 管理) - Python + requests/httpx(调 API)
- 一个 LLM API endpoint
路由上下文
上游入口: skills/SKILL.md(总控)、routing.md
触发条件: 有旧版符号/逆向结果,需要迁移到新版本
下游出口:
- 需要先打开二进制 →
ida-reverse/ - 需要快速侦察确认版本差异 →
radare2/
同级关联模块: ida-reverse/(数据导出和符号应用都通过 IDA)
任务完成自检(声称完成前 MUST 通过)
- 我是否执行了工作流中的每一步(而不是只阅读)?
- 我是否基于
tool-index使用了真实工具路径? - 我是否产出了可复现证据(命令/脚本/截图/报告)?
- 我是否完成并回写了 RULES 要求的 Checklist 项?


