Heretek-RE/re-lief

GitHub: Heretek-RE/re-lief

一个通过 MCP 协议暴露 LIEF 能力的跨格式二进制分析服务器,无需安装任何系统工具即可解析 PE、ELF、MachO、DEX 等多种可执行文件格式。

Stars: 0 | Forks: 0

# re-lief 提供用于跨格式二进制分析的 [LIEF](https://lief-project.github.io/)(Library to Instrument Executable Formats)的 MCP server。通过单一、标准化的 API 处理 **PE, ELF, MachO, COFF, DEX, ART, OAT** 格式。 ## 为什么使用它 LIEF 是 `pefile` 的 Python 继任者 —— 包含相同的 PE 数据,并增加了对 ELF, MachO, DEX, ART 和 OAT 的支持。它还处理 DWARF/PDB 调试信息、ObjC 元数据、Dyld Shared Cache,并且(可选地)内置了反汇编器/汇编器。 该 server 是 RE-AI 插件的**基础**:它无需安装任何系统工具即可工作(不需要 rizin,不需要 gdb,不需要任何东西),是纯 Python 实现,并在进程内运行。 ## 工具 | 工具 | 功能描述 | |---|---| | `check_lief` | 健康检查 — 返回 LIEF 版本、支持的格式 | | `parse_binary` | 自动检测格式并返回标准化的 header + 高级结构 | | `get_sections` | 节区列表,包含权限 (R/W/X)、虚拟大小与原始大小对比、熵值 | | `get_imports_exports` | 符号级别的导入/导出表(按格式区分) | | `get_authenticode` | PE 签名详情 (Win) | | `get_overlay` | 追加在最后一个节区之后的数据 | | `list_dex_classes` | Android DEX 类列表 | | `list_dex_methods` | DEX 类的方法列表 | | `list_oat_art` | Android OAT/ART 方法列表 | | `disasm_capstone` | Capstone 反汇编(适用于任何 LIEF 解析的二进制文件) | | `extract_strings` | 具备节区感知能力的 ASCII + UTF-16LE 字符串提取 | | `categorize_strings` | 具备节区感知能力的 ASCII + UTF-16LE 字符串提取,根据 `data/drm-indicators.yaml::string_categories` 中的关键字类别进行分桶。它是 `extract_strings` 的超集。 | | `get_imphash` | PE 导入哈希(标准化导入表的 MD5) | | `normalize_for_diff` | 生成适合用于对比两个二进制文件的结构化快照 | ## 安装 该 server 是 RE-AI 插件的一部分。插件的 `install.sh` / `install.bat` 会在标准流程中将其一并安装。 如需独立安装: ``` pip install -e ./servers/re-lief ``` ## 运行 ``` re-lief # stdio transport (default for MCP) python -m re_lief # equivalent ``` ## 格式支持 LIEF 会自动检测格式并提供一个通用 API。大多数工具会根据格式返回对应的结果: - **PE** (`.exe`, `.dll`, `.sys`):完整的节区、导入/导出、imphash、Authenticode、资源、异常、TLS、调试信息 (PDB 路径) - **ELF**(Linux 二进制文件、.so、内核模块):节区、段(program headers)、动态符号、RELRO、BIND_NOW、NX、PIE、RPATH/RUNPATH、SONAME、动态库 - **MachO**(macOS/iOS 二进制文件、.dylib、frameworks):加载命令、段、LC_BUILD_VERSION、代码签名、dyld 信息、ObjC 元数据 - **DEX**(Android Dalvik):带有 FQN 的类列表、每个类的方法列表、字符串池 - **OAT/ART**(Android runtime):带有类/方法索引的方法列表、vdex 引用 - **COFF**(Windows 对象文件、EFI):节区、符号、重定位 ## pefile 的弃用 如果你熟悉 v1 版本的 `re-ai` repo,该 server **取代**了以前基于 pefile 的代码。字符串提取算法(ASCII + UTF-16LE)和 imphash 逻辑是从 `backend/analysis/native.py` 移植过来的;API 的其余部分是 LIEF 原生的,并且适用于所有格式。 ## 分类词汇表 `categorize_strings` 在 MCP server 加载时,从 `data/drm-indicators.yaml::string_categories` 读取其 11 个关键字类别。 `anti_debug` 和 `hwid` 类别通过 `seed_from:` YAML 指针**继承**了它们的关键字列表,分别来自于 `drm-indicators.yaml::anti_debug_indicators.checks[].name` 以及 `hwid_apis.high_signal[].api` —— 当未来的 agent 向 `hwid_apis.high_signal` 添加新的 HWID API 时, 分类器会在下次重新加载时自动获取它。其他 9 个类别的关键字列表直接内联在 YAML 的 `string_categories.categories[].keywords` 下。 这使得分类器与目录 *幂等*:该 YAML 既是 `re-drm-fingerprint` 读取的指示器集合的单一事实来源, 也是分类器读取的关键字集合的单一事实来源。静态分析和字符串分析 都将给出一致的答案。 在处理大型二进制文件(>100 MB,例如由加密的 VM 字节码解释器包装的 Unity IL2CPP `GameAssembly.dll`)时,请传入 `skip_sections=[".idata", ".xtls", ".xpdata", ".udata", ".xdata", ".didata", ".ecode", ".00cfg"]` 来跳过加密的 VM 字节码区域。注意:在内置的 IL2CPP 目标样本上, 导入表字符串*存在*于这些节区中, 因此跳过它们会使分类器无法看到导入内容。在内存受限的运行环境中使用 `skip_sections`;若要保证完整性,请执行全节区遍历。
标签:LIEF, MCP服务器, Python, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 无后门, 逆向工具, 逆向工程, 静态分析