二进制分析服务

angr-mcp MCP Server 是一个提供二进制分析能力的服务,支持加载二进制文件、构建符号状态、引导执行和收集漏洞利用工件,适用于快速漏洞探索和分析。

  • by karimodm
  • Python
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 karimodm/angrMCP

使用说明

angr mcp mcp服务器

此项目实现了一个模型上下文协议(MCP)服务器,该服务器公开 核心angr二进制分析功能——加载二进制文件、构造符号 状态、指导执行和收获利用工件——通过一组 工具操作员。最初的重点是快速漏洞探索:分析师 可以加载目标,使其输入符号化,推动执行朝着有趣的方向发展 地址,并在感兴趣的路径出现后提取具体的见证输入 发现。

当前组件

  • angr_mcp/registry.py -内存注册表跟踪angr项目、状态、, 仿真管理器、钩子、缓存分析、警报日志和持久作业 元数据。
  • angr_mcp/server.py –MCP服务器入口点。它实现了以下处理程序 项目加载、符号状态创建、环境检测 (钩子和SimProcedures)、符号执行、断点风格监控、, 状态检查、结构化警报报告、作业持久性/管理, 约束求解、CFG恢复和反向切片。它还集成了 社区探索技术运来 awesome-angr/ExplorationTechniques.
  • angr_mcp/utils/ –二进制检查和状态突变助手由共享 MCP处理程序和测试(部分扫描器、文字交叉引用、, 寄存器/堆栈变异原语和符号句柄注册)。
  • tests/test_mcp_server.py –编译小型C二进制文件的集成测试 并对服务器进行端到端的操作(加载项目、设置符号stdin、运行 有针对性的搜索、解决约束、捕获监视的事件并执行 CFG/切片查询)。
  • tests/test_phase1_ctf.py –重建CTF的第一阶段回归套件 级别00-04仅通过MCP处理程序,断言谓词元数据, 注册/堆栈变异API以及恢复输入的本地重放。
  • tests/test_deep_call_partition.py –深度调用回归,构建一个 分支二进制文件,提取调用链,执行州预算保护,以及 演示了分块符号执行到达隐藏的目标函数。
  • tests/test_taint_analysis.py –格式化字符串污染回归 练习指针感知污染源,并验证通过以下方式触发的接收器 新的污染分析MCP处理程序。
  • pyproject.toml –最小配置启用 uv 管理本地 虚拟环境。
  • schemas/ –JSON模式草案2020-12为每个MCP处理程序定义 请求/响应对加上共享结构(警报、作业、UUID)。

环境设置

  1. 使用创建和激活虚拟环境 uv:

    UV_CACHE_DIR=.uv-cache uv venv .venv
    source .venv/bin/activate
    
  2. 将依赖项安装到环境中(angr和clairy从 PyPI):

    UV_CACHE_DIR=.uv-cache uv pip install --python .venv/bin/python claripy angr
    
  3. 运行集成测试:

    .venv/bin/python -m unittest discover tests
    

    第1阶段测试练习32位angr CTF二进制文件。如果你的主人缺少 32位运行库(/lib/ld-linux.so.2),套房将跳过 本机自动重放断言。

使用概述

实例化 AngrMCPServer 并以编程方式或通过您的 MCP传输:

  1. load_project –加载二进制文件并接收 project_id.
  2. setup_symbolic_context –创建条目/调用/空白/完整初始化状态 可选的符号stdin/memory/寄存器(状态ID在 注册表)。
  3. instrument_environment –在上安装SimProcedures或自定义挂钩 执行前的地址/符号。
  4. run_symbolic_search –步进或探索状态,可选附加 覆盖、循环耗尽等探索技术。处理程序 为每个存储返回新的状态ID,发出结构化警报记录,以及 注册/更新稍后可以恢复的作业句柄。使用可选 state_budget 参数检测和短路状态爆炸;这 run-metadata报告每个存储的计数,以便客户端可以调整块大小。
  5. run_taint_analysis –根据记录驾驶供应商提供的污染发动机 国家。定义污点 来源 (内存/寄存器或指针感知监视器), 指定 水槽 在目标基本块地址处,并接收结构化命中 当污染到达接收器时,记录加上状态快照。
  6. monitor_for_vulns –记录检查断点(例如。, mem_write) 因此,会记录与漏洞利用相关的操作(警报与原始操作一起累积 事件日志)。
  7. inspect_state –获取寄存器、内存、约束集、记录 事件,并为任何存储状态生成警报。
  8. solve_constraints –向Claripy查询具体输入/范围 当前的限制。
  9. list_jobs, resume_job,以及 delete_job –管理持续模拟 作业(列出元数据、水合回内存或从注册表/磁盘中删除)。
  10. analyze_call_chain –计算函数之间的调用图路径太深 目标可以分解为可管理的勘探阶段。
  11. trace_dataflow –运行反向切片(可选使用DDG/CDG)以暴露 对所选目标很重要的依赖关系。

现状(2025年10月29日)

  • 核心MCP管道已到位,具有注册表支持的状态跟踪和 弹性执行(捕获错误并将其返回给客户端)。
  • 结构化警报现在突出显示不受约束的指令指针状态 以及可疑的内存写入,在运行时返回规范化的JSON对象 结果和状态检查有效载荷。
  • setup_symbolic_context 以及新 mutate_state 处理程序支持选项 预设、寄存器复制/注入、堆栈调整和符号句柄 用于后续约束求解的跟踪。
  • 谓词描述符(address, stdout_contains, stdout_not_contains) 现在开车 run_symbolic_search,谓词匹配记录在 将payload与base64编码的stdin/stdout流一起运行。
  • analyze_call_chain 恢复函数之间的调用图路径(使用 缓存CFG),因此可以将深层目标分块为可控的勘探 部分。
  • run_symbolic_search 接受a state_budget 上限和详细报告 当接近或超过极限时,状态压力遥测,允许 前端在求解器爆炸之前缩小搜索窗口。
  • 新的 run_taint_analysis 处理程序将angr污染引擎包装为 指针感知污染源和接收器级别污染检查,返回结构化 点击元数据和新的状态快照以进行下游分析。
  • 辅助工具 angr_mcp/utils/ 暴露剖面扫描仪和文字 用于自动化抗CTF水平分析的交叉引用。
  • 通过以下方式创造就业机会 run_symbolic_search 可以恢复、枚举和 坚持到 .mcp_jobs/<job_id>.json;持续的工作可以重新补充水分 跨流程通过 resume_job.
  • JSON模式 schemas/ 描述每个处理程序请求/响应,启用 下游客户端(例如GhidraMCP)验证有效载荷。
  • 基本勘探技术 awesome-angr 捆剩余 可动态加载。
  • 符号stdin设置初始化默认值 SimPacketsStream 内容 以避免与angr的POSIX插件的兼容性问题。
  • 集成测试端到端验证面向漏洞利用的工作流(需要 安装 claripy 和 angr 通过 uv pip).补充第1阶段CTF 测试断言00-04级别的确定性解决方案 tests/test_phase1_ctf.py深度通话回归 (tests/test_deep_call_partition.py)强调呼叫链处理程序, 国家预算反馈,以及非常深入所需的分块符号执行 目标。新的污点回归(tests/test_taint_analysis.py)证明了这一点 来自符号性stdin的污染可以追踪到易受攻击的 printf 电话。

第一阶段angr_ctf报道亮点

  • 00/01级: .rodata 令牌提取和文字交叉引用提要 证明具体解决方案并确保避免站点的谓词描述符 保持不变。
  • 级别02:纯基于stdout的谓词演示谓词日志记录, 元数据持久性和用于repro的流式stdout捕获。
  • 级别03:空白状态创建、符号寄存器注入和求解器 handle查询恢复本机回放的整数元组。
  • 级别04:堆栈对齐助手和符号推送操作反映了 本机堆栈帧,不触发警报检测器,验证堆栈 通过处理程序管道实现完整性。

计划的下一步

  • 扩展警报覆盖范围以包括额外的漏洞利用启发式(例如。, 无约束堆栈枢轴、自修改代码)和可配置阈值。
  • 添加后台作业执行和进度轮询,以便长时间运行搜索 可以在客户端通过作业元数据轮询时异步继续。
  • 直接从类型注释生成JSON模式,以避免漂移和 在以下情况下将模式验证集成到测试套件中 jsonschema 是 可用。
  • 通过以下方式显示更丰富的元数据(例如钩子注册表、缓存分析) 专用查询端点以辅助前端。

代理人和人类的贡献笔记

  • 使用 uv 用于包装管理;保持 .venv 环境与同步 README 说明。
  • 保留文档(此文件和 AGENTS.md)随着每次更改而更新,因此 未来的课程将了解当前的上下文、约束和未解决的问题。
  • 更喜欢 apply_patch 用于手动编辑。避免使用破坏性的git命令,除非 明确批准。