Token导航 LogoToken导航TokenDH.com
IDA Pro MCP logo
AI代理stdio官方级别未说明来源级核验

IDA Pro MCP

MCP Server

一个用于IDA Pro的反编译辅助工具,通过MCP协议提供LLM集成和自动化分析功能。

工具数

0

提示词数

0

GitHub Stars

8,539

资源数

0
逆向工程PythonClaudeClaudeCursorWindsurfClineVS Code

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

mrexodia

提供方

mrexodia

最后核验

2026/5/17 20:51

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"

详细介绍

IDA Pro MCP

简单 MCP服务器 允许IDA Pro中的氛围反转。

https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0

视频的二进制文件和提示可在 mcp反向数据集 存储库。

先决条件

- 使用 idapyswitch 切换到最新的Python版本

  • IDA Pro (8.3或更高,推荐9), 不支持IDA Free
  • 支持的MCP客户端(选择您喜欢的一个)

- Amazon Q开发者命令行界面 - 增强代码 - 克劳德 - 克劳德代码 - 克莱恩 - 法典 - Copilot命令行界面 - 心动 - 光标 - Gemini CLI - 千码 - 基罗 - LM 工作室 - 开放代码 - Qodo Gen - Qwen编码器 - 鲁代码 - - VS Code - VS代码内部人员 - 弯曲 - 帆板运动 - 泽德 - 其他MCP客户端:运行 ida-pro-mcp --config 获取客户端的JSON配置。

安装(克劳德代码)

在Claude Code中安装无头IDA Pro MCP:

claude plugin marketplace add mrexodia/claude-marketplace
claude plugin install ida-pro-mcp@mrexodia

要更新到最新版本:

claude plugin update ida-pro-mcp@mrexodia

备注:这需要全局激活idalib 紫外线 安装:

# windows
uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
# macos
uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"

安装(GUI)

备注:不再推荐MCP插件,最终将被弃用。使用 idalib-mcp 相反。

如果要从IDA GUI手动配置MCP服务器:

pip uninstall ida-pro-mcp
pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip

配置MCP服务器并安装IDA插件:

ida-pro-mcp --install

重要:确保您完全重新启动IDA和MCP客户端,以便安装生效。一些客户端(如Claude)在后台运行,需要从托盘图标中退出。

提示工程

LLMs容易产生幻觉,你需要明确你的提示。对于逆向工程,整数和字节之间的转换尤其成问题。下面是一个最小的示例提示,如果您使用不同的提示获得了良好的结果,请随时开始讨论或打开问题:

Your task is to analyze a crackme in IDA Pro. You can use the MCP tools to retrieve information. In general use the following strategy:

- Inspect the decompilation and add comments with your findings
- Rename variables to more sensible names
- Change the variable and argument types if necessary (especially pointer and array types)
- Change function names to be more descriptive
- If more details are necessary, disassemble the function and add comments with your findings
- NEVER convert number bases yourself. Use the `int_convert` MCP tool if needed!
- Do not attempt brute forcing, derive any solutions purely from the disassembly and simple python scripts
- Create a report.md with your findings and steps taken at the end
- When you find a solution, prompt to user for feedback with the password you found

这个提示只是第一个实验,如果你找到了提高输出的方法,请分享!

另一个提示由 @公元1357年:

Your task is to create a complete and comprehensive reverse engineering analysis. Reference AGENTS.md to understand the project goals and ensure the analysis serves our purposes.

Use the following systematic methodology:

1. **Decompilation Analysis**
   - Thoroughly inspect the decompiler output
   - Add detailed comments documenting your findings
   - Focus on understanding the actual functionality and purpose of each component (do not rely on old, incorrect comments)

2. **Improve Readability in the Database**
   - Rename variables to sensible, descriptive names
   - Correct variable and argument types where necessary (especially pointers and array types)
   - Update function names to be descriptive of their actual purpose

3. **Deep Dive When Needed**
   - If more details are necessary, examine the disassembly and add comments with findings
   - Document any low-level behaviors that aren't clear from the decompilation alone
   - Use sub-agents to perform detailed analysis

4. **Important Constraints**
   - NEVER convert number bases yourself - use the int_convert MCP tool if needed
   - Use MCP tools to retrieve information as necessary
   - Derive all conclusions from actual analysis, not assumptions

5. **Documentation**
   - Produce comprehensive RE/*.md files with your findings
   - Document the steps taken and methodology used
   - When asked by the user, ensure accuracy over previous analysis file
   - Organize findings in a way that serves the project goals outlined in AGENTS.md or CLAUDE.md

直播讨论提示并显示一些真实世界的恶意软件分析:

![](https://www.youtube.com/watch?v=iFxNuk3kxhk)

提高LLM准确性的技巧

大型语言模型(LLM)是强大的工具,但它们有时会难以处理复杂的数学计算或表现出“幻觉”(编造事实)。确保告诉LLM使用 int_convert MCP工具,您可能还需要 数学mcp 对于某些操作。

另一件要记住的事情是,LLM在混淆的代码上表现不佳。在尝试使用LLM解决问题之前,先看看二进制文件,花一些时间(自动)删除以下内容:

  • 字符串加密
  • 导入哈希
  • 控制流扁平化
  • 代码加密
  • 反反编译技巧

您还应该使用Lumina或FLIRT等工具来尝试解析所有开源库代码和C++STL,这将进一步提高准确性。

运输和无头MCP

您可以运行SSE服务器连接到用户界面,如下所示:

uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse

安装后 idalib 您还可以运行无头MCP服务器。您可以从初始二进制文件开始:

uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable

或者在没有二进制文件的情况下启动,稍后使用打开/关闭任意文件 idalib_open(...) / idalib_close(...):

uv run idalib-mcp --host 127.0.0.1 --port 8745

对于基于stdio的客户端,请使用:

uv run idalib-mcp --stdio

_备注_:The idalib 该功能由以下人员贡献 Willi Ballenthin.

无头idalib会话模型

idalib-mcp 是一个监督程序,它将每个打开的数据库保存在自己的idalib工作进程中。开始没有 input_path 得到支持;使用 idalib_open(input_path, ...) 动态打开数据库 idalib_close(session_id) 关闭它们。这允许一个无头MCP服务器在其生命周期内处理任意文件。

如果所请求的IDB已经在运行插件的GUI IDA实例中打开, idalib-mcp 将使用该GUI实例,而不是生成重复的无头worker。如果GUI实例稍后消失,下一个路由请求将在可能的情况下在无头工作器中重新打开数据库。如果未保存的仅GUI更改在回退后可见,则必须先保存。

工具的目标要么是绑定到当前MCP上下文的数据库,要么是显式的 database 争论。

uv run idalib-mcp --stdio --max-workers 4

典型流程:

idalib_open("/path/to/binary_a.exe", session_id="binary_a")
idalib_open("/path/to/library.dll", session_id="library")

decompile("main", database="binary_a")
xrefs_to("ImportantExport", database="library")

database 接受会话ID、文件名或输入路径。如果省略,工具将使用绑定到活动上下文的数据库。

使用 --isolated-contexts 为了实现严格的每传输隔离:

uv run idalib-mcp --isolated-contexts --host 127.0.0.1 --port 8745 path/to/executable

为什么使用 --isolated-contexts?

当多个代理连接到同一个代理时使用它 idalib-mcp 服务器和您想要确定性上下文隔离:

  • 防止一个代理意外更改另一个代理的活动数据库。
  • 保持每个传输上下文的默认数据库明确。
  • 仍然允许通过传递进行有意合作 database=... 或者将多个代理绑定到同一会话ID。

--isolated-contexts 已启用:

  • 每个传输上下文都有自己的绑定(Mcp-Session-Id 为了 /mcp, session 为了 /sse, stdio:default 用于stdio)。
  • 对于依赖IDB的工具/资源,未绑定的上下文会很快失败,除非 database 提供。
  • idalib_switch(session_id)idalib_open(...) 仅绑定调用者上下文。

流式HTTP行为

随着 --isolated-contexts,启用了严格的Streamable HTTP会话语义,包括 Mcp-Session-Id 验证。

上下文工具

  • idalib_open(input_path, ...):在worker中打开二进制文件并将其绑定到活动上下文策略。
  • idalib_switch(session_id):将活动上下文策略重新绑定到现有会话。
  • idalib_current():返回绑定到活动上下文策略的会话。
  • idalib_unbind():删除活动上下文绑定。
  • idalib_list():包括 is_active, is_current_context, bound_contexts,后端(workergui)以及进程ID。

工人控制:

  • --max-workers N:最大并发数据库工作者数(0 =无限制,默认 4).
  • IDA_MCP_MAX_WORKERS:环境默认值 --max-workers.

MCP资源

资源 表示遵循MCP哲学的可浏览状态(只读数据)。

IDB核心州:

  • ida://idb/metadata -IDB文件信息(路径、拱、基、大小、哈希)
  • ida://idb/segments -具有权限的内存段
  • ida://idb/entrypoints -入口点(主、TLS回调等)

UI状态:

  • ida://cursor -当前光标位置和功能
  • ida://selection -当前选择范围

类型信息:

  • ida://types -所有本地类型
  • ida://structs -所有结构/工会
  • ida://struct/{name} -带字段的结构定义

查询:

  • ida://import/{name} -按名称导入详细信息
  • ida://export/{name} -按名称导出详细信息
  • ida://xrefs/from/{addr} -地址的交叉引用

核心功能

  • lookup_funcs(queries):按地址或名称获取函数(自动检测,接受列表或逗号分隔的字符串)。
  • int_convert(inputs):将数字转换为不同的格式(十进制、十六进制、字节、ASCII、二进制)。
  • list_funcs(queries):列表函数(分页、筛选)。
  • list_globals(queries):列出全局变量(分页、筛选)。
  • imports(offset, count):列出所有带有模块名称的导入符号(分页)。
  • decompile(addr):在给定地址处分解函数。
  • disasm(addr):带完整细节(参数、堆栈框架等)的反汇编函数。
  • xrefs_to(addrs):获取地址的所有交叉引用。
  • xrefs_to_field(queries):获取对特定结构字段的交叉引用。
  • callees(addrs):获取地址处函数调用的函数。

修改操作

  • set_comments(items):在反汇编和反编译器视图中的地址处设置注释。
  • patch_asm(items):地址处的补丁组装说明。
  • declare_type(decls):在本地类型库中声明C类型。
  • define_func(items):在地址处定义功能。可选择指定 end 对于明确的界限。
  • define_code(items):将字节转换为地址处的代码指令。
  • undefine(items):取消定义地址处的项,转换回原始字节。可选择指定 endsize.

内存读取操作

  • get_bytes(addrs):读取地址处的原始字节。
  • get_int(queries):使用ty读取整数值(i8/u64/i16le/i16be/etc)。
  • get_string(addrs):读取以null结尾的字符串。
  • get_global_value(queries):按地址或名称读取全局变量值(自动检测、编译时值)。

堆栈框架操作

  • stack_frame(addrs):获取函数的堆栈帧变量。
  • declare_stack(items):在指定的偏移量处创建堆栈变量。
  • delete_stack(items):按名称删除堆栈变量。

结构操作

  • read_struct(queries):读取特定地址的结构字段值。
  • search_structs(filter):按名称模式搜索结构。

调试器操作(扩展)

默认情况下,调试器工具是隐藏的。启用 ?ext=dbg 查询参数:

http://127.0.0.1:13337/mcp?ext=dbg

控制:

  • dbg_start():启动调试器进程。
  • dbg_exit():退出调试器进程。
  • dbg_continue():继续执行。
  • dbg_run_to(addr):跑到地址。
  • dbg_step_into():进入指令。
  • dbg_step_over():跳过指令。

断点:

  • dbg_bps():列出所有断点。
  • dbg_add_bp(addrs):添加断点。
  • dbg_delete_bp(addrs):删除断点。
  • dbg_toggle_bp(items):启用/禁用断点。

寄存器:

  • dbg_regs():所有寄存器,当前线程。
  • dbg_regs_all():所有寄存器,所有线程。
  • dbg_regs_remote(tids):所有寄存器,特定线程。
  • dbg_gpregs():GP寄存器,当前线程。
  • dbg_gpregs_remote(tids):GP寄存器,特定线程。
  • dbg_regs_named(names):命名寄存器,当前线程。
  • dbg_regs_named_remote(tid, names):命名寄存器,特定线程。

堆栈和内存:

  • dbg_stacktrace():使用模块/符号信息调用堆栈。
  • dbg_read(regions):从调试进程中读取内存。
  • dbg_write(regions):将内存写入调试进程。

高级分析操作

  • py_eval(code):在IDA上下文中执行任意Python代码(返回带有result/stout/stderr的dict,支持Jupyter风格的求值)。
  • analyze_funcs(addrs):全面的函数分析(反编译、汇编、外部参照、被调用者、调用者、字符串、常量、基本块)。

模式匹配和搜索

  • find_regex(queries):使用不区分大小写的正则表达式(分页)搜索字符串。
  • find_bytes(patterns, limit=1000, offset=0):查找二进制中的字节模式(例如“48 8B????”)。最大限额:10000。
  • find_insns(sequences, limit=1000, offset=0):在代码中查找指令序列。最大限额:10000。
  • find(type, targets, limit=1000, offset=0):高级搜索(即时值、字符串、数据/代码引用)。最大限额:10000。

控制流分析

  • basic_blocks(addrs):获取继承者和前任的基本块。

类型操作

  • set_type(edits):将类型应用于函数、全局变量、局部变量或堆栈变量。
  • infer_types(addrs):使用十六进制射线或启发式方法推断地址处的类型。

出口业务

  • export_funcs(addrs, format):以指定格式导出函数(json、c_header或原型)。

图的运算

  • callgraph(roots, max_depth):从具有可配置深度的根函数构建调用图。

批量操作

  • rename(batch):函数、全局变量、局部变量和堆栈变量的统一批重命名操作(接受带可选参数的dict func, data, local, stack 按键)。
  • patch(patches):一次修补多个字节序列。
  • put_int(items):使用ty(i8/u64/i16le/i16be/etc)写入整数值。

主要特点:

  • 安全型API:所有函数都使用具有TypedDict模式的强类型参数,以获得更好的IDE支持和LLM结构化输出
  • 批量优先设计:大多数操作同时接受单个项目和列表
  • 一致的错误处理:所有批处理操作返回 [{..., error: null|string}, ...]
  • 基于光标的分页:搜索函数返回 cursor: {next: offset}{done: true} (默认限制:1000,强制最大值:10000,以防止令牌溢出)
  • 演出:字符串以基于MD5的无效方式缓存,以避免重复 build_strlist 大型项目中的电话

发展

添加新功能是一个超级简单和简化的过程。你所要做的就是添加一个新的 @tool 中模块化API文件的函数 src/ida_pro_mcp/ida_mcp/api_*.py 您的功能将在MCP服务器中可用,无需任何额外的样板!下面是我添加的视频 get_metadata 在2分钟内完成功能(包括测试):

https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64

要测试MCP服务器本身:

npx -y @modelcontextprotocol/inspector

这将打开一个web界面http://localhost:5173并允许您与MCP工具进行交互以进行测试。

为了测试,我创建了一个指向IDA插件的符号链接,然后直接向POST发送JSON-RPC请求 http://localhost:13337/mcp.之后 启用符号链接 您可以运行以下命令:

uv run ida-pro-mcp --install

生成直接提交的变更日志 main:

git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"

目录标签

目录标签

逆向工程PythonClaude本地部署IDA插件LLM集成二进制分析自动化反编译

支持客户端

ClaudeCursorWindsurfClineVS Code

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

session

运行时(runtime,运行环境)

Python

部署方式(deploymentType,部署类型)

local-only

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiosessionlocal-only

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP