🚀 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 文檔。
貢獻
- 分叉倉庫。
- 創建功能分支。
- 按照現有代碼風格進行更改。
- 使用多種二進制類型進行測試。
- 提交拉取請求。