agentleFS
2233admin2233admin/reverse-skill-evolver/skills/ida-reverse/SKILL.md

ida-reverse

Skill26 starsChanged 10 days agoMITView on GitHub

IDA Pro 逆向分析辅助技能。当用户提到逆向、反编译、分析二进制/PE/ELF/APK/DLL/SO、破解、找密码、漏洞分析、病毒分析、firmware 固件分析,或需要分析 exe/dll/so/elf/macho/sys 等文件时,务必使用此技能。

  • Installs packages
Files
SKILL.md

IDA Pro 逆向分析技能

先选择当前执行入口(必读)

  1. OMP 内置 IDA:检查当前会话 ida 工具的实时 schema;若通过 xd://ida 暴露,先读取该接口。只有 action 支持 list、open、save、close、exec、rename、comment、set_type、make_function,且参数包含 db、code 时,才判定 omp_ida_native 可用。读取 OMP 原生 IDA skill,按它的工作流继续;下面的 HTTP MCP/CLI 安装和调用流程仅属于 idapro 分支。工具名、IDA 文件或 CLI 存在本身不代表原生能力可用。
  2. Hex-Rays 官方 OMP extension:原生 schema 不匹配、当前会话暴露的是 ida_* 工具时,读取该插件自带指导与实时工具 schema。它的数据库句柄与 OMP 内置 db、idapro MCP 的 database 不互通;本包未实现该官方 extension 的适配器。
  3. idapro MCP:当前宿主已暴露 idapro MCP 工具时,使用下文的 MCP 工作流。
  4. 无可用 IDA 后端:按 routing.json 的 all_supported_ida_backends_unavailable 进入原有 r2/Ghidra 备选路径。

omp_ida_native 是当前 OMP 会话的实时能力,只用于本次路由,不写入宿主 capability graph。OMP 原生入口不要求注册 Codex MCP 或安装额外的 idalib-mcp 服务。

OMP 分支的快照、候选函数初筛、跨版本对照和动态观察计划入口见上述原生 skill 的工作流表;这批扩展处于开发已交付、运行未验收状态。

idapro HTTP MCP 调用边界

以下安装、协议、工具参数与示例只适用于 idapro MCP 分支。

踩过的坑

  1. 原生 MCP 与 CLI 使用同一条真实链路
    • Codex 注册名为 idapro,地址默认是 http://127.0.0.1:13337/mcp
    • 原生 MCP 适合代理直接调工具;Python 命令 reverse-skill 适合登录安装、诊断和人工操作
    • CLI 先按 2026-07-28 调用 server/discover;现代服务使用逐请求元数据,旧服务才降级到 initialize / notifications/initialized 和 Mcp-Session-Id
  2. C:\Windows\System32\ 文件无权限打开
    • idalib 无法直接读取 System32 目录下的文件
    • 解决办法:reverse-skill open 自动检测并复制到临时目录后再打开
  3. 启动服务器命令阻塞对话
    • idalib-mcp 启动后会持续输出 INFO 日志到控制台
    • 解决办法:使用 reverse-skill start;Python 用无窗口后台进程启动服务
    • 命令会等待服务就绪后自动退出,不阻塞对话
  4. MCP 注册名固定为 idapro
    • 服务器自身名称可以是 ida-pro-mcp;Codex 侧统一使用短注册名 idapro
    • 运行 reverse-skill register,不要手工漂移配置文件
  5. 传输固定为 Streamable HTTP
    • 分析调用使用 HTTP;Windows --replace-stale 的端口归属核实使用 PowerShell
    • 真正链路是 reverse-skill → HTTP MCP → idalib-mcp.exe → IDA
  6. 协议版本必须协商,不能写死服务端版本
    • 客户端优先使用已发布版 2026-07-28 的逐请求 _meta,并镜像 MCP-Protocol-Version / Mcp-Method / Mcp-Name / Mcp-Param-* 头
    • 遇到非现代响应才进入 legacy 初始化,接受 2025-11-25、2025-06-18 或 2025-03-26;status 必须明确显示 era
    • 现代协议没有协议会话;IDA database ID 是应用层显式句柄,不等同于 Mcp-Session-Id
    • MRTR 的 requestState 必须原样回传且重试使用新的 JSON-RPC id;CLI 用 --input-responses-json / --request-state 显式完成该步骤
    • 规范映射、双时代流程和本机验证见 references/mcp-2026-07-28-dual-era.md
  7. 健康服务不能为了“重启”被误杀
    • reverse-skill start 先完成 MCP 初始化和 tools/list 健康检查
    • 服务健康时原样复用;显式 --replace-stale 只在核实当前端口监听者 executable 后停止该进程,其他端口不清理;归属不明时保留并提示检查
    • 新启动报告 PID 和日志;提前退出保留退出码/日志尾,超时后先检查报告的 PID 和日志
  8. 打开和分析可能是长请求
    • idb_open(run_auto_analysis=true) 会等待 IDA 分析,应按样本规模设置根选项 --timeout
    • 超时是明确失败,不用吞错、盲重试或伪造成功会话

工作流程原则

步骤做什么用什么
1注册并检查 Codex MCPreverse-skill register、status
2确保 HTTP 服务在运行reverse-skill start
3打开目标二进制文件reverse-skill open "xxx.exe"
4调用动态发现的工具原生 idapro MCP,或 reverse-skill call
5分析完毕reverse-skill close <session-id>

Python CLI

安装入口:<repo-root>\pyproject.toml;源码入口:python -m reverse_skill。

python -m pip install -e .
reverse-skill register
reverse-skill start
reverse-skill status
reverse-skill tools
reverse-skill --timeout 600 open "C:\path\to\file.exe"
reverse-skill sessions
reverse-skill call decompile --database "<session-id>" --arguments-json '{"addr":"0x140001000"}'
reverse-skill close "<session-id>"

start 自动选择本机最高版本的有效 IDA;--ida-dir 只用于明确固定版本。open 支持 --preferred-session-id、--no-auto-analysis、--no-build-caches,并自动处理 System32 输入。复杂样本使用 reverse-skill --timeout 600 open ...;这只扩大等待上限,不改变服务端分析行为。

机器调用使用 --json;输出 schema、稳定退出码和 OpenCLI 0.1 描述见 references/cli-contract.md。

start --port 控制本地 loopback 监听端口;根 --url 控制检查、调用和 Codex 注册地址,放在子命令之前。指定远端 URL 不会启动远端进程。非默认端口的完整流程:

reverse-skill start --port 24444
reverse-skill --url http://127.0.0.1:24444/mcp status
reverse-skill --url http://127.0.0.1:24444/mcp register
reverse-skill --url http://127.0.0.1:24444/mcp --timeout 600 open "C:\path\to\file.exe"

核心工具列表

tools/list 的实时结果是唯一真相;先执行 reverse-skill tools,不要依赖固定数量或历史快照。当前主要分组如下:

  • 会话:idb_open、idb_list、idb_close、idb_save、server_health
  • 概览:survey_binary、list_funcs、list_globals、entity_query、imports_query
  • 反编译:decompile、disasm、analyze_function、analyze_batch、func_profile
  • 引用与数据流:xrefs_to、xref_query、callees、callgraph、trace_data_flow
  • 搜索与读取:find_regex、search_text、find_bytes、get_bytes、get_string、get_int
  • 类型与结构:declare_type、set_type、infer_types、type_query、read_struct
  • 注释与修改:set_comments、append_comments、rename、patch、patch_asm、define_func
  • 签名:make_signature、make_signature_for_function、make_signature_for_range、find_xref_signatures

Codex 原生工具会由客户端加上 idapro 注册命名空间;CLI 的 call TOOL 参数使用上面这些服务端原名。每个分析工具都必须携带 database=<session-id>。

逆向分析完整工作流

Step 1: 启动服务器

确保 HTTP 服务在后台运行。

reverse-skill register
reverse-skill start
reverse-skill status

status 中 mcp.online=true 且 toolCount>0 表示就绪。

Step 2: 打开文件

reverse-skill --timeout 600 open "C:\目标.exe"

命令返回真实 session;带自动分析的复杂样本需要更长超时。

Step 3: 全局概览

survey_binary(detail_level="minimal", database="<session-id>")

关注:

  • 架构(x86/x64/ARM)
  • 入口点(main/WinMain/DllMain)
  • 有趣的字符串(URL、路径、错误消息)
  • 导入分类(加密函数?网络 API?文件操作?)
  • 热门函数(高 xref 计数的函数通常是关键逻辑)

Step 4: 深入关键函数

analyze_function(addr="关键函数名", database="<session-id>")

或:

decompile(addr="函数名", database="<session-id>")
disasm(addr="函数名", max_instructions=50, database="<session-id>")

Step 5: 数据流和交叉引用

xrefs_to(addrs="关键地址/字符串", database="<session-id>")
callgraph(roots=["关键函数"], max_depth=3, database="<session-id>")
trace_data_flow(addr="关键地址", direction="backward", max_depth=5, database="<session-id>")

Step 6: 记录和优化

set_comments(items=[{"addr": "0x140001000", "comment": "你的理解"}], database="<session-id>")
rename(batch={"func": [{"addr": "函数地址", "name": "有意义的名字"}]}, database="<session-id>")

Step 7: 输出报告

分析完成后,生成 report.md 记录发现和步骤。

Prompt 工程准则

  1. 不要手动算进制 — 任何时候需要转换数字,用 int_convert
  2. 先 survey 后深入 — 先看概况再针对性分析
  3. 持续加注释和重命名 — 分析过程中不断更新函数名和变量名,提升后续分析的准确性
  4. 跟踪交叉引用 — 发现有趣的数据/字符串,用 xrefs_to 看谁引用了它
  5. 遇到混淆代码 — 先做字符串解密、导入哈希去除、控制流平坦化去除等预处理
  6. C++ STL 代码 — 用 FLIRT/Lumina 识别库函数后,再分析业务逻辑
  7. 不要暴力破解 — 分析应从反汇编中推导解决方案,用简单 Python 辅助计算
  8. 遇到 "No database bound" — 先执行 reverse-skill open,再把返回的 session 作为 database
  9. 遇到 worker 不可达 — 该 session 已陈旧;不要伪造结果,关闭或重新打开真实目标
  10. 带自动分析打开 GUI/复杂样本时 — 显式加根选项 --timeout 600,超时后按失败处理

路由上下文

上游入口: SKILL.md(总控)、routing.md 上游备选: radare2/(如果不想开 IDA,可以先 r2 快速侦察) 下游出口:

  • 需 Frida 动态验证 → reverse-engineering/tools-dynamic.md
  • 需符号执行/angr → reverse-engineering/tools-dynamic.md
  • 需通用逆向方法论 → reverse-engineering/SKILL.md

同级关联模块: radare2/(IDA 不可用时替代方案)


按需自举(On-Demand Bootstrap)

本 skill 的 Python CLI 已接入统一自举系统。

自动化能力边界

工具可自动安装安装方式说明
idalib-mcp✓reverse-skill install从 GitHub 安装并进入上游交互安装器
IDA Pro 本体✗需手动安装/登录默认选择本机可用安装中的最高版本;显式 --ida-dir 才固定目录

安装步骤(已验证)

# 1. 安装本仓库 Python CLI
python -m pip install -e .

# 2. 从 GitHub 安装 ida-pro-mcp 并进入交互安装(选择 Streamable HTTP)
reverse-skill install

# 3. 重启 IDA Pro,打开目标文件
# 插件自动监听 127.0.0.1:13337

# 4. 验证
ida-pro-mcp --config

⚠️ 注意:PyPI 上的 ida-mcp 包(作者 jtsylve)是另一个项目,不是我们需要的。 必须从 GitHub 安装 mrexodia/ida-pro-mcp。

自举触发点

  • CLI 安装:reverse-skill install
  • MCP 注册:对 Codex 执行 reverse-skill register;其他客户端按各自的原生注册命令配置同一 URL

前置条件

  • IDA Pro 已安装;Python CLI 按版本选择本机最高的有效安装,旧 IDADIR 只作为候选,不再覆盖新版
  • Python 已安装(idalib-mcp 依赖 Python)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.