二进制分析MCP服务器

Binary Ninja的MCP服务器,提供二进制文件分析工具和资源访问功能。

  • by MCPPhalanx
  • Python
  • 本地部署
  • 51 星标
  • 更新于
在 GitHub 查看 MCPPhalanx/binaryninja-mcp

使用说明

另一款适用于Binary Ninja的MCP服务器

二进制Ninja的MCP(模型上下文协议)服务器

英语| 中文

演示

这 tests/binary/beleaf.elf 取自 CSAW'19:贝莱夫-噩梦. 您还可以从上面的链接中找到完整的文章!

…但为什么 另一个?

请参阅: 与现有插件的主要区别

安装

服务器安装程序

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

  1. 二进制Ninja UI插件:

    • 通过Binary Ninja的插件管理器安装插件
    • 加载第一个文件时,MCP服务器将自动启动。
      • 自动启动可通过以下方式配置 Settings - MCP Server - Auto Start
      • 监听端口可通过以下方式配置 Settings - MCP Server - Server port number
    • 所有打开的文件都暴露在单独的资源中,请参阅 可用资源 下节
  2. 二进制忍者无头模式:

    uvx binaryninja-mcp install-api  # only run once
    uvx binaryninja-mcp server <filename> [filename]...
    
    • filename 可以是任何二进制文件或BNDB,就像在UI模式下一样,全部打开 文件可供MCP客户端使用。
    • 服务器在默认端口7000上运行
    • 使用 --port 标记以指定其他端口

MCP客户端设置

  1. 克劳德桌面(stdio中继客户端):配置客户端以通过连接 使用内置中继的stdio传输。

    {
      "mcpServers": {
        "binaryninja": {
          "command": "uvx",
          "args": ["binaryninja-mcp", "client"]
        }
      }
    }
    
  2. 樱桃工作室:

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

添加 --port 12345 如果您想运行,请同时运行服务器和客户端命令行 MCP服务器的端口不是默认端口。

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:数据变量列表

发展

紫外线 是推荐的包管理工具 对于这个项目。

将目录克隆到二进制Ninja插件目录

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

设置Python环境

二进制Ninjaneneneba API必须手动安装到virtualenv中。

uv venv
uv sync --dev
# install binaryninja API
binaryninja-mcp install-api
# check API is correctly installed
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
# To update test snapshots:
pytest --snapshot-update

版本颠簸

PyPI包版本是从Binary Ninja的 plugin.json (使用package.json格式),保持版本一致性 在BN插件和PyPI包之间。

# bump alpha version
uvx hatch version a

# bump release version
uvx hatch version minor,rc
uvx hatch version release

请参阅: 版本控制-Hatch

发布

uv publish

许可证

Apache 2.0