返回市场
二进制分析家-MCP

二进制分析家-MCP

作者:MCPPhalanx28 星标更新:2025-05-13

项目介绍

技术文档摘要

Another™ MCP Server for Binary Ninja

<div align="center">

<strong>用于 Binary Ninja 的 MCP(模型上下文协议)服务器</strong>

PyPI Apache 许可证 [Python 版本][python-url] [![GitHub 讨论][discussions-badge]][discussions-url]

</div>

English | 中文

://img.shields.io/pypi/pyversions/binaryninja-mcp.svg [python-url]: https://www.python.org/downloads/ [discussions-badge]: https://img.shields.io/github/discussions/MCPPhalanx/binaryninja-mcp [discussions-url]: https://github.com/MCPPhalanx/binaryninja-mcp/discussions

示例

tests/binary/beleaf.elf 来自 CSAW'19: Beleaf - Nightmare。 您还可以从上述链接找到完整的说明!

示例

但为什么是“另一个”?

参见: 与现有插件的关键差异

安装

服务器设置

有两种方法可以运行 MCP 服务器:

  1. Binary Ninja UI 插件

    • 通过 Binary Ninja 的插件管理器安装插件
    • 当加载第一个文件时,MCP 服务器会自动启动。
      • 自动启动可以通过 设置 - MCP 服务器 - 自动启动 进行配置
      • 监听端口可以通过 设置 - MCP 服务器 - 服务器端口号 进行配置
    • 所有打开的文件都会暴露为单独的资源,请参阅下面的 可用资源 部分
  2. Binary Ninja 无头模式

    uvx binaryninja-mcp install-api  # 只需运行一次
    uvx binaryninja-mcp server <filename> [filename]...
    
    • filename 可以是任何二进制文件或 BNDB,就像在 UI 模式下一样,所有打开的文件都可供 MCP 客户端使用。
    • 服务器默认运行在端口 7000 上
    • 使用 --port 标志指定不同的端口

MCP 客户端设置

  1. Claude Desktop (stdio 中继客户端):配置客户端通过内置中继使用 stdio 传输连接。

    {
      "mcpServers": {
        "binaryninja": {
          "command": "uvx",
          "args": ["binaryninja-mcp", "client"]
        }
      }
    }
    
  2. Cherry Studio

    • SSE 端点(推荐):URL: http://localhost:7000/sse
    • stdio 客户端
      • 命令:uvx
      • 参数:
        binaryninja-mcp
        client
        

如果您希望在非默认端口上运行 MCP 服务器,请在服务器和客户端命令行中添加 --port 12345

MCP 客户端可用工具

MCP 服务器提供以下工具:

  • rename_symbol: 重命名函数或数据变量
  • pseudo_c: 获取指定函数的伪 C 代码
  • pseudo_rust: 获取指定函数的伪 Rust 代码
  • high_level_il: 获取指定函数的高级 IL
  • medium_level_il: 获取指定函数的中级 IL
  • disassembly: 获取函数或指定范围的反汇编
  • update_analysis_and_wait: 更新二进制分析并等待完成
  • get_triage_summary: 获取来自 BinaryNinja Triage 视图的基本信息
  • get_imports: 获取导入符号字典
  • get_exports: 获取导出符号字典
  • get_segments: 获取内存段列表
  • get_sections: 获取二进制部分列表
  • get_strings: 获取在二进制中找到的字符串列表
  • get_functions: 获取函数列表
  • get_data_variables: 获取数据变量列表

MCP 客户端可用资源

MCP 资源可以通过 URI 格式访问: binaryninja://{filename}/{resource_type}

服务器为每个二进制提供这些资源类型:

  • triage_summary: 来自 BinaryNinja Triage 视图的基本信息
  • imports: 导入符号/函数字典
  • exports: 导出符号/函数字典
  • segments: 内存段列表
  • sections: 二进制部分列表
  • strings: 在二进制中找到的字符串列表
  • functions: 函数列表
  • data_variables: 数据变量列表

开发

uv 是此项目的推荐包管理工具。

将目录克隆到 Binary Ninja 插件目录

git clone https://github.com/MCPPhalanx/binaryninja-mcp.git "${env:APPDATA}\Binary Ninja\plugins\MCPPhalanx_binaryninja_mcp"

设置 Python 环境

必须手动将 Binary Ninja API 安装到虚拟环境中。

uv venv
uv sync --dev
# 安装 binaryninja API
binaryninja-mcp install-api
# 检查 API 是否正确安装
uv run python -c 'import binaryninja as bn; assert bn._init_plugins() is None; assert bn.core_ui_enabled() is not None; print("BN API check PASSED!!")'

为开发设置 MCP 客户端

对于像 Claude Desktop 这样的具有 stdio 传输的 MCP 客户端,更改工作目录到开发文件夹。

{
  "mcpServers": {
    "binaryninja": {
      "command": "uv",
      "args": [
        "--directory",
        "C:/path/to/binaryninja-mcp",
        "run",
        "binaryninja-mcp",
        "client"
      ]
    }
  }
}

启用 SSE 的 MCP 客户端可以使用以下方式连接:http://localhost:7000/sse

构建

uv build

测试

pytest
# 更新测试快照:
pytest --snapshot-update

版本更新

PyPI 包版本会根据 Binary Ninja 的 plugin.json(使用 package.json 格式)自动推导,以保持 BN 插件和 PyPI 包之间的版本一致性。

# 更新 alpha 版本
uvx hatch version a

# 更新发布版本
uvx hatch version minor,rc
uvx hatch version release

参见:版本控制 - Hatch

发布

uv publish

许可证

Apache 2.0