使用说明

项目简介

Binary Ninja MCP Server 是一个 MCP 服务器的实现,它基于 Binary Ninja 这一强大的逆向工程平台,通过 MCP 协议将 Binary Ninja 的二进制分析能力暴露出来。该服务器允许 LLM 客户端通过标准化的 MCP 接口,获取二进制文件的各种信息(如文件元数据、函数、字符串、反汇编代码等),并调用 Binary Ninja 的分析工具(如重命名符号、获取伪代码等)。这使得 LLM 能够理解和分析二进制程序,从而实现更高级的自动化分析任务,例如漏洞分析、恶意代码检测、逆向工程辅助等。

主要功能点

  • 资源 (Resources) 访问:
    • 提供二进制文件的 triage 摘要信息 (Triage Summary)。
    • 获取二进制文件的导入表 (Imports)、导出表 (Exports)。
    • 列出二进制文件的段 (Segments) 和节 (Sections)。
    • 提取二进制文件中的字符串 (Strings)。
    • 获取函数 (Functions) 列表及其基本信息。
    • 获取数据变量 (Data Variables) 列表及其信息。
  • 工具 (Tools) 调用:
    • 'rename_symbol': 重命名函数或数据变量的符号。
    • 'pseudo_c': 获取函数的伪 C 代码。
    • 'pseudo_rust': 获取函数的伪 Rust 代码 (如果 Binary Ninja 支持)。
    • 'high_level_il': 获取函数的高级中间语言 (HLIL)。
    • 'medium_level_il': 获取函数的中级中间语言 (MLIL)。
    • 'disassembly': 获取函数或指定地址范围的反汇编代码。
    • 'update_analysis_and_wait': 强制 Binary Ninja 重新分析二进制文件并等待完成。

安装步骤

  1. 安装 Binary Ninja: 确保您已安装 Binary Ninja 软件,并且拥有有效的许可证。
  2. 安装插件:
    • 打开 Binary Ninja。
    • 点击菜单 'Plugins -> Manage Plugins'。
    • 点击 '[+]' 按钮,选择 'binaryninja-mcp' 仓库的根目录作为插件目录添加。
    • 插件将会被自动加载。您可以在 'Plugins' 菜单下看到 'MCPServer' 菜单项。

服务器配置

MCP 客户端需要配置以下信息以连接到 Binary Ninja MCP Server。以下提供两种启动服务器的方式的配置示例:

配置示例 1: 使用 Binary Ninja 插件启动 (推荐)

这种方式最简单,服务器集成在 Binary Ninja 内部,无需额外命令行操作。

{
  "serverName": "BinaryNinjaMCP",
  "command": ["binaryninja"],
  "args": [],
  "capabilities": [
    "resources",
    "tools"
  ]
}

参数注释:

  • 'serverName': MCP 服务器的名称,可以自定义。
  • 'command': 启动服务器的命令,这里使用 'binaryninja',表示通过 Binary Ninja 插件启动。实际由插件在后台运行,客户端无需直接执行命令。
  • 'args': 启动参数,这里为空数组,因为插件在 Binary Ninja 内部运行,不需要额外的命令行参数。
  • 'capabilities': 声明服务器提供的能力,包括 'resources' 和 'tools'。

配置示例 2: 使用命令行 CLI 工具启动

这种方式需要在命令行中手动启动服务器,适用于希望独立运行服务器的场景。

首先,确保安装了项目依赖 (虽然仓库中没有明确 requirements.txt,但根据代码推测可能需要 'uvicorn', 'anyio', 'click', 'starlette', 'mcp' 等 Python 包,建议使用 'pip install -r requirements.txt' 安装,如果仓库提供了 requirements.txt 的话。如果仓库没有提供,可以尝试手动安装这些包)。

假设您已经将仓库克隆到本地,并且位于 '/path/to/binaryninja-mcp' 目录。

{
  "serverName": "BinaryNinjaMCP-CLI",
  "command": ["python"],
  "args": ["/path/to/binaryninja-mcp/src/binaryninja_mcp/cli.py", "server", "{binary_file_path}"],
  "capabilities": [
    "resources",
    "tools"
  ]
}

参数注释:

  • 'serverName': MCP 服务器的名称,可以自定义。

  • 'command': 启动服务器的命令,这里使用 'python'。

  • 'args': 启动参数,为一个字符串数组,依次为:

    • '/path/to/binaryninja-mcp/src/binaryninja_mcp/cli.py': 'cli.py' 脚本的绝对路径。
    • '"server"': 指定 'cli.py' 运行 'server' 子命令。
    • '"{binary_file_path}"': 占位符,需要替换为实际要分析的二进制文件路径。 MCP 客户端通常会提供机制让用户指定或动态替换这个占位符。
  • 'capabilities': 声明服务器提供的能力,包括 'resources' 和 'tools'。

注意: '/path/to/binaryninja-mcp' 和 '"{binary_file_path}"' 需要根据实际情况替换为正确的路径。

基本使用方法

  1. 启动服务器:

    • 插件方式: 打开 Binary Ninja,加载要分析的二进制文件。如果启用了自动启动,服务器应该会自动启动。否则,可以通过 'Plugins -> MCPServer -> Start/Stop Server' 菜单手动启动。
    • CLI 方式: 在命令行中,导航到仓库目录,并执行类似 'python src/binaryninja_mcp/cli.py server <二进制文件路径>' 的命令来启动服务器。
  2. 配置 MCP 客户端: 根据您使用的 MCP 客户端的文档,配置服务器连接信息,选择上述 服务器配置 中适合您的启动方式的配置信息填入客户端。

  3. 使用 LLM 进行交互: 通过 MCP 客户端向 Binary Ninja MCP Server 发送 MCP 请求,例如:

    • 请求资源列表 ('listResources'),查看可用的资源 URI。
    • 请求读取特定资源 ('readResource'),例如获取 "triage_summary" 或 "functions" 等信息。
    • 调用工具 ('callTool'),例如调用 "pseudo_c" 工具获取函数的伪代码。
  4. 查看结果: MCP 客户端会接收服务器返回的 JSON-RPC 响应,并展示资源内容或工具执行结果。

通过以上步骤,您可以利用 Binary Ninja MCP Server 将 Binary Ninja 的强大分析能力集成到 LLM 工作流中,实现更智能化的二进制分析应用。

信息

分类

开发者工具