TyrusRC/chimera

GitHub: TyrusRC/chimera

Chimera 是一个统一的跨平台二进制逆向工程平台,将多种主流反编译与分析工具封装在单一的 CLI、HTTP API 和 Docker 流水线中,支持桌面与移动端六大二进制格式。

Stars: 1 | Forks: 1

# Chimera [![许可证: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![Python](https://img.shields.io/badge/Python-3.12%2B-3776AB.svg?logo=python&logoColor=white)](pyproject.toml) [![平台](https://img.shields.io/badge/platform-PE%20%7C%20ELF%20%7C%20Mach--O%20%7C%20.NET%20%7C%20Android%20%7C%20iOS-success.svg)](#features) [![Docker](https://img.shields.io/badge/Docker-ready-2496ED.svg?logo=docker&logoColor=white)](Dockerfile) [![MCP](https://img.shields.io/badge/MCP-compatible-5A4FCF.svg)](src/chimera/mcp_server.py) [![状态](https://img.shields.io/badge/status-alpha-orange.svg)](#status) Chimera 是一个统一的封装工具,集成了 Ghidra、Radare2、jadx、Frida、capa、YARA 以及不断增长的特定平台工具集。它通过一个 CLI、一个项目存储和一个 HTTP API 分析 Windows PE / .NET 程序集、Linux ELF、macOS Mach-O、Android APK 和 iOS IPA 文件——无需 LLM——并暴露一个可选的 MCP 服务器,以便 Claude 或任何兼容的模型可以驱动该流水线。 静态工作流(初步分析 → 反编译 → 标注 → 修补 → 导出)在与移动端流水线相同的 Docker 镜像中以无头模式运行。桌面端增加了:一个等同于 FLIRT 的库函数匹配器、一个带有替换式后处理的 r2 / Ghidra 并排反编译器、持久的重命名 / 注释 / 类型签名、带有反调试方案的字节级修补、一个 UPX 自动脱壳器、加壳检测(YARA + 节名称 + 熵值),以及一个 gdb 符号桥接。 可选的 2024-2026 研究附加组件使其更加完善:由 Anthropic 支持的 AI 助手(LLM4Decompile V2 风格的反编译器优化、SymGen 风格的批量生成式命名、Sidekick 风格的对抗性重命名验证、DecLLM 重编译门控、Idioms / NDSS 2026 优化引擎),VarBERT 变量名恢复模型(S&P 2024),EMBER 2024 恶意软件分类器,B(l)utter Flutter / Dart AOT 提取器,用于 React Native HBC 包的 hermes-decomp,用于 Rust 二进制文件的 Oxidizer (angr),Mergen VMProtect / Themida 去虚拟化阶段,带有 BinDiff CSV 导出的 KEENHash + REVDECODE 相似性后端,用于叙述性发现的 Sidekick 风格笔记本,oatdump2binexport Android 原生相似性,以及 msynth + PseudoFix 反编译后处理器——全部为可选,均不在默认的 `analyze` 热路径上。 ## 功能 ### 跨平台二进制分析 - **六种格式,一个流水线** — Windows PE / PE32+ / .NET 程序集,Linux ELF(静态或动态链接),macOS Mach-O,Android APK / AAB / DEX / 分割包,iOS IPA / dylib。格式自动检测;正确的流水线会自动路由。 - **独立的 CLI,无需 AI** — `chimera analyze` 以无头模式运行完整流水线,并将项目写入磁盘。 - **跨层调用图** — Java / Kotlin ↔ JNI ↔ 原生 ARM64,统一到一个模型中。 ### 桌面 / 原生 RE - **多反编译器选择器** — 通过 API 或 Web UI 按功能请求 r2 或 Ghidra(或两者并排);输出经过后处理(DAT_/PTR_/FUN_/iVar/uVar → 有类型的局部变量,Itanium C++ 名称反混淆,魔术常量标记)。 - **等同于 FLIRT 的库命名** — 掩码字节签名包包含 176 个前缀,涵盖 libc / libssl / libcrypto / libz;根据 `arch + format` 进行匹配验证,因此 x86_64 ELF 和 PE32+ 不会交叉污染。静态链接的剥离二进制文件会自动恢复函数名称。 - **持久标注** — 重命名函数,添加逐地址注释,设置 C 风格类型签名,覆盖分类。按二进制文件存储在 `overlay.json` 中(原子临时文件 + 重命名),并在每次加载时应用到实时模型。 - **字节级修补** — `BinaryPatcher` 解析 PE(节表)、ELF (PT_LOAD) 和 Mach-O (LC_SEGMENT_64) 的 VA→文件偏移量。PE 校验和自动重新计算。提供五种方案类型:write-bytes、nop-range、force-jump-taken(验证 0x70–0x7F 短条件跳转)、find-import-and-stub(PE IAT 遍历)、find-elf-plt-and-stub(.rela.plt / .dynsym)。内置三种反调试绕过方案。 - **加壳检测 + UPX 自动脱壳** — YARA 优先(UPX / ASPack / VMProtect / Themida / MPRESS / PECompact / Enigma / MEW / kkrunchy),节名称回退(UPX0, .vmpN, .themida, .aspack, …),对可执行节进行逐节字节熵启发式分析。`chimera unpack` 按字节完全一致地还原 UPX,并为开源脱壳器无法完美处理的 VM 保护器提供手动指南。 - **gdb 桥接** — `chimera gdb-export` 写入一个由 `$convenience` 变量 + `chimera-bp` 用户命令组成的 `.gdbinit`,以便 `gdb` 可以在您的重命名所引用的同一地址空间内执行。 - **PE / ELF 导入评分** — PEStudio 风格的分类(进程注入、反调试、持久化、网络、加密、规避)。Linux:持久化字符串扫描(cron / systemd / `LD_PRELOAD` / init.d)、syscall 评分、XOR 字符串启发式分析。 - **.NET 程序集** — 当 `ilspycmd` 位于 PATH 上时,按类型进行 ILSpy 反编译;对于混合模式(C++/CLI),使用 Ghidra 回退。 ### 移动端 RE - **框架检测** — React Native (Hermes / JSC)、Flutter、Unity IL2CPP、Xamarin、Cordova / Capacitor。 - **Manifest + NSC 加固** — `chimera manifest app.apk` 报告 `android:debuggable`、无规则的 `allowBackup`、无权限的导出组件、明文流量标志、`network_security_config.xml` 问题(明文基础/域配置,用户 CA 信任)。每项发现都注明了文件和行号。 - **保护绕过** — root / 越狱 / Frida / 调试器 / 加壳检测,内置绕过脚本。(运行 `frida-server` 的设备必须越狱 / root;`frida-gadget` 在普通设备上即可正常使用。) - **动态附加** — `chimera attach --pid `(本地)或 `--target --device `(移动端),支持多重绕过预加载、消息排空、交互式 REPL。 ### 共享工作流 - **静态 + 动态** — Semgrep + YARA(或可选的 YARA-X)+ capa 用于静态分析;Frida 用于运行时确认。 - **二进制对比差异** — `chimera diff ` 报告添加/删除的权限、导出的组件、SDK、原生库(带有 sha256)、manifest + NSC 发现(回归 / 解决)。 - **函数相似性差异(BinDiff 风格)** — `chimera diff-functions a.bin b.bin --threshold 0.85`(默认)通过操作码 shingled Jaccard 匹配函数,使用 `--heuristic multi` 结合 Jaccard + 调用图度数 + 基本块计数 + 助记符余弦相似度,并提供可插拔的后端 `--backend keenhash`(全二进制嵌入,KEENHash / ISSTA 2025)和 `--rerank revdecode`(对候选匹配项进行 Viterbi 重排序,USENIX Sec 2025)。`--export-bindiff out.csv` 为下游工具写入兼容 BinDiff 的 CSV。 - **报告** — JSON、HTML、Markdown、SARIF v2.1.0、CycloneDX 1.6 SBOM、MASVS 覆盖矩阵、CVSS 发现草案。 - **标注共享** — `chimera overlay export -o overlay.json` 和 `chimera overlay import -i overlay.json --merge|--replace` 在分析师之间移动重命名 / 注释 / 类型。Schema 包含二进制文件的 sha256,因此针对不同二进制文件导入时会发出警告,而不是静默破坏地址。导出的 payload 还携带了项目笔记本。 - **笔记本** — `chimera notes add --title T --body B --evidence 0xADDR ...` / `notes list [--tag T]` / `notes rm ID`,以及 `/api/projects/{id}/notes`。带有指向地址或行的证据链接的 Sidekick 风格叙述性发现。存储在项目 overlay 中;通过导出/导入进行往返。 - **Web UI + TUI** — 基于 FastAPI 的 UI,带有 Monaco 编辑器(右键重命名 / 注释 / 设置类型,配置 API 密钥后还有 AI 解释 / AI 重命名按钮),以及用于设备交互的 Textual TUI。 - **MCP 服务器** — 向任何兼容 MCP 的 LLM 客户端公开的高级分析工具。 - **OWASP MASVS** — 发现标记有 MASVS 类别。 ### AI 辅助 RE(可选,手动开启) - **LLM 支持的解释 / 重命名 / 注释** — `chimera ai explain ` 和 `/api/projects/{id}/ai/{explain,rename,comment}`。Web UI 在 CodeView 标题栏中暴露了“AI 解释”+“AI 重命名”按钮(未配置密钥时隐藏)。 - **LLM4Decompile-V2 风格的优化** — `chimera ai refine-decomp --backend ghidra` 要求模型清理 Ghidra 伪 C 代码(重命名 `iVar1`/`FUN_xxxxx`,收紧控制流)**且不虚构语义**。严格预览;从不写入 overlay。 - **可插拔的优化引擎** — `chimera ai engines` 列出已注册的引擎;当存在 `CHIMERA_IDIOMS_CHECKPOINT` 和 `transformers` 时,`--engine idioms` 会切换到 Idioms 检查点(Dramko 等人,NDSS 2026)。未来的 jTrans-refine / FidelityGPT / SK2Decompile 可以无需更改 API 即可插入。 - **DecLLM 重编译门控** — `chimera ai refine-decomp ... --recompile-check` 将优化后的 C 代码通过 `gcc -fsyntax-only` 进行管道处理;如果失败,模型将获得一轮修复机会,包含字面编译器诊断信息。默认关闭。 - **MBA + PseudoFix 后处理** — `--postprocess` 应用 msynth 风格的混合布尔算术简化和 PseudoFix 风格(ASE 2025)的安全结构重写(将 `if (x) return a; return b;` 折叠为三元运算符,丢弃 `do {} while(0)` 包装器)。 - **REALTYPE 风格的评估工具** — `chimera ai eval-decomp dataset.jsonl --engine claude` 根据包含反编译代码与真实情况对比记录的 JSONL 对任何优化引擎进行评分:重编译率、标识符 Jaccard 相似度、结构体名称召回率。 - **SymGen 风格的批量生成式命名** — `chimera ai batch-rename --max 50 --threshold 0.7 --apply` 遍历看起来被剥离的函数(FUN_/sub_/fn_),将调用图邻居作为上下文输入,请求 `{name, confidence}` JSON,并选择性地将高置信度名称应用到 overlay。默认预览。 - **Sidekick 风格的对抗性重命名验证器** — `chimera ai batch-rename ... --verify` 发起第二次 LLM 调用,默认*反驳*建议的名称;即使使用 `--apply`,被反驳的名称也永远不会自动应用。 - **配置** — `ANTHROPIC_API_KEY` 环境变量启用此功能接口;`CHIMERA_AI_MODEL` 覆盖模型(默认为 `claude-sonnet-4-6`);仅使用 urllib 客户端,无 SDK 依赖。缺少密钥 → HTTP 503 及明确的消息;CLI 会打印出可操作的安装提示。 - **研究附加组件(额外)** — VarBERT 变量名恢复(`chimera varbert rename`,`pip install "chimera[varbert]"`),EMBER 2024 恶意软件分类器(`chimera classify `,`pip install "chimera[ml]"`),B(l)utter Flutter / Dart AOT 提取(`chimera flutter-extract -o out`,PATH 上需要外部 `blutter` 二进制文件或设置 `CHIMERA_BLUTTER_BIN`),用于 Hermes HBC 包的 hermes-decomp(`chimera hermes-decompile `,需要外部 `hermes-decomp` 二进制文件),通过 angr 进行 Oxidizer Rust 反编译(`chimera rust-decompile `,`pip install angr`),Mergen VMProtect / Themida 去虚拟化(`chimera vmp-devirt --start 0x…`,需要外部 `mergen` 二进制文件),oatdump2binexport Android 原生相似性(`chimera android-similarity a.apk b.apk`,需要 `dex2oat` + `oatdump2binexport` + `bindiff`)。 ## 桌面逆向工程 Chimera 提供了一个桌面 RE 工作流,镜像了 IDA Pro / Ghidra / Binary Ninja 的肌肉记忆,由与移动端流水线相同的 CLI 和相同的 HTTP API 驱动。 ### 您将获得的内容 | 工作流 | 如何执行 | | --------------------------------------------------------- | -------------------------------------------------------------------------------- | | 打开 PE / ELF / Mach-O / .NET 二进制文件,列出函数 | `chimera analyze ` | | 按函数选择反编译器(r2、Ghidra 或两者) | `GET /api/projects/{id}/functions/{addr}/decomp?backend=r2|ghidra|all` | | 重命名、注释、设置类型 — 跨会话持久化 | `POST /api/projects/{id}/annotations/{rename,comment,type,classify}` | | 自动命名静态链接的库函数 | Phase 5.5 (ELF) / Phase 6.5 (PE) 签名匹配器,在 `analyze` 期间运行 | | 修补二进制文件(原始字节、方案或 nop-range) | `chimera patch --addr 0x… --bytes 90909090` | | 绕过 `IsDebuggerPresent` / `CheckRemoteDebuggerPresent` / `ptrace` | `chimera patch --recipe pe-isdebuggerpresent-nop --out patched.exe` | | 将修补后的二进制文件连同您的重命名交给 `gdb` | `chimera gdb-export --out hello.gdbinit` 然后 `gdb -x hello.gdbinit ./hello` | | 检测 + 自动脱壳加壳的二进制文件 | `chimera unpack `(或先使用 `--detect-only` 进行检查) | | 比较两个缓存项目的差异 | `chimera diff ` | | 导出 SARIF 格式的发现结果以用于 CI | `chimera report --format sarif` | ### 快速开始(桌面) ``` # Triage 一个 PE chimera analyze /path/to/sample.exe chimera imports /path/to/sample.exe # bucket-grouped suspicious imports # Triage 一个 Linux ELF(静态链接 → signature matcher 触发) chimera analyze /path/to/server.bin chimera persistence /path/to/server.bin # cron / systemd / LD_PRELOAD strings # Patch 掉 IsDebuggerPresent 并保存干净副本 chimera patch /path/to/sample.exe --recipe pe-isdebuggerpresent-nop --out clean.exe # 或者 Patch 指定 virtual address 处的 raw bytes(先 dry-run) chimera patch /path/to/sample.exe --addr 0x140001000 --bytes 9090909090909090 --dry-run # Detect packer + 自动 unpack(UPX)—— 对于 VM-protectors 输出手动指南 chimera unpack /path/to/packed.bin chimera unpack /path/to/packed.bin --detect-only # 将分析交接给 gdb chimera gdb-export /path/to/server.bin --out server.gdbinit gdb -x server.gdbinit /path/to/server.bin # 打开 web UI 并右键点击 → "Rename function…" / "Add comment…" chimera serve --port 8765 # 然后浏览 http://localhost:8765 ``` ### 交互式工作流(Web UI) 打开一个项目,跳转到一个函数,Monaco 编辑器会暴露由标注 API 支持的三个右键操作: - **重命名函数…** (F2) — 持久化到 `overlay.json`,每次重新加载时重新应用,并在随后的反编译过程中呈现。 - **在此行添加注释** — 以行为键的逐地址注释。 - **设置函数签名…** — C 风格的原型,用于在后处理器中对参数 / 返回值进行重新类型化。 在 r2 和 Ghidra 之间切换反编译器下拉菜单,以并排比较同一函数的输出。 ### 库函数命名(等同于 FLIRT) 包含 176 个条目的签名包位于 `src/chimera/data/sigs/libfn-x86_64.json`,对调用目标 / RIP 相对操作数进行掩码处理,使得相同的前缀可以跨编译器版本匹配。使用 `scripts/build_libfn_sigs.py` 针对任何参考库构建您自己的签名包;匹配器在 r2 初步分析之后运行,因此它只重命名反汇编器已经提取出来的函数。 ### 修补方案 内置了三种反调试绕过方案,可通过 `chimera patch --list-recipes` 列出: - `pe-isdebuggerpresent-nop` — 在 IAT 中查找 kernel32!IsDebuggerPresent,将函数体替换为 `xor eax, eax; ret`。 - `pe-checkremotedebuggerpresent-nop` — 同样适用于 `CheckRemoteDebuggerPresent`。 - `elf-ptrace-zero` — 遍历 `.rela.plt` / `.dynsym`,对 `ptrace` 的 PLT thunk 进行存根处理,使其返回 0 而不是继续调用。 在 `src/chimera/patching/recipe_packs/` 下添加您自己的方案 — 对于简单类型,只需 JSON,无需代码。 ### 可选工具 在 `PATH` 上发现的外部二进制文件: - `floss` (`pip install flare-floss`) — PE/ELF 的字符串去混淆。 - `ilspycmd` (`dotnet tool install -g ilspycmd`) — .NET 反编译。 - `capa` (`pip install flare-capa`) — 能力匹配。 - `upx` (`apt-get install upx-ucl`) — UPX 加壳二进制文件的自动脱壳。 - `gdb` — 用于 `gdb-export` 交接。 - `yara-x` (`cargo install yara-x-cli`) — 现代化的 Rust YARA 重写版。通过 `CHIMERA_USE_YARA_X=1` 激活;不存在时回退到传统的 `yara`。 - `blutter`(从 [worawit/blutter](https://github.com/worawit/blutter) 构建)— Flutter / Dart AOT 快照提取器。发现方式:`PATH` 或 `CHIMERA_BLUTTER_BIN`。 - `hermes-decomp`(从 [SymbioticSec/hermes-decomp](https://github.com/SymbioticSec/hermes-decomp) 构建)— 基于 Rust 的 React Native Hermes 字节码反编译器。发现方式:`PATH` 或 `CHIMERA_HERMES_DECOMP_BIN`。 - `mergen`(从 [NaC-L/Mergen](https://github.com/NaC-L/Mergen) 构建)— 基于 LLVM-IR 的 VMProtect / Themida 去虚拟化工具。发现方式:`PATH` 或 `CHIMERA_MERGEN_BIN`。 - `dex2oat`、`oatdump2binexport`、`bindiff` — `chimera android-similarity` 所需(APK → OAT → BinExport → BinDiff)。`oatdump2binexport` 通过 `PATH` 或 `CHIMERA_OATDUMP2BINEXPORT_BIN` 发现。 可选的 Python 额外包(受限以保持默认 wheel 包的精简): - `pip install "chimera[varbert]"` — VarBERT 变量名恢复模型(Pal 等人,S&P 2024)。添加了 `chimera varbert rename` + `/api/projects/{id}/varbert/rename`。 - `pip install "chimera[ml]"` — 用于 EMBER 2024 恶意软件分类器的 LightGBM + lief。添加了 `chimera classify`。在 `src/chimera/detection_engineering/data/ember/model.txt` 放置模型,或通过 `CHIMERA_EMBER_MODEL` 指定路径。 - `pip install "chimera[capa]"` — 重量级的能力匹配(`flare-capa>=9.4` — PyGhidra 后端 + span-of-calls 动态作用域)。通过 `CHIMERA_CAPA_BACKEND=pyghidra` 选择更快的静态分析器。 - `pip install "chimera[dynamic]"` — 用于 `chimera attach` / Frida 工作流的 `frida-python`。 - `pip install angr` — 通过 Oxidizer 启用 `chimera rust-decompile`(Liu 等人,S&P 2026)。重量级;不包含在任何额外包中以保持环境精简。 - `pip install transformers torch` + `CHIMERA_IDIOMS_CHECKPOINT=/path/to/squaresLab/idioms-6.7b` — 在 `ai refine-decomp` 上启用 `--engine idioms`(Dramko 等人,NDSS 2026)。 AI 助手配置(无需安装额外组件 — 使用 urllib): - `ANTHROPIC_API_KEY` — 启用 `chimera ai ...` 和 SPA 的 AI 按钮所必需。没有它,所有的 AI 接口都会软失败(HTTP 503 并带有明确的提示)。 - `CHIMERA_AI_MODEL` — 覆盖模型(默认 `claude-sonnet-4-6`)。 - `ANTHROPIC_BASE_URL` — 指向代理 / 本地 endpoint。 - `CHIMERA_RECOMPILE_CC` — DecLLM 风格 `--recompile-check` 使用的编译器(默认:`PATH` 上首先找到的 `gcc`/`clang`/`cc`)。 全部可选;当未安装工具时,流水线会优雅地跳过。 Docker 镜像捆绑了上述除 `floss`、`ilspycmd` 和 `capa` 之外的所有外部二进制文件(默认关闭以避免依赖冲突 — 使用 `--build-arg INSTALL_CAPA=1` 选择开启)。 ### 局限性 - **没有 Hex-Rays 质量的反编译器。** Ghidra 很好,并且后处理器对其进行了清理,但对于经过大量优化的 C++,Hex-Rays 仍然是黄金标准。AI 优化过程缩小了可读性上的差距,但在准确性上并没有——它被指示永远不要虚构语义,因此它无法恢复 Ghidra 遗漏的内容。 - **没有交互式的结构恢复** — 您可以重命名和重新定义类型,但在 chimera 内部还没有“Edit → Structure”编辑器。(ReSym CCS 2024 提供了带有约 10GB 检查点的结构合成 — 被列为研究级的后续工作。) - **没有原生调试器 UX** — 调试是通过 gdb 桥接进行的,而不是在 chimera 内部进行。 - **VMP / Themida 去虚拟化**通过 Mergen(LLVM-IR 提升;`chimera vmp-devirt`)实现 — 当受保护区域边界清晰时很有用,而不是一个神奇的自动 pwn。加壳检测表仍然为无法被干净提升的商业保护器提供手动指南。 - **没有一等符号执行** — angr 可以通过 Oxidizer Rust 路径访问,并且 Phrack 72.15 E0 选择性符号检测原语被作为研究垫片进行草图设计,但还没有 `chimera symex` 驱动程序。 - 没有沙箱。 - 检测到 Authenticode 签名(存在性),但未经验证。 - 混合模式的 .NET (C++/CLI) 回退到 Ghidra。 ## 内存镜像初步分析 (Linux) Chimera 通过 Volatility 3 分析 Linux 内存捕获文件 (LiME / 原始格式)。 覆盖范围: - **进程树** (`linux.pslist`、`linux.pstree`) - **恢复的 bash 历史记录** (`linux.bash`) - **打开的套接字** (`linux.sockstat`,回退到 `linux.netstat`) - **Malfind RWX 命中** (`linux.malfind`) - **内核模块 + Rootkit 指标** (`linux.lsmod`、 `linux.check_modules`、`linux.check_syscall`) - **与持久化相关的缓存文件** (`linux.pagecache.Files` 与 cron / systemd / `LD_PRELOAD` / init.d 模式进行交叉引用) - **自动存根的 IR 发现**映射到 MITRE ATT&CK (T1014, T1055, T1543, T1071) ### 快速开始 ``` chimera memory /path/to/core.lime # full pipeline + summary chimera memory pslist /path/to/core.lime # process list only chimera memory netstat /path/to/core.lime # connections only chimera memory malfind /path/to/core.lime # RWX hits only chimera memory findings /path/to/core.lime # IR findings (Markdown) chimera report --format ir /path/to/core.lime --out report.ir.md ``` ### 必备工具 - **Volatility 3** (`pip install volatility3` 或通过发行版包安装)。请确保 `vol` 位于 PATH 上。Volatility 还需要目标镜像的 Linux ISF(内核符号表) — 请参阅 Volatility 3 文档。 - 全部可选;当缺少 `vol` 时,流水线降级为仅检测 + 格式识别。 ### 局限性 - 目前**仅限 Linux**。Windows 内存初步分析尚未连接。 - **无符号执行 / 行为重建。** Volatility 的输出原样通过 Chimera 的解析器;更深入的分析是 分析师的工作。 - **内存镜像测试装置是微小的合成存根。** 真正的初步分析运行 需要 GB 级别的捕获文件 + 匹配的 ISF 符号。 ## 状态 Alpha 阶段。CLI、流水线和适配器层可用;Web UI 正在 积极开发中,基于数据库的项目存储是后续工作。 在标记的发布之前,公共 API 可能会毫无预兆地发生变动。 ## 架构 ``` flowchart TB subgraph Frontends CLI[CLI] Web[Web UI] TUI[TUI] MCP[MCP Server] end subgraph Core["Core Engine"] Engine[ChimeraEngine] Pipelines["Pipelines
pe · elf · macho · android · ios · objc_xref · react_native"] ResMgr[ResourceManager] Cache[AnalysisCache] Overlay["Overlay
renames · comments · types"] Patcher[BinaryPatcher] Unpack[Unpacking] SigDB[Signature DB] end subgraph Adapters["Backend Adapters"] R2[radare2] Ghidra[Ghidra] Jadx[jadx] Apktool[apktool] Frida[Frida] Semgrep[Semgrep] YARA["YARA / YARA-X"] Capa[capa] Hermes[hermes-dec] ClassDump[class-dump] Swift[swift-demangle] Webcrack[webcrack] AFL[AFL++] UPX[upx] Gdb[gdb] Blutter["B(l)utter
(Dart AOT)"] end subgraph AI["AI & ML (opt-in)"] Claude["Anthropic API
explain · rename · refine · batch"] VarBert["VarBERT
S&P 2024 vars"] Ember["EMBER 2024
malware classifier"] end Model["Unified Program Model
functions · strings · xrefs · findings"] Findings["Findings + Reports
MASVS · SARIF"] CLI --> Engine Web --> Engine TUI --> Engine MCP --> Engine Engine --> Pipelines Engine --> ResMgr Engine --> Cache Engine --> Overlay Engine --> Patcher Engine --> Unpack Engine --> SigDB Pipelines --> Adapters Adapters --> Model Overlay --> Model SigDB --> Model Model --> Findings Model -. opt-in .-> AI AI -. suggestions .-> Overlay Ember -. PE verdict .-> Findings ``` ## 分析流水线 ``` flowchart LR Input[PE / ELF / Mach-O / .NET / APK / IPA] --> Detect{detect_platform} Detect -->|pe| PE[pe pipeline] Detect -->|elf| ELF[elf pipeline] Detect -->|macho| MO[mach-o pipeline] Detect -->|android| UnpackA[unpack_apk] Detect -->|ios| UnpackI[unpack_ipa] PE --> Sigs["Signature match
(FLIRT-equivalent)"] ELF --> Sigs MO --> Triage UnpackA --> Framework[FrameworkDetector] UnpackI --> Framework Framework --> Triage["Triage
radare2 + symbols"] Sigs --> Triage Triage --> Decompile["Decompile
r2 · Ghidra · jadx · class-dump"] Decompile --> Overlay["Overlay
renames · comments · types"] Overlay --> Static["Static analysis
Semgrep + YARA + capa"] Static --> Confirm["Dynamic confirm
Frida (optional)"] Confirm --> Report["Findings · MASVS · SARIF · SBOM"] ``` ## 快速开始 ### Docker(推荐) ``` docker compose up -d docker exec chimera chimera analyze /projects/app.apk ``` 该镜像捆绑了固定版本的 radare2、jadx 和 Ghidra。将您的 二进制文件挂载到 `/projects/` 中: ``` docker run --rm -v "$PWD:/projects" chimera:latest analyze /projects/app.apk ``` ### 本地安装 需要 Python 3.12+。外部工具(radare2、jadx、Ghidra、Frida)会在 `PATH` 上被发现,不存在时会被优雅地跳过。 ``` git clone https://github.com/TyrusRC/chimera.git cd chimera pip install -e ".[dev]" chimera info # show backend availability chimera analyze app.apk ``` ## 用法 ``` # 在 APK / IPA 上运行完整 pipeline chimera analyze app.apk chimera analyze app.ipa --ghidra-home /opt/ghidra # 通过 mapping.txt 恢复混淆的 identifiers chimera analyze app.apk --mapping-file release.mapping # Detect protections(root / jailbreak / Frida / debugger / packer) chimera detect-protections app.apk # Manifest + NSC 加固发现(Android) chimera manifest app.apk chimera manifest app.apk --format json # 对比两个应用版本 chimera analyze app-1.0.0.apk chimera analyze app-1.1.0.apk chimera diff # markdown output chimera diff --format json # 列出第三方 SDKs chimera sdks app.apk # 从缓存的分析中提取 IoCs(URLs、IPs、hosts、paths、mailto) chimera ioc app.apk # 列出 JNI bindings(Java native methods ↔ native symbols) chimera jni app.apk # 按 suspicious-imports bucket 分组列出 PE imports chimera imports sample.exe # 针对分析出的 strings 编写自定义 YARA rule chimera yara app.apk --rule-name my_rule # Frida —— 列出内置的 bypass scripts,展示其中一个,或在 device session 上运行 chimera frida list chimera frida show ssl-pinning-bypass chimera frida run --session --script ssl-pinning-bypass # 生成 SARIF 格式的报告(适用于支持 SARIF 的工具) chimera report app.apk --format sarif --out app # 桌面端 RE —— patch、gdb-export、unpack、attach chimera patch sample.exe --list-recipes chimera patch sample.exe --recipe pe-isdebuggerpresent-nop --out clean.exe chimera patch sample.exe --addr 0x140001000 --bytes 9090909090909090 --dry-run chimera gdb-export server.bin --out server.gdbinit gdb -x server.gdbinit ./server.bin chimera unpack packed.bin # detect + auto-unpack (UPX) chimera unpack packed.bin --detect-only # inspect first; emits guidance for VM-protectors chimera attach --pid 12345 # local process via Frida chimera attach --target com.example.app --device usb # mobile attach chimera attach --pid 12345 --bypass anti_debug --interactive # multi-bypass + REPL # AI 辅助(需要 ANTHROPIC_API_KEY) chimera ai explain server.bin 0x1234 chimera ai rename server.bin 0x1234 chimera ai comment server.bin 0x1234 --line 12 chimera ai engines # list refine engines chimera ai refine-decomp server.bin 0x1234 --backend ghidra chimera ai refine-decomp server.bin 0x1234 --backend ghidra \ --engine idioms --recompile-check --postprocess # full stack chimera ai eval-decomp dataset.jsonl --engine claude # REALTYPE-style scoring chimera ai batch-rename server.bin --max 50 --threshold 0.7 # preview chimera ai batch-rename server.bin --max 50 --threshold 0.7 \ --apply --verify # Sidekick-style refute pass # Notebook(带有证据的叙述性发现) chimera notes add server.bin --title "AES key derivation" \ --body "Uses PBKDF2 with hardcoded salt" \ --evidence 0x1234 --evidence 0x1300 --tag crypto chimera notes list server.bin --tag crypto # Hermes / Rust / VMP / Android-native 路径 chimera hermes-decompile app/index.android.bundle -o out/ chimera rust-decompile target/release/agent --limit 50 chimera vmp-devirt packed.exe --start 0x401000 -o out/ chimera android-similarity v1.apk v2.apk -o diff_out/ # Function-similarity(BinDiff 风格 + 多启发式 + backend hooks) chimera diff-functions a.bin b.bin --threshold 0.85 chimera diff-functions a.bin b.bin --heuristic multi chimera diff-functions a.bin b.bin --backend keenhash --rerank revdecode chimera diff-functions a.bin b.bin --export-bindiff matches.csv # 带有新 sandbox / backend 选项的 Capa chimera analyze sample.exe # static (vivisect) CHIMERA_CAPA_BACKEND=pyghidra chimera analyze sample.exe # faster static # 来自 CAPE/DRAKVUF/VMRay 报告的 Span-of-calls 动态 scope: capa -f cape report.json # (until exposed as a flag) # Research 附加组件(可选额外组件) chimera varbert rename server.bin 0x1234 --variant ghidra-O2 --apply chimera classify sample.exe --threshold 0.5 --format json chimera flutter-extract unpacked_apk_dir -o out # auto-detects libapp.so # BinDiff 风格的 function similarity(任意两个已分析的 binaries) chimera diff-functions a.bin b.bin --threshold 0.85 --format text # Annotation 共享 —— 可移植的 overlay 导出/导入 chimera overlay export server.bin -o server.overlay.json chimera overlay import server.bin -i server.overlay.json --mode merge # 已连接的 devices chimera devices # Web UI(FastAPI) chimera serve # 用于 device 操作的 TUI chimera tui # MCP server(stdio —— 接入 Claude Desktop / Code) chimera mcp ``` ### MCP 集成 Chimera 通过 MCP 暴露高级工具(`analyze`、`xref`、`list_devices`、 `pull_app`、`run_semgrep`、`apply_bypass` 等)。将任何兼容 MCP 的 客户端指向 `chimera mcp`,模型就可以直接驱动该 流水线。 ## 后端矩阵 | 层级 | 后端 | 用于 | | ----------------- | --------------- | --------------------------------------------------- | | 原生初步分析 | radare2 | 函数、字符串、交叉引用、ObjC 池、r2 反编译 | | 原生深度分析 | Ghidra | 反编译、类型推断 | | .NET | ilspycmd | 按类型的 C# 反编译(Ghidra 回退) | | Java / Kotlin | jadx, apktool | 源码恢复、清单、资源 | | iOS 元数据 | class-dump | ObjC 类布局、协议 | | 符号反混淆 | swift-demangle | Swift 标识符恢复 | | JS 包 | webcrack | 打包的 JS 解包 | | Hermes | hermes-dec | RN Hermes 字节码反汇编 | | 静态规则 | Semgrep | 针对反编译源码的 MASVS 规则 | | 模式扫描 | YARA / YARA-X | 加壳检测、恶意软件指纹(Rust 重写版使用 `CHIMERA_USE_YARA_X=1`) | | 能力 | capa | 高级行为标记(可选) | | 动态 | Frida | 运行时挂钩、绕过脚本、`chimera attach` | | 模糊测试 | AFL++ | 原生库模糊测试工具 | | 脱壳 | upx | UPX 自动脱壳 (UPX0 / UPX1) | | 调试器交接 | gdb | `chimera gdb-export` 使用 `.gdbinit` | | AI 助手 | Anthropic API | `chimera ai {explain,rename,comment,refine-decomp,batch-rename,eval-decomp}` (urllib,无 SDK) | | 优化引擎 | Claude / Idioms | `--engine {claude,idioms}`;Idioms (NDSS 2026) 通过 `CHIMERA_IDIOMS_CHECKPOINT` | | AI 验证器 | 第二次 LLM 调用 | Sidekick 风格的对抗性重命名反驳 (`ai batch-rename --verify`) | | 重编译门控 | gcc -fsyntax-only | DecLLM (ISSTA 2025) 一轮修复 (`ai refine-decomp --recompile-check`) | | 后处理器 | msynth + PseudoFix | MBA 简化器 + 结构重构 (`ai refine-decomp --postprocess`) | | 变量名 AI | VarBERT | S&P 2024 transformer;`chimera varbert rename` (`[varbert]` 额外包) | | 恶意软件判定 | EMBER 2024 | LightGBM PE 分类器;`chimera classify` (`[ml]` 额外包) | | Flutter / Dart | B(l)utter | Dart AOT 快照提取;`chimera flutter-extract` (外部二进制文件) | | Hermes (RN) | hermes-dec / hermes-decomp | 反汇编 + 基于 Rust 的反编译;`chimera hermes-decompile` | | Rust | Oxidizer (angr) | 感知 Rust 的反编译 (S&P 2026);`chimera rust-decompile` | | VMP / Themida | Mergen | 基于 LLVM-IR 的去虚拟化 (DEF CON 33);`chimera vmp-devirt` | | Android 原生相似性 | dex2oat + oatdump2binexport + bindiff | OAT 级别的相似度 (Phrack 72.13);`chimera android-similarity` | | 函数差异 | Jaccard / multi-heuristic / KEENHash / REVDECODE | `chimera diff-functions`;后端 + Viterbi 重排序 + BinDiff CSV 导出 | | 笔记本 | overlay-backed | 带有证据链接的叙述性发现;`chimera notes` + `/api/.../notes` | 适配器位于 [`src/chimera/adapters/`](src/chimera/adapters),并且全部 实现了 `BackendAdapter` 接口 ([`base.py`](src/chimera/adapters/base.py))。添加一个新后端意味着 放入一个文件并在 [`core/engine.py`](src/chimera/core/engine.py) 中注册它。 ## 开发 ``` pip install -e ".[dev]" pytest # full suite pytest tests/unit # unit tests only ``` 目录结构: ``` src/chimera/ ├── adapters/ # backend wrappers (radare2, Ghidra, jadx, Frida, varbert, yara-x, blutter, ...) ├── ai/ # urllib Anthropic client + prompt templates + shared parsers ├── api/ # FastAPI routes + websocket (annotations, decomp, ai, varbert, flutter, overlay_io, ...) ├── bypass/ # detection + Frida bypass orchestration ├── cli/ # Click CLI as a package — one module per command group ├── core/ # engine, config, cache, resource manager, overlay ├── data/sigs/ # FLIRT-equivalent library function signature packs ├── detection_engineering/ # CVSS findings, SARIF, MASVS, EMBER classifier ├── device/ # adb / libimobiledevice wrappers ├── diff/ # binary-vs-binary diff + function-similarity (pluggable backends) ├── frameworks/ # framework detection (RN, Flutter, Unity, Xamarin, ...) ├── model/ # UnifiedProgramModel + SQLite schema ├── parsers/ # Mach-O ObjC, ARM64 register tracking, function signatures ├── patching/ # BinaryPatcher, recipes, recipe packs ├── pipelines/ # platform-specific orchestration (pe, elf, macho, android, ios, ...) ├── report/ # builder.py (data layer) + html.py (presentation layer) ├── unpacking/ # YARA + section + entropy detect; UPX shell-out; guidance └── mcp_server.py # MCP entrypoint ``` 欢迎贡献。在发送 PR 之前,请为大量的工作开启一个 issue,以便我们可以 在方向上保持一致。 ## 许可证 [Apache License 2.0](LICENSE)。
标签:DAST, URL提取, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 反编译, 恶意软件分析, 聊天机器人, 自动化分析, 请求拦截, 跨站脚本, 逆向工具, 逆向工程, 静态分析