symgraph/BinAssist

GitHub: symgraph/BinAssist

一款集成大语言模型的 Binary Ninja 插件,通过智能函数分析、语义图谱、污点分析和自主代理等能力,全面提升逆向工程与漏洞挖掘效率。

Stars: 52 | Forks: 6

# BinAssist 作者:**Jason Tang** _一款全面的基于 LLM 的 Binary Ninja 插件,用于智能二进制分析和逆向工程。_ ## 描述 BinAssist 是一款高级 LLM 插件,旨在通过智能自动化增强二进制分析和逆向工程工作流程。它利用本地和远程 LLM 能力,在整个二进制分析过程中提供上下文感知的辅助。它通过其 MCP 客户端和 [BinAssistMCP](https://github.com/jtang613/BinAssistMCP) 等 MCP 服务器支持完全代理式的逆向工程。 该插件支持任何 OpenAI v1 兼容或 Anthropic API,使其兼容流行的 LLM 提供商,包括 Ollama、LM Studio、Open-WebUI、OpenAI、Anthropic、AWS Bedrock(通过 LiteLLM)等。 **推荐模型:** - **具备推理支持**:Claude Sonnet 4+、OpenAI GPT-5+、GPT-OSS(支持用于复杂分析的扩展思考) - **通用目的**:DeepSeek、基于 LLaMA 的代码模型、Claude Sonnet 3.5、GPT-4 ## 核心功能 ### Explain Tab (解释标签页) - **函数分析**:对所有 IL 层级(LLIL、MLIL、HLIL)的函数进行全面分析 - **指令分析**:详细解释单个指令及其用途 - **上下文感知**:在函数级别存储响应,便于轻松跟踪 - **编辑响应**:根据需要调整响应并保存以供以后使用 ### Query Tab (查询标签页) - **交互式 LLM 聊天**:直接与 LLM 对话的界面 - **ReAct Agent**:使用 ReAct(Reasoning + Acting)框架进行自主多步推理和分析 - 具有反思和自我修正的迭代式问题解决 - 通过 MCP 自动选择和执行工具 - 透明的逐步推理追踪 - 最多 15 次迭代,支持智能终止 - **扩展思考**:支持在兼容模型上控制推理力度 - 可配置的思考深度(无、低、中、高) - 兼容 Claude Sonnet 4+、OpenAI o1/o3/gpt-5 和 gpt-oss - 提高复杂逆向工程任务的分析质量 - **二进制上下文**:在查询中自动包含相关的二进制信息 - **灵活提示**:支持自定义查询和分析请求 - **流式响应**:支持取消的实时响应生成 ### Actions Tab (操作标签页) - **智能建议**:LLM 驱动的改进二进制分析的建议 - **四种操作类型**: - **重命名函数**:建议具有语义意义的函数名称 - **重命名变量**:根据用法提议描述性的变量名称 - **重修改变量类型**:推荐适合变量的数据类型 - **自动创建结构体**:从数据模式生成结构体定义 - **置信度评分**:每个建议都包含置信度指标 (0.0-1.0) - **选择性应用**:通过交互式 UI 选择要应用的建议 - **状态跟踪**:关于操作应用成功/失败的实时反馈 - **基于工具的架构**:使用原生 LLM 工具调用提供精确建议 ### Semantic Graph Tab (语义图标签页) - **GraphRAG 架构**:用于二进制分析的基于图的检索增强生成 - **重建二进制索引**:构建具有调用关系的所有函数的语义图 - **语义分析**:LLM 驱动的函数总结和分类 - 从函数名称和行为自动推断用途 - 安全标志检测(网络、文件 I/O、加密等) - 活动分析和风险评估 - **安全分析**:用于漏洞检测的污点分析 - 源点到汇点路径查找(例如 `recv` → `strcpy`) - 自动检测危险的 API 使用模式 - 创建 TAINT_FLOWS_TO 和 VULNERABLE_VIA 边 - **社区检测**:使用标签传播算法进行函数聚类 - 根据调用关系对相关函数进行分组 - 自动推断模块/用途(网络 I/O、加密、文件操作等) - 在 ReIndex 完成后自动运行 - **可视化图形视图**:函数关系的交互式可视化 - **全文搜索**:基于 FTS5 的函数名称和摘要搜索 - **查询工具**:供 LLM 查询语义图的 MCP 暴露工具 ### 高级能力 - **ReAct 自主 Agent**:用于多步分析的 ReAct 框架的完整实现 - **扩展思考/推理力度**:用于更深入分析的提供商无关的推理控制 - Anthropic:具有可配置 token 预算(2K-25K tokens)的扩展思考 - OpenAI:用于 o1/o3/gpt-5 模型的推理力度级别 - Ollama:对兼容模型 的原生思考参数支持 - **函数调用**:LLM 可以直接与 Binary Ninja API 交互以导航和修改分析 - **MCP 集成**:支持模型上下文协议,用于可扩展的工具集成 - **RLHF 数据集生成**:收集交互数据以启用模型微调 - **RAG 增强**:使用相关文档和上下文增强查询 - **异步处理**:具有后台 LLM 处理的非阻塞 UI - **流式支持**:具有适当取消功能的实时响应生成 ### 配置与设置 - **灵活的 API 配置**:支持多个 LLM 提供商和端点 - **模型选择**:从可用模型中选择以执行不同的分析任务 - **推理力度控制**:特定会话的思考深度配置 - 可按查询或在设置标签页中全局调整 - 四个级别:无(标准)、低(~2K tokens)、中(~10K)、高(~25K) - 更高级别的成本和延迟警告 - **Token 限制**:可配置的最大 token 数,用于成本和性能优化 - **数据库管理**:内置 RLHF 和 RAG 数据库配置 - **线程安全**:针对 Binary Ninja 线程要求的适当异步处理 ## 未来路线图 ### 计划功能 - **模型微调**:利用收集的 RLHF 数据进行专门的模型训练 - **协作功能**:在团队之间共享分析见解和建议 - **层级社区**:用于大型二进制文件的多级社区检测 ### 研究领域 - **特定领域模型**:针对特定二进制类型的微调模型 - **代码生成**:自动化漏洞利用开发和补丁建议 - **增强的漏洞检测**:具有数据流跟踪的扩展污点分析 - **性能优化**:提高建议的准确性和速度 ## 快速入门指南 ### 1. 安装 Windows 用户应从这里开始:[BinAssist on Windows](docs/binassist-on-windows.md) ``` # 从 plugin 目录安装依赖 pip install -r requirements.txt ``` ### 2. 配置 1. 在 Binary Ninja 中打开 **Settings → BinAssist** 2. 配置您的 LLM 提供商: - **API Host**:指向您首选的 API 端点(例如 Ollama 使用 `http://localhost:11434`) - **API Key**:如果需要,设置认证密钥 - **Model**:选择您首选的模型(例如 `gpt-oss:20b`、`claude-sonnet-4-5`、`gpt-5.2-codex`) 3. 设置 RLHF 和 RAG 功能的数据库路径 4. 根据您的需求调整 token 限制 5. 在设置标签页中为支持扩展思考的模型配置 **Reasoning Effort** ### 3. 使用 1. 在 Binary Ninja 中加载二进制文件 2. 点击侧边栏中的 **🤖 机器人图标** 以打开 BinAssist 3. 根据您的分析需求在不同的标签页之间导航: - **Explain**:分析函数和指令 - **Query**:与 LLM 进行交互式聊天 - **Actions**:获取智能改进建议 - **Semantic Graph**:构建和探索二进制文件的语义图 - **RAG**:管理外部文档以提供上下文 ### 4. 工作流程示例 **函数分析:** 1. 在 Binary Ninja 中导航到一个函数 2. 切换到 **Explain** 标签页 3. 点击 **"Explain Function"** 进行全面分析 **获取建议:** 1. 转到 **Actions** 标签页 2. 选择所需的操作类型(重命名函数等) 3. 点击 **"Analyse"** 获取 LLM 驱动的建议 4. 查看置信度评分并应用选定的操作 **交互式查询:** 1. 使用 **Query** 标签页进行自由形式的问题提问 2. 询问有关特定函数、算法或分析技术的问题 3. LLM 拥有您当前二进制文件的完整上下文 **代理式分析:** 1. 在 Query 标签页中启用 **Agentic** 模式 2. 启用 **MCP** 以提供自主探索工具 3. 提出复杂问题,如“这个二进制文件做什么?”或“查找安全漏洞” 4. 观察 Agent 如何自主地: - 反编译和分析函数 - 跟踪交叉引用 - 通过迭代推理建立理解 - 提供带有逐步追踪的全面分析 **语义图分析:** 1. 转到 **Semantic Graph** 标签页 2. 点击 **"ReIndex Binary"** 构建函数图 - 索引完成后会自动运行社区检测 3. 使用 **"Semantic Analysis"** 获取 LLM 驱动的函数摘要 4. 运行 **"Security Analysis"** 查找易受攻击的源点→汇点路径 5. 探索 **Visual Graph** 以查看函数关系 6. 使用 **Search** 按名称或摘要内容查找函数 ## 截图 ![Screenshot](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/951cb038da150138.png) ![Screenshots](/res/screenshots.gif) ## 主页 https://github.com/jtang613/BinAssist ## 技术架构 ### 设计模式 - **Model-View-Controller (MVC)**:所有标签页之间清晰的关注点分离 - **面向服务的架构**:用于不同分析任务的模块化服务 - **观察者模式**:用于响应式 UI 的 Qt 信号槽通信 - **Async/Await**:具有适当线程管理的非阻塞操作 ### 关键组件 **Controllers (控制器):** - `ExplainController`:管理函数和指令分析 - `QueryController`:处理交互式 LLM 对话 - `ActionsController`:协调智能建议生成 - `SemanticGraphController`:编排 GraphRAG 索引和分析 **Services (服务):** - `BinaryContextService`:提取和格式化二进制信息 - `ActionsService`:验证并应用代码改进 - `RLHFService`:管理训练数据收集 - `RAGService`:处理文档检索和上下文增强 - `GraphRAGService`:管理语义图索引和查询 - `GraphStore`:SQLite 支持的图节点和边存储 - `CommunityDetector`:用于函数聚类的标签传播算法 - `TaintAnalyzer`:源点到汇点的漏洞路径检测 **Threading (线程):** - `ExplainLLMThread`:用于解释的后台处理 - `QueryLLMThread`:具有流式传输的异步聊天处理 - `ActionsLLMThread`:用于建议生成的 LLM 工具调用 - `ReActOrchestratorThread`:自主多步 agent 执行 **工具与集成:** - **MCP 工具**:用于精确操作的原生 LLM 工具调用 - **Binary Ninja API**:与分析引擎直接集成 - **OpenAI 兼容性**:适用于任何 OpenAI v1 兼容端点 ## 安装与兼容性 ### 系统要求 - **Binary Ninja**:版本 4000 或更高 - **Python**:3.8+ 配合 Binary Ninja 的 Python 环境 - **内存**:建议 4GB+ 用于本地 LLM 使用 - **存储**:约 100MB 用于插件 + 取决于模型的存储 ### 平台支持 **Linux**(主要开发平台) - 经过充分测试和支持 - 推荐用于生产环境 **Windows** - 应该可以工作,但测试较少 - 请提交 Windows 特定的问题 **macOS** - 应该可以工作,但测试较少 - 请提交 macOS 特定的问题 ### LLM 提供商设置 **本地 LLM(推荐):** ``` # Ollama 设置 curl -fsSL https://ollama.ai/install.sh | sh # Pull 通用模型 ollama pull llama3.1:8b # 或 Pull 推理模型(推荐用于复杂分析) ollama pull gpt-oss:20b ollama serve # Runs on http://localhost:11434 ``` **其他兼容的提供商:** - **LM Studio**:用于本地模型的桌面 GUI - **Ollama**:高级本地 LLM 界面 CLI - **Open-WebUI**:高级本地 LLM 界面 GUI - **OpenAI API**:基于云(需要 API 密钥) - **Anthropic API**:基于云(需要 API 密钥) - **LiteLLM Proxy**:访问 AWS Bedrock、Azure 和 100 多个提供商 - **OpenRouter**:通过 API 访问多个模型 ### 安装步骤1. **安装依赖项**: cd /path/to/BinAssist pip install -r requirements.txt 2. **配置 Binary Ninja**: - 作为插件安装在 Binary Ninja 的插件目录中 - 或直接从开发目录运行 3. **设置 LLM 提供商**: - 配置您首选的提供商(见上方的 LLM 提供商设置) - 使用正确的 API 端点更新 BinAssist 设置 ## 依赖项 **所需的 Python 包:** ``` openai # OpenAI and LiteLLM provider API anthropic # Anthropic Claude API pysqlite3 # Database operations markdown # Documentation formatting httpx # HTTP client for API calls anyio>=4.6 # Async I/O support mcp # Model Context Protocol client whoosh # Full-text search for RAG documents aiohttp # OAuth clients ``` ## 许可证 本插件在 **MIT License** 下发布 - 详见 LICENSE 文件。 **最低 Binary Ninja 版本**:5000 **元数据版本**:2
标签:AI 辅助, Anthropic, Binary Ninja, Binary Ninja 插件, CIS基准, Claude, CVE检测, DAST, DLL 劫持, GPT, IL, LLM, LLM评估, MCP, Ollama, OpenAI, Petitpotam, RAG, ReAct Agent, TLS抓取, Unmanaged PE, Wayback Machine, 上下文感知, 中间语言, 二进制分析, 云安全运维, 云模型, 云资产清单, 人工智能, 内存规避, 反汇编, 大语言模型, 恶意软件分析, 插件, 服务枚举, 本地模型, 漏洞管理, 用户模式Hook绕过, 自动化分析, 跨站脚本, 软件安全, 逆向工具, 逆向工程