逆向工程是一项高度专业且耗时的技艺。安全研究人员每天都在与汇编代码、函数名和数据段搏斗,即使在当今 AI 辅助盛行的年代,这些先进工具依然被隔离在分析环境之外。Binary Ninja MCP Server 的出现,彻底改变了这一切。它在 Binary Ninja 这款强大的二进制分析平台与 AI 助手之间架起了一座实时桥梁,让 Claude 等大语言模型能够直接参与到反编译、重命名、注释和代码分析的过程中,将逆向工程的效率提升到了新的层次。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | Binary Ninja MCP Server |
| GitHub 地址 | https://github.com/fosdickio/binary_ninja_mcp |
| 项目描述 | 实现 Binary Ninja 逆向工程功能与 LLM 的无缝集成,使 AI 工具能实时交互二进制分析 |
| 作者 | fosdickio |
| 开源协议 | MIT License |
| 开源状态 | 公开状态 |
| Languages | Python |
| 支持平台 | Windows / macOS / Linux |
| 最后更新 | 2025-05-14 |
一、项目介绍
Binary Ninja MCP Server 由三个关键组件协同工作,形成一个完整的实时分析环路:
| 组件 | 功能 | 部署位置 |
|---|---|---|
| Binary Ninja 插件 | 在 Binary Ninja 内部启动一个 HTTP 服务器,将内部的分析能力暴露为标准接口 | Binary Ninja 内部 |
| MCP 桥接 | 将 MCP 客户端与 Binary Ninja MCP 服务器连接起来,转发请求和响应 | 客户端侧 |
| MCP 客户端 | AI 助手(如 Claude Desktop),通过桥接调用 Binary Ninja 的功能 | 用户桌面 |
核心工具集
该服务器提供了一套覆盖逆向分析全流程的工具,共 26 个 MCP 工具:
| 功能类别 | 工具名 | 描述 |
|---|---|---|
| 状态与信息 | get_binary_status | 获取当前已加载二进制文件的状态信息 |
| 代码发现 | list_methods、list_classes、list_namespaces、list_segments 等 | 列出所有函数、类、命名空间、内存段 |
| 符号与数据 | list_exports、list_imports、list_data_items | 查看导出表、导入表和已定义数据标签 |
| 反编译与汇编 | decompile_function、get_assembly_function | 按函数名反编译出 C 代码或获取汇编表示 |
| 搜索 | search_functions_by_name | 按子串搜索函数名 |
| 重命名 | rename_function、rename_data、rename_variable | 将函数、数据标签、变量从默认名改为有意义的名称 |
| 注释 | set_comment、get_comment、delete_comment 等 | 在指定地址或函数设置、读取、删除注释 |
| 类型与签名 | define_types、edit_function_signature、retype_variable、get_user_defined_type | 从 C 字符串定义类型、编辑函数签名、修改变量类型 |
| 交叉引用 | code_references、function_at | 查看调用关系和地址归属 |
这些工具覆盖了逆向工程的标志性操作:从最初的发现(列出函数、段),到理解(反编译、查看汇编),再到标注(重命名、注释)和类型恢复(修改签名、定义类型)。
二、核心优势
实时、无缝的集成体验
这不是离线批处理,而是真正的实时交互。Binary Ninja 内部的所有操作——反编译、重命名、注释——都会立即反映在 AI 助手的分析结果中。AI 可以基于完整的反编译 C 代码建议函数原名应为某特定操作,然后立即为你重命名,分析节奏没有被中断。
覆盖完整的逆向工作流
从二进制加载状态到函数列表,从反编译伪代码到交叉引用分析,从手动注释到类型定义导入——这套工具覆盖了一个逆向工程师典型工作流程的每一个步骤。AI 不只是“看到”代码,而是能真正参与到分析过程中。
基于 Binary Ninja 的企业级分析引擎
Binary Ninja 本身提供高质量的反编译和先进的分析能力(中间语言、控制流图、数据流分析)。MCP 服务器将这一全功能引擎直接暴露给 AI,相当于 AI 拥有了一个世界级的逆向工程工作站。
跨客户端兼容
虽然主要针对 Claude Desktop 作为 MCP 客户端,但 MCP 服务器可与任何实现 MCP 协议的客户端配合使用。开发者可以为其他 AI 助手实现适当的集成层。
MIT 开源协议
采用商业友好的 MIT 协议,适合个人研究者和安全团队使用。
三、适用场景
自动化二进制分析
用户:为当前二进制文件生成一份全面的分析报告。
AI 依次调用 get_binary_status、list_exports、list_imports、list_methods 等工具,综合信息后生成结构化的分析报告,包括文件类型、主要功能模块、导入的敏感 API、潜在的攻击面等。
函数分析与重命名
用户:反编译 sub_402A30 这个函数,帮我理解它的作用,然后建议一个好的名字。AI 调用 decompile_function 获取伪代码,分析其逻辑后才调用 rename_function 将函数重命名为有意义的名称。
交叉引用追踪
用户:谁调用了 decryptData 函数?把调用关系列出来。AI 调用 code_references 获取所有调用 decryptData 的函数名和地址,构建出一个完整的调用链。
结构体与类型恢复
用户:根据 processPacket 函数中对某个指针的访问模式,推断出该结构的布局,然后帮我定义这个类型。AI 分析函数中对偏移量的访问,推断出结构体布局,调用 define_types 将类型定义导入到 Binary Ninja 中。
交互式学习与教学
学生:帮我反编译 validateSerial 函数,并解释它的序列号验证逻辑是怎样的。AI 提供伪代码并逐步解释算法逻辑,学生可以在 Binary Ninja 中同步看到反馈。
四、安装教程
环境要求
| 工具 | 用途 | 版本要求 |
|---|---|---|
| Binary Ninja | 二进制分析平台 | 需要有效的 Binary Ninja 许可 |
| Python | 运行桥接组件 | 3.12+ |
| Claude Desktop(或其他客户端) | MCP 客户端 | 主要集成路径 |
安装步骤
第一步:安装 Binary Ninja 插件
在 Binary Ninja 中,通过插件管理器安装:插件 > 管理插件,搜索并安装 Binary Ninja MCP 插件。
或者手动安装:将本仓库的 plugin/ 目录复制到 Binary Ninja 的插件文件夹中。
第二步:克隆仓库并安装桥接依赖
git clone git@github.com:fosdickio/binary_ninja_mcp.git
cd binary_ninja_mcp
python3 -m venv .venv
source .venv/bin/activate # macOS/Linux
pip install -r bridge/requirements.txt第三步:配置 Claude Desktop
macOS 自动化配置(推荐):
./scripts/setup_claude_desktop.py手动配置(macOS/Linux/Windows):
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS),添加:
{
"mcpServers": {
"binary_ninja_mcp": {
"command": "/ABSOLUTE/PATH/TO/.venv/bin/python",
"args": ["/ABSOLUTE/PATH/TO/bridge/binja_mcp_bridge.py"]
}
}
}务必使用绝对路径,并确保使用的是虚拟环境中的 Python 解释器。
第四步:启动集成
- 打开 Binary Ninja,加载一个二进制文件。
- 通过
插件 > MCP 服务器 > 启动 MCP 服务器启动 MCP 服务。 - 启动(或重启)Claude Desktop。
五、使用示例
示例一:生成分析报告
用户:为当前二进制生成一份分析报告。
AI 依次调用 get_binary_status、list_methods、list_exports、list_imports、list_segments、list_classes、list_data_items、list_namespaces 等工具,收集完整信息后生成包含文件基本信息、主要功能模块、导出接口、依赖库和潜在安全关注的报告。
示例二:函数分析
用户:sub_402A30 这个函数是做什么的?帮我反编译它的 C 代码。AI 调用 decompile_function("sub_402A30"),获取反编译伪代码,分析后回复:“该函数接收两个参数:一个输入缓冲区和一个长度。它循环遍历每个字节与 0x55 进行 XOR 操作。这很可能是一个简单的加解密函数。我建议命名为 xor_encrypt_decrypt。”
用户:好的,就用你建议的名字。
AI 立即调用 rename_function("sub_402A30", "xor_encrypt_decrypt"),完成重命名。
示例三:交叉引用分析
用户:decryptData 这个函数被谁调用了?AI 调用 code_references("decryptData"),获取调用者列表,回复:“decryptData 被三个函数调用:handleIncomingPacket (0x401050)、processFile (0x402200) 和 decryptAllData (0x403500)。”
示例四:类型恢复
用户:在processNetworkData函数里,某个指针被用来访问偏移+0x0、+0x4、+0x8。帮我定义一个合适的结构体。
AI 分析这些访问模式,推断出结构体布局,调用 define_types 将 struct NetworkHeader { int type; int length; char* data; }; 导入到 Binary Ninja 中。
六、常见问题
问:Claude Desktop 提示“工具未找到”或“服务器无响应”?
答:请按以下步骤排查:
- 检查插件状态:确保在 Binary Ninja 中已启动 MCP 服务器(
插件 > MCP 服务器 > 启动 MCP 服务器)。 - 检查路径:确认
claude_desktop_config.json中的 Python 解释器和桥接脚本路径都为绝对路径。 - 检查虚拟环境:确保使用的是虚拟环境中的 Python(
which python确认),依赖已正确安装。 - 检查端口:默认 MCP 服务器运行在 HTTP 端点,确认端口未被其他程序占用。
问:反编译失败,返回空字符串?
答:某些函数(如外部导入函数、Thunk 函数)可能反编译失败。AI 会收到空字符串或错误信息,可以进一步用 get_assembly_function 查看汇编表示作为补充分析。
问:可以同时分析多个二进制文件吗?
答:当前设计是每个 Binary Ninja 实例处理一个二进制文件。如果需要分析多个文件,可以启动多个 Binary Ninja 实例。
问:支持其他 AI 客户端?
答:MCP 服务器本身与 MCP 客户端无关,可以与任何实现 MCP 的客户端配合使用。只需要为特定客户端实现适当的集成层。
问:重命名操作可逆吗?
答:重命名函数、数据标签和变量的操作会直接修改 Binary Ninja 的分析数据库。如果不满意 AI 的建议,可以使用 Binary Ninja 内置的撤销功能回退。
七、总结
Binary Ninja MCP Server 是逆向工程领域 AI 辅助应用的一个里程碑。它不只是让大语言模型“看到”反编译代码,而是让 AI 真正参与到逆向分析的每一个环节——从发现、理解到标注和类型恢复,全程实时交互。
对于安全研究人员和逆向工程师来说,这个工具意味着可以大幅缩短从“加载二进制”到“理解二进制”的时间。花二十分钟完成配置,你将获得一位随时待命的 AI 逆向搭档,帮助你更快地揭开那些神秘二进制文件的内在逻辑。
`define_types`这个工具很有用,AI根据访问模式推断结构体布局,然后直接导入类型定义。
MIT协议对商业安全研究很友好,已经在我们团队内部分享了。
macOS自动化安装脚本很贴心,不用手动编辑JSON配置文件。
反编译大型二进制文件时可能会有点慢,但AI分析的速度完全能接受。
重命名函数后Binary Ninja自动更新所有交叉引用,不会出现名称不一致的问题。