TyrusRC/chimera
GitHub: TyrusRC/chimera
Chimera 是一个统一的跨平台二进制逆向工程平台,将多种主流反编译与分析工具封装在单一的 CLI、HTTP API 和 Docker 流水线中,支持桌面与移动端六大二进制格式。
Stars: 1 | Forks: 1
# Chimera
[](LICENSE)
[](pyproject.toml)
[](#features)
[](Dockerfile)
[](src/chimera/mcp_server.py)
[](#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)。
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
标签:DAST, URL提取, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 反编译, 恶意软件分析, 聊天机器人, 自动化分析, 请求拦截, 跨站脚本, 逆向工具, 逆向工程, 静态分析