二进制忍者码模式MCP
一种模型上下文协议(MCP)服务器 二进制忍者 通过代码执行实现LLM辅助的逆向工程。
概述
此插件实现 Anthropic的代码执行模式LLM不是访问典型的MCP“工具”,而是编写直接针对Binary Ninja的API执行的Python代码。这种方法(Cloudflare将其描述为“代码模式”)更具令牌效率,并在一次执行中实现更复杂的多步骤分析。
主要特点
- 编写直接针对Binary Ninja的API运行的Python
- 查询和修改二进制数据库
- 检查点/回滚、持久工作区文件和可重用的分析模式
- API密钥身份验证和一些代码验证的基本安全性
安装
方法1:插件管理器(推荐)
- 在Binary Ninja中,打开插件管理器(
Plugins > Manage Plugins) - 搜索
Code Mode MCP或binja_codemode_mcp - 点击
Install - 重新启动二进制Ninja
安装后,插件将位于社区中 插件 文件夹:
# Linux
~/.binaryninja/plugins/repositories/community/plugins/akrutsinger_binja_codemode_mcp/
# macOS
~/Library/Application Support/Binary Ninja/plugins/repositories/community/plugins/akrutsinger_binja_codemode_mcp/
# Windows
%APPDATA%\Binary Ninja\plugins\repositories\community\plugins\akrutsinger_binja_codemode_mcp\方法2:手动安装
克隆或下载此存储库并复制到您的Binary Ninja 插件 文件夹:
# Linux
cp -r plugin/ ~/.binaryninja/plugins/binja_codemode_mcp/
# macOS
cp -r plugin/ ~/Library/Application\ Support/Binary\ Ninja/plugins/binja_codemode_mcp/
# Windows
copy plugin\ %APPDATA%\Binary Ninja\plugins\binja_codemode_mcp\MCP客户端配置
配置您的MCP客户端以与插件通信。通往 mcp_bridge.py 这取决于您的安装方法。
用于插件管理器安装
泽德 (Agent Panel > ... > Add Custom Server...):
{
/// The name of your MCP server
"binja-codemode-mcp": {
/// The command which runs the MCP server
"command": "python3",
/// The arguments to pass to the MCP server
"args": ["~/.binaryninja/plugins/repositories/community/plugins/akrutsinger_binja_codemode_mcp/bridge/mcp_bridge.py"],
/// The environment variables to set
"env": {
"BINJA_MCP_URL": "http://127.0.0.1:42069",
"BINJA_MCP_KEY": "binja-codemode-local"
}
}
}克劳德桌面版 (Settings > Developer > Edit Config):
{
"mcpServers": {
"binja-codemode-mcp": {
"command": "python3",
"args": ["~/Library/Application Support/Binary Ninja/plugins/repositories/community/plugins/akrutsinger_binja_codemode_mcp/bridge/mcp_bridge.py"],
"env": {
"BINJA_MCP_URL": "http://127.0.0.1:42069",
"BINJA_MCP_KEY": "binja-codemode-local"
}
}
}
}注: 使用绝对路径。替换 ~ 如果需要,可以使用您的主目录路径,并根据您的操作系统进行调整。
用于手动安装
请改用以下路径:
- Linux:
~/.binaryninja/plugins/binja_codemode_mcp/bridge/mcp_bridge.py - macOS:
~/Library/Application Support/Binary Ninja/plugins/binja_codemode_mcp/bridge/mcp_bridge.py - 窗户:
%APPDATA%\Binary Ninja\plugins\binja_codemode_mcp\bridge\mcp_bridge.py
自定义API密钥(可选)
若要使用自定义API密钥而不是默认的API密钥,请创建 ~/.binaryninja/codemode_mcp/config.json:
{
"api_key": "your-custom-key"
}然后更新您的MCP客户端配置,以在中使用相同的密钥 BINJA_MCP_KEY.
日志记录配置(可选)
集 BINJA_MCP_LOG_LEVEL 用于控制日志输出的环境变量(stderr):
# Options: DEBUG, INFO (default), WARNING, ERROR, CRITICAL
export BINJA_MCP_LOG_LEVEL=DEBUG或者添加到您的MCP客户端配置中:
"env": {
"BINJA_MCP_URL": "http://127.0.0.1:42069",
"BINJA_MCP_KEY": "binja-codemode-local",
"BINJA_MCP_LOG_LEVEL": "DEBUG"
}用法
- 打开Binary Ninja并加载二进制文件
- 启动服务器:
Plugins > MCP Code Mode > Start Server - 在您的MCP客户端(Claude、Zed等)中,开始提示!
示例提示
"List all functions that reference memcpy and check if they validate buffer sizes"
"Decompile main() and identify potential security issues"
"Create a checkpoint, then rename all sub_* functions based on their behavior"
"Find and categhorize all string references by type (URL, file path, error message, etc.)"
"Analyze the binary's attack surface by examining input validation in network-facing functions"API概述
LLM编写的Python代码可以访问 binja 使用以下方法创建对象:
查询
二进制信息
binja.get_binary_status()-二进制元数据binja.list_functions()-所有功能binja.analyze_function_batch()-批量功能分析binja.list_imports()-导入符号binja.list_exports()-导出符号binja.list_segments()-内存段binja.list_classes()-课程binja.list_namespaces()-命名空间binja.list_data_items()-数据项
代码分析
binja.decompile()-获取伪代码binja.get_assembly()-进行拆卸binja.get_basic_blocks()-基本功能信息
交叉引用
binja.get_xrefs_to()-查找来电者binja.get_function_calls()-查找来电者binja.get_data_xrefs_to()-地址的数据参考binja.get_data_xrefs_from()-来自地址的数据引用
数据读取
binja.read_bytes()-读取原始字节binja.read_string()-读取字符串binja.get_string_at()-获取字符串信息binja.get_data_var_at()-获取数据变量信息binja.list_strings()-列出所有字符串
搜索和查找
binja.find_bytes()-搜索字节模式binja.function_at()-按地址或名称获取函数binja.get_comment()-获取评论binja.get_function_comment()-获取函数注释binja.get_type()-获取用户定义的结构/类型信息
突变
重命名
binja.rename_function(func, name)-重命名功能binja.rename_data()-重命名数据binja.rename_variable(func, old, new)-重命名变量
打字
binja.retype_variable()-重新键入变量binja.define_type()-定义结构/类型binja.set_function_signature()-设置原型
评论
binja.set_comment()-添加评论binja.set_function_comment()-添加功能注释binja.delete_comment()-删除评论binja.delete_function_comment()-删除功能注释
工作区
文件持久性
binja.write_file()-保存到工作区binja.read_file()-从工作区读取binja.list_files()-列出工作区文件binja.delete_file()-删除工作区
技能
可重用代码
binja.save_skill(name, code, desc)-保存可重用代码binja.load_skill(name)-加载技能binja.list_skills()-列出已保存的技能binja.delete_skill()-删除技能
帮手
binja.find_functions_calling_unsafe()-查找调用潜在不安全函数的函数binja.get_function_complexity()-获得圈复杂度
安全
一种基本的安全级别,旨在防止某些滥用:
- 仅本地主机绑定(127.0.0.1)
- 需要API密钥验证
- 简单的代码验证阻止了潜在的危险操作
- 30秒执行超时
注: 此插件确实执行任意Python代码。仅与受信任的MCP客户端和LLM一起使用。
许可证
MIT许可证-请参阅 许可证 了解详情。
