二进制分析导出工具

Binja-NO-MCP是一个用于将Binary Ninja的BinaryView导出为稳定磁盘树结构的工具,适用于AI IDE工作流程,支持多种中间语言导出和增量更新。

  • by Jeremiah-gdut
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Jeremiah-gdut/Binja-NO-MCP

使用说明

循环-NO-MCP

作者 耶利米

导出当前二进制Ninja BinaryView 将AI IDE工作流转换为稳定的磁盘树。

范围

当前UI工作流:

  • 仅导出从冻结的函数集的函数工件 bv.functions
  • 使导出程序保持只读
  • 在导出计划之前冻结已识别的功能集
  • 默认情况下,重新分析每个冻结的函数,并在分析完成后立即导出
  • 允许您在表单中手动选择输出目录
  • 支持完全替换导出或增量导出,仅重试现有快照中未完成的功能
  • 默认情况下导出原始HLIL线性视图文本
  • 在导出的线性HLIL/伪-C中保留当前分析视图中的地址注释(如果可用)
  • 允许您在UI中选择伪C/MLIL/MLIL SSA/LLIL作为可选导出
  • 将函数声明写入导出的HLIL标头中 .meta.json
  • 写入当前快照标头、启动条目和紧凑函数索引

输出布局

binja-no-mcp-export/
  meta/
    binary.json
    export_config.json
    failures.jsonl
    function_index.jsonl
    startup_entries.json
    sections.json
    segments.json
  functions/
    main.hlil.txt
    main.meta.json
  data/
    strings.jsonl
    data_vars.jsonl
    symbols.jsonl
  optional/
    pseudoc/
      main.pseudoc.c
    mlil/
      main.mlil.txt
    mlil_ssa/
      main.mlil_ssa.txt
    llil/
      main.llil.txt

UI使用

  1. 在Binary Ninja中打开示例,让分析状态完全稳定到您想要导出的状态。
  2. 跑 Plugins -> Export for AI.
  3. 在表单中,选择输出目录,然后选择完全导出(默认)或增量导出。
  4. 选择要导出的IL图层。

默认值:

  • 导出前重新分析:已启用
  • 增量导出:禁用(完全替换导出)
  • HLIL:已启用
  • 伪-C:已禁用
  • MLIL:已禁用
  • MLIL SSA:已禁用
  • LLIL:已禁用

通过默认配置启用:

  • *.meta.json
  • meta/function_index.jsonl
  • meta/startup_entries.json
  • meta/failures.jsonl
  • meta/binary.json
  • meta/export_config.json
  • meta/sections.json
  • meta/segments.json
  • data/strings.jsonl
  • data/data_vars.jsonl
  • data/symbols.jsonl

meta/binary.json 是快照标头。首先阅读它以了解模式、状态和函数计数。对于开放式程序分析,接下来读取启动条目并查询匹配的函数索引记录。用户指定的函数可以直接转到其索引记录;纯元数据问题可以直接转到标头后的相关元数据工件。完整导出将替换之前的快照。增量导出需要相同的目标快照,仅重用已标记为导出且存在所有选定工件的函数,并重试其他所有函数。

备注

  • 导出器从不添加函数、入口点、部分、符号或引用。
  • UI命令序列化 reanalyze current function -> analysis completion -> export current function.
  • run_export 本身不呼叫 update_analysis_and_wait().
  • 可选的伪C/MLIL/MLIL SSA/LLIL导出仅在表单中明确启用时生成。
  • 从应用了重定位的BinaryView读取启动数组。即使Binary Ninja没有地址的函数伪影,它们的非零插槽也会保持顺序和重复。
  • 函数工件文件名使用其经过净化的Binary Ninja函数名;未命名函数使用 sub_<offset>.
  • PrivateUsage上限按函数窗口进行评估:交叉跳过该函数,然后允许下一个函数运行。

开发说明

项目布局遵循要求的分割:

  • binja_no_mcp/config.py
  • binja_no_mcp/collectors/
  • binja_no_mcp/renderers/
  • binja_no_mcp/exporters/
  • binja_no_mcp/models/
  • binja_no_mcp/plugin.py

许可证

此插件发布于 MIT许可证.