🚀 BinAssistMCP
BinAssistMCP 是一个强大的工具,它在 Binary Ninja 和 Claude 等大语言模型(LLMs)之间架起了一座桥梁。通过模型上下文协议(MCP),它提供了全面的逆向工程工具,利用服务器发送事件(SSE)和标准输入输出(STDIO)传输方式,将 Binary Ninja 的高级功能开放出来,实现了 AI 辅助的二进制分析。
🚀 快速开始
BinAssistMCP 是 Binary Ninja 和大语言模型(如 Claude)之间的强大桥梁,通过模型上下文协议(MCP)提供全面的逆向工程工具。它通过服务器发送事件(SSE)和标准输入输出(STDIO)传输方式,将 Binary Ninja 的高级功能暴露出来,实现 AI 辅助的二进制分析。
✨ 主要特性
- 双传输支持:同时支持 SSE(基于 Web)和 STDIO(命令行)传输方式。
- 40 多种分析工具:完整的 Binary Ninja API 包装器,具备高级功能。
- 多二进制会话:可同时分析多个二进制文件,并进行智能上下文管理。
- 智能符号管理:提供高级的函数搜索、重命名和类型管理功能。
- 自动集成:作为 Binary Ninja 插件,可自动启动,无缝集成。
- 灵活配置:可通过 Binary Ninja 的界面进行全面的设置管理。
- 支持 AI:针对大语言模型集成进行了优化,工具响应结构化。
📦 安装指南
前提条件
- Binary Ninja:版本 4000 或更高。
- Python:3.8+(通常随 Binary Ninja 捆绑)。
- 平台:Windows、macOS 或 Linux。
选项 1:使用 Binary Ninja 插件管理器(推荐)
- 打开 Binary Ninja。
- 导航至 工具 → 管理插件。
- 搜索 "BinAssistMCP"。
- 点击 安装。
- 重启 Binary Ninja。
选项 2:手动安装
步骤 1:下载并解压
git clone https://github.com/jtang613/BinAssistMCP.git
cd BinAssistMCP
步骤 2:安装依赖项
pip install -r requirements.txt
pip install anyio>=4.0.0 hypercorn>=0.16.0 mcp>=1.0.0 trio>=0.27.0 pydantic>=2.0.0 pydantic-settings>=2.0.0 click>=8.0.0
步骤 3:复制到插件目录
Windows:
copy BinAssistMCP "%APPDATA%\Binary Ninja\plugins\"
macOS:
cp -r BinAssistMCP ~/Library/Application\ Support/Binary\ Ninja/plugins/
Linux:
cp -r BinAssistMCP ~/.binaryninja/plugins/
步骤 4:验证安装
- 重启 Binary Ninja。
- 打开任意二进制文件。
- 检查 工具 菜单中是否有 "BinAssistMCP" 子菜单。
- 在日志面板中查看启动消息。
配置
基本设置
- 打开 Binary Ninja 设置(编辑 → 首选项)。
- 导航至 binassistmcp 部分。
- 配置服务器设置:
- 主机:
localhost(默认)
- 端口:
9090(默认)
- 传输方式:
both(SSE + STDIO)
高级配置
export BINASSISTMCP_SERVER__HOST=localhost
export BINASSISTMCP_SERVER__PORT=9090
export BINASSISTMCP_SERVER__TRANSPORT=both
export BINASSISTMCP_BINARY__MAX_BINARIES=10
💻 使用示例
启动服务器
通过 Binary Ninja 菜单:
- 工具 → BinAssistMCP → 启动服务器。
- 在日志面板中查看启动确认信息。
- 记录服务器 URL(例如,
http://localhost:9090)。
自动启动(默认):
- 当 Binary Ninja 加载文件时,服务器会自动启动。
- 可通过设置
binassistmcp.plugin.auto_startup 进行配置。
与 Claude Desktop 连接
在你的 Claude Desktop MCP 配置中添加以下内容:
{
"mcpServers": {
"binassist": {
"command": "python",
"args": ["/path/to/BinAssistMCP"],
"env": {
"BINASSISTMCP_SERVER__TRANSPORT": "stdio"
}
}
}
}
使用 SSE 传输方式
将基于 Web 的 MCP 客户端连接到:
http://localhost:9090/sse
集成示例
基本函数分析
向 Claude 提问:“分析已加载二进制文件中的 main 函数,并解释其功能”
Claude 将使用以下工具:
- get_functions() 查找 main 函数
- decompile_function() 获取可读代码
- get_function_pseudo_c() 获取 C 语言表示
- analyze_function() 进行全面分析
漏洞研究
向 Claude 提问:“查找所有处理用户输入的函数,并检查是否存在缓冲区溢出”
Claude 将使用:
- search_functions_advanced() 查找输入处理函数
- get_cross_references() 跟踪数据流
- get_variables() 分析缓冲区使用情况
- set_comment() 记录发现
📚 详细文档
BinAssistMCP 提供了 40 多种专门的工具,这些工具按功能类别进行了组织:
二进制管理
list_binaries - 列出所有已加载的二进制文件
get_binary_status - 检查分析状态和元数据
update_analysis_and_wait - 强制更新分析并等待完成
代码分析与反编译
decompile_function - 生成高级反编译代码
get_function_pseudo_c - 提取伪 C 语言表示
get_function_high_level_il - 访问高级中间语言
get_function_medium_level_il - 访问中级中间语言
get_disassembly - 获取带注释的汇编代码
信息检索
get_functions - 列出所有带元数据的函数
search_functions_by_name - 按名称模式查找函数
get_functions_advanced - 高级过滤(大小、复杂度、参数)
search_functions_advanced - 多目标搜索(名称、注释、调用、变量)
get_function_statistics - 全面的二进制统计信息
get_imports - 按模块分组的导入表分析
get_exports - 带符号信息的导出表
get_strings - 带上下文的字符串提取
get_segments - 内存布局分析
get_sections - 二进制节信息
符号与命名管理
rename_symbol - 重命名函数和数据变量
get_cross_references - 查找符号的所有引用
analyze_function - 全面的函数分析
get_call_graph - 调用关系映射
文档与注释
set_comment - 在特定地址添加注释
get_comment - 获取地址处的注释
get_all_comments - 导出所有带上下文的注释
remove_comment - 删除现有注释
set_function_comment - 添加函数级文档
变量管理
create_variable - 在函数中定义局部变量
get_variables - 列出函数参数和局部变量
rename_variable - 重命名变量以提高清晰度
set_variable_type - 更新变量类型信息
类型系统管理
create_type - 定义自定义类型和结构
get_types - 列出所有用户定义的类型
create_enum - 创建枚举类型
create_typedef - 创建类型别名
get_type_info - 详细的类型信息
get_classes - 列出类和结构
create_class - 定义新的类/结构
add_class_member - 向现有类型添加成员
数据分析
create_data_var - 在地址处定义数据变量
get_data_vars - 列出所有已定义的数据变量
get_data_at_address - 通过类型推断分析原始数据
导航与上下文
get_current_address - 获取当前光标位置
get_current_function - 识别当前地址处的函数
get_namespaces - 命名空间和符号组织
高级分析
get_triage_summary - 完整的二进制概述
get_function_statistics - 所有函数的统计分析
每个工具都设计为与 AI 工作流程无缝集成,提供大语言模型可以轻松解释和处理的结构化响应。
🔧 技术细节
暂未发现符合要求(具体的技术说明大于 50 字)的技术细节内容,故跳过该章节。
📄 许可证
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
故障排除
常见问题
- 服务器无法启动:
- 检查 Binary Ninja 日志面板中的错误消息。
- 验证所有依赖项是否已安装。
- 确保端口 9090 未被占用。
- Binary Ninja 崩溃:
- 检查 Python 环境兼容性。
- 尝试减少
max_binaries 设置。
- 使用单个二进制文件重启。
- 工具返回错误:
- 确保二进制分析已完成。
- 检查 Binary Ninja 文件是否仍处于打开状态。
- 验证函数/地址是否存在。
支持
- 问题反馈:在 GitHub Issues 上报告 bug。
- Binary Ninja:查阅官方 Binary Ninja 文档。
贡献
- 分叉仓库。
- 创建功能分支。
- 按照现有代码风格进行更改。
- 使用多种二进制类型进行测试。
- 提交拉取请求。