开始使用 · 支持的输入 · 自动恢复 · 工具对比 · 证据 · 文档
Disrobe 是一套用 Rust 编写的命令行工具集,用于反编译、反混淆和解包软件。你可以用它来对未知文件进行初步分析、恢复代码以进行逆向工程、提取调查所需的指标,或为反汇编器准备工件。
从字节码和冻结应用中恢复 Python,从 classfile 和 DEX 中恢复 Java,从 CIL 中恢复 C#,从 bundle 中恢复 JavaScript,从自定义虚拟机中恢复 Lua,以及从原生代码中恢复 C 或 Rust。从安装程序、固件、移动包以及 Electron、Tauri 或 Wails 应用中提取文件。将恢复的源代码、符号、字符串、类型和来源信息保留在一起,以便进一步分析。
完整构建目录收录了 170 个家族,涵盖 15 个生态系统,并检测 103 种容器格式。disrobe auto 会识别每一层,运行匹配的处理流程,并沿着恢复出的子项进入各自的恢复路径。专用命令提供更精细的控制、分析报告和可选后端。恢复默认以静态方式运行;源代码、结构、部分输出和缺失密钥边界在结果中保持可区分。
如果 Disrobe 对你有帮助,欢迎考虑为仓库加星。
2 分 12 秒内演示二十个 CLI 命令:解包原生可执行文件、恢复 Python 和 Lua、拆分 JavaScript 模块、还原 source map、检查 WebAssembly 和 Android 资源、提取指标,并保留报告和工件哈希。最后一章展示项目配置、IDE 设置、分析人员注释和 shell 补全。文字记录包含所录制构建的完整命令清单;能力图谱说明了其支持范围。
从 GitHub Releases 下载适用于你平台的压缩包,用发布版的 SHA256SUMS 校验,然后将 disrobe 放入你的 PATH。发布压缩包包含签名包;验证指南说明了如何检查它们。
| 平台 | 发布目标 |
|---|---|
| Windows | x86-64、ARM64 |
| macOS | x86-64、ARM64 |
| Linux | 使用 glibc 的 x86-64 和 ARM64;使用 musl 的 x86-64 |
检查你安装的二进制文件:```sh disrobe --version disrobe --help
要从克隆的仓库构建 CLI,请安装该仓库的 Rust 工具链和[原生构建前置依赖](https://github.com/1-3-7/disrobe/blob/main/docs/src/installation.md),然后运行:```sh
cargo build --locked --release -p disrobe-cli --bin disrobe
可执行文件为 target/release/disrobe,在 Windows 上为 target/release/disrobe.exe。有关功能标志和精简构建,请参阅安装指南。
从应用程序、库或包开始。识别它,恢复其可识别的层,然后检查恢复摘要:```sh disrobe identify path/to/application disrobe auto path/to/application --out recovered/ --capture-stages disrobe context --out recovered/
`identify` 报告格式和可用信号。`auto` 提取并恢复已识别的层。`context` 汇总生成的各次处理结果、置信度和来源信息。使用 `--capture-stages` 时,可在 `recovered/01-*/`、`recovered/02-*/` 和 `recovered/final/` 下检查每个阶段;`chain.json` 记录拓扑结构和哈希值,`recovery.json` 记录结果和耗时。
当你知道自己需要什么输出时,请使用专用命令:```sh
disrobe py decompile module.pyc --out python-source/
disrobe js deob bundle.js --full --out readable.js
disrobe native decompile application.exe --out native-source/
disrobe native export packed.exe --format ghidra --out ghidra-input/
disrobe webview desktop.exe --out frontend/
原生反编译器在 x86-64 上默认生成 C 代码;--format rust 选择 Rust。AArch64、ARM32 和 MIPS32 生成伪 C 代码。native export 为外部分析工具重建受支持的打包 PE 映像;webview 在不启动应用程序的情况下写出恢复的前端资源树。
该仓库包含一个微小的 WebAssembly 模块,用于浏览器游乐场。从克隆开始,在 PATH 中拥有完整的 CLI:```sh
disrobe wasm decompile playground/public/samples/add.wasm --target json --out add.summary.json
disrobe wasm decompile playground/public/samples/add.wasm --target wat --out add.lifted.wat
disrobe auto playground/public/samples/add.wasm --out recovered/ --capture-stages
第一条命令写入 `add.summary.json`;第二条命令将 WebAssembly 文本写入 `add.lifted.wat`。自动恢复会选择一条可用链,并将其产物写入 `recovered/` 下;`--capture-stages` 会保留中间结果。这些操作会检查模块,但不会运行其导出的函数。
请将恢复出的文件与报告一并检查:仅凭识别本身并不能确立恢复。不支持的构造、缺失的密钥材料以及不可用的链都会出现在结果中。[结果指南](https://github.com/1-3-7/disrobe/blob/main/docs/src/reading-a-result.md) 说明了产物、诊断信息、部分结果和来源。
[打开浏览器演练场](https://1-3-7.github.io/disrobe/playground/) · [跟随快速入门](https://github.com/1-3-7/disrobe/blob/main/docs/src/quickstart.md)
## 找到你的输入
**恢复** 意味着存在一条可达路径能够输出源码、字节或结构。**部分** 意味着它只恢复该信息的一部分。**仅检测** 意味着它识别出所属家族,但不恢复其受保护主体。这些级别描述的是对受支持输入执行的操作;仅凭家族名称并不能保证每个版本或配置都能恢复。下面的列表包含完整的家族目录,以及由专用命令和提取器暴露的额外格式。
| 输入 | 恢复与输出 | 命令与指南 |
|---|---|---|
| Python | CPython 1.0 至 3.15 字节码和 marshal 到源码;PyPy、MicroPython `.mpy` v0 至 v6、Jython、IronPython 和 Brython 反汇编;冻结载荷提取;Cython `.pyd`/`.so` 名称、签名和结构回退 | `py`、`pyinstaller`、`pyarmor`、`pyfreeze`、`nuitka` · [Python](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md) |
| JavaScript / TypeScript | 源码反混淆、压缩还原、模块拆分、source map、V8 缓存数据和打包运行时检查 | `js` · [JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) |
| WebAssembly | `.wasm` 到 WAT、Rust、TypeScript、C 伪源码或 JSON;Component Model 和 GC 类型图检查;支持的混淆还原 | `wasm` · [WebAssembly](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) |
| JVM / Android | `.class`、JAR、DEX、APK、AAB;Java 源码、Kotlin/Scala 惯用法、manifest 和签名信息、保护器报告和映射 sidecar | `jvm`、`apk` · [JVM 和 Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) |
| .NET | PE/CLR 元数据和 CIL 到 C#、F# 或 VB 伪源码;ReadyToRun 和 Native AOT 检查;单文件包提取 | `dotnet` · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) |
| Native | PE32/PE64、EFI PE、ELF32/ELF64、内核模块、thin/fat Mach-O、COFF、MZ、NE、LE、LX 以及原始代码识别或分析;在上述架构特定路径上输出源码 | `native`、`macho`、`semdiff` · [Native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md)、[decompile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-decompile.md) |
| Go | PE/ELF/Mach-O 运行时元数据、剥离后的函数和类型名称、`embed.FS` 文件、garble 报告和可恢复字面量 | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Mach-O 类、协议、字段、选择器、去修饰符号;通用切片;dyld 共享缓存 dylib | `swift`、`macho` · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) |
| Lua | Lua 5.1 至 5.4、LuaJIT 2.0/2.1、Luau 字节码、Garry's Mod Lua (GLua);源码和逐输入保真度报告;支持的 VM 和字符串恢复 | `lua` · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) |
| PHP | 源码/eval 链剥离、字面量键解码循环和 AES 层、Phar 提取、序列化 `op_array` 恢复;商业编码器封装仍受密钥限制 | `php` · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) |
| Ruby | MRI/YARV 2.6 至 3.4 InstructionSequence 二进制和 mruby RITE 字节码到 Ruby;freezer 和 AOT 分类 | `ruby` · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) |
| Erlang / Elixir | BEAM 模块和 EZ 归档;存留的抽象代码或 `Dbgi` 到源码、Core Erlang 回退、指令列表 | `beam` · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) |
| ActionScript 3 | SWF FWS/CWS/ZWS `DoABC` 块和原始 ABC 字节码到反汇编和 AS3 伪代码 | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| 移动运行时 | Hermes v60 至 v96 头部解析,v62/v71/v74/v76/v83/v84/v89/v96 伪 JavaScript 提升;Flutter Dart kernel 源码主体;ARM64 AOT 声明、字符串和反汇编 | `hermes`、`flutter`、`mobile` · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md) |
| Shell / 文档 | PowerShell、Bash、Batch、VBScript、WSH;VBA3/5/6/7 p-code 和 stomping;Office 宏源码、BIFF8/BIFF12 XLM 公式、PDF 嵌入脚本/动作 | `shell` · [Shell 和文档](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| 其他语言产物 | Perl op-tree/字节码、R RDS 和 Rcpp 元数据、Tcl starkit、Haxe JS/SWF/HashLink/Neko 输出;Nim、Zig、Crystal 和 D 指纹、符号及部分结构 | `auto`、库 API · [脚本语言](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md)、[native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) |
| Python pickle | 协议反汇编、符号跟踪、重建和分类,且不调用 pickle reducer | `pickle` · [Pickle](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/pickle.md) |
| 归档 / 固件 / 前端 | 下方完整容器列表;Electron ASAR、Tauri v1/v2 嵌入映射、Wails v2 `embed.FS` 树 | `extract`、`webview`、`auto` · [容器](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md)、[webview](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md) |
<details>
<summary><strong>Python:所有具名 freezer、保护器和源码混淆器</strong></summary>
| 家族或格式 | 支持与前提条件 |
|---|---|
| PyInstaller 2.x 至 6.20+ | 恢复嵌入归档和字节码,包括受支持的 AES-CTR/CFB 层 |
| Nuitka onefile、standalone、module、wheel | 提取 onefile 载荷;从编译形式恢复符号和 Python 可见结构 |
| cx_Freeze、py2exe、shiv、pex、Briefcase | 通过 `pyfreeze` 进行打包器提取;该命令仍为实验性 |
| PyOxidizer | 实验性、未验证的提取 |
| SourceDefender `.pye` | 通过 `py sourcedefender` 和 `sourcedefender.decrypt` 进行静态解密 |
| PyArmor v3(旧版 DES)、PyArmor v4(旧版混合)、PyArmor v5(旧版 AES) | 仅检测:RSA 封装密钥边界 |
| PyArmor v6、PyArmor v7 | 部分静态恢复;super 模式和不可用密钥会限制输出 |
| PyArmor v8、PyArmor v9 / 9-Pro | 在密钥材料可用时进行静态封装恢复。已发布的 <!-- m:pyarmor_frac -->72 / 72<!-- /m --> 结果仅对具名 v8/v9 默认试用封装统计完整根 `CodeObject` 解码;它并不确立源码等价性,也不覆盖注册许可证/pro、BCC 或 super 模式 |
| Kramer / Specter、Berserker、BlankOBF、PlusOBF、Wodx、pyobfuscate.com、pyobfuscate.com (2026 XOR/lambda)、PyObfuscator (mauricelambert)、Manglify、Oxyry、pyminifier、在线混淆器家族、Xindex、Patchwork、pyc-zipper | 通过 AST 求值器进行静态源码/加载器恢复;会报告各层和残留 |
| Jawbreaker、ObfuXtreme | 恢复产物中存在的主体;运行时获取的载荷仍然缺失 |
| python-obfuscator (PyPI)、pyobfus、Pypacker | 部分封装剥离和分类 |
PyArmor 可能需要与封装匹配的运行时文件。其专用 BCC 路径需要 `--allow-bcc`,并会为已建模主体输出静态 native 提升以及 Python 骨架;路径感知的自动恢复可以发布相同的 BCC 产物。只有 PyArmor v6/v7 动态钩子会执行示例代码,且需在 `--allow-dynamic` 和看门狗下进行。`--allow-bcc` 仅允许树内静态分析,不会执行示例或调用外部工具。[版本和模式详情](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor)。
</details>
<details>
<summary><strong>JavaScript、WebAssembly 和打包 Web 应用</strong></summary>
| 家族或格式 | 支持与路径 |
|---|---|
| obfuscator.io / javascript-obfuscator、JS-Confuser | 恢复受支持的字符串数组、分发器/控制流变换、不透明谓词和加载器层;直接命令和 `js.deob` |
| Jscrambler、js-obfuscator (jsobfu) | 部分模板和静态变换恢复 |
| JSFuck、aaencode、jjencode、JSFiretruck、Dean Edwards Packer | 通过专用操作和已识别链路径进行静态解码 |
| JSDefender、Arxan / Digital.ai | 检测和部分静态变换剥离;受保护的商业 JS 操作需要该命令的授权选项 |
| PACE | 仅检测 |
| webpack 4、webpack 5、Vite、Rollup、Rolldown、esbuild、Turbopack、Bun、Parcel、Browserify、SystemJS;AMD 模块 | 直接解包/模块恢复。该链会分发 webpack 和 Vite;其他打包器的目录标记本身并不会使这些路径自动可用 |
| bytenode `.jsc`、Node SEA、nexe、nw.js | 打包 V8 数据检查/雕刻;Node SEA 和 bytenode 有显式链分支 |
| Electron ASAR、Tauri v1/v2、Wails v2 | 恢复嵌入前端树;Electron/Tauri 使用 `webview.carve`,Wails 使用 `go.classify`;直接 `webview` 可处理三者 |
| Bun standalone、Deno eszip v2 至 v2.3 / `deno compile` | 通过各自的容器读取器恢复嵌入模块图;eszip 还暴露直接 Rust 读取器 |
| Wobfuscator、Jscrambler WASM、wasm-mixer / Wasmixer | 通过 `wasm.deob` 部分还原受支持的变换;工具形态的 fixture 会对这些变换进行评分,但没有来自这些混淆器本身的已提交输出 |
| Tigress → Emscripten、wasm-name-obfuscator | 检测和分类;Tigress 辅助工具不在 `wasm deob` 运行路径内,且被破坏的原始名称仍然不可用 |
[JavaScript 路径](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) · [Wasm 限制](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) · [嵌入前端布局](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md)。
</details>
<details>
<summary><strong>Native 打包器、保护器和混淆家族</strong></summary>
| 家族 | 支持与路径 |
|---|---|
| Donut、sRDI | 从受支持的 shellcode 加载器布局中恢复嵌入模块 |
| UPX、ASPack、Petite、MPRESS、FSG、PECompact、Yoda's Crypter、NSPack、MEW、kkrunchy | 已实现的脱壳例程,可通过 `native unpack` 和打包器链到达;保真度因家族和样本而异 |
| ASProtect、Morphine、nPack、NeoLite、PolyCryptor、Warzone Crypter | `StubEvalPending`:模拟器行为有基于规范构建的 stub 证据;真实厂商打包恢复尚未验证,且未宣传脱壳分发 |
| Yoda's Protector、VMProtect、Themida / WinLicense | CLI 和自动仅检测。单独的 Rust 辅助工具暴露原始辅助雕刻或受保护区段恢复;它们并不确立全程序去虚拟化 |
| PE-Protector、PELock、Enigma Protector、Armadillo、Obsidium、WinLicense | 仅检测 |
| DotNetPatcher、NetCryptor | 将托管层委托给 .NET 处理流程 |
| OLLVM 平坦化、虚假控制流、指令替换;Tigress CFF | 通过 native Rust API 支持静态反混淆变换和报告;适用分析会出现在 native 恢复报告中 |
| Alcatraz、Emotet CFF、Mirai、Dridex、Trickbot、obfus.h、Cryptify (rust-obfuscator)、guardian-rs、obfusheader.h、obfuscxx、Amice | 具名 native 混淆签名;单个字符串/控制流辅助工具的恢复范围比完整检测到的家族更窄 |
Native 分析还会恢复 Rust/C++ 符号、C++ RTTI 和 vtable、Delphi/C++Builder 对象模型和 DFM 资源、DWARF/PDB/STABS 信息、导入、调用图、加密签名和 FLIRT 匹配。指令分析涵盖 x86、ARM、RISC-V、MIPS、PowerPC、SPARC、eBPF 和 AVR;源码输出是上文列出的较小架构集合。[Native 分析](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) · [脱壳和字节恢复证据](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-unpack.md) · [反混淆](https://github.com/1-3-7/disrobe/blob/main/docs/src/anti-analysis.md)。
</details>
<details>
<summary><strong>JVM、Android、.NET 和移动包家族</strong></summary>
| 家族 | 支持与前提条件 |
|---|---|
| Zelix KlassMaster、Allatori、Stringer、DashO | 对受支持模式进行字符串恢复,随后进行 classfile 反编译 |
| DexGuard | 对受支持带密钥常量进行检测、结构剥离和类内字符串解密模拟 |
| BlackObfuscator | DEX 分发器识别和块顺序标注 |
| ProGuard / R8 | 将映射重放到名称恢复 sidecar;原始名称需要 `mapping.txt` |
| yGuard、SkidSuite2、JBCO | 仅检测 |
| Promon SHIELD、Guardsquare DexGuard RASP、Guardsquare ThreatCast、Appdome、OneSpan、Arxan / Digital.ai、Zimperium zShield、Licel DexProtector | Android RASP 识别和结构报告 |
| ConfuserEx2 | 真实样本常量恢复和控制流反平坦化;加密资源可能保留运行时密钥边界 |
| Eazfuscator.NET | 模型评分的字符串解密和 VM 提升;VM fixture 来自仓库内虚拟化器,而非发布产品 |
| KoiVM (ConfuserEx VM) | 在已提交的真实工具输出上将虚拟化主体提升为 CIL |
| ConfuserEx、Dotfuscator、Dotfuscator CE、SmartAssembly、Babel、DeepSea、Spices.Net、Goliath、Skater、.NET Reactor、CryptoObfuscator、ArmDot、Agile.NET、Obfuscar、DotNetPatcher、NetCryptor、BitMono | 检测和家族特定部分恢复:名称、字符串、资源或方法结构。BitMono 位于 22 项 .NET 链目录之外的保护器检测器中 |
| Themida (.NET wrapper)、ILProtector、MaxToCode | 对 native 加载器密钥主体仅检测 |
| React Native APK、React Native IPA;React Native Hermes 字节码 | 提取 JS/Hermes 载荷,并将受支持字节码路由到 Hermes 提升 |
| Flutter Dart kernel;Flutter AOT 快照(`libapp.so`) | Kernel 源码表恢复;AOT 声明、元数据和 ARM64 反汇编。快照版本和可用名称会限制恢复 |
| Xamarin / .NET MAUI APK、Apache Cordova APK、Capacitor APK、NativeScript APK | 运行时识别和受支持包/成员提取 |
| Android APK(`classes.dex`)、Android app bundle(AAB / APKM / XAPK)、IPA | 包检查和子项提取;下游恢复取决于嵌入运行时 |
SmartAssembly、Spices.Net、Skater、.NET Reactor、Eazfuscator.NET 和 CryptoObfuscator 的 .NET 字符串解码器基于建模算法评分,而非已提交的厂商生成程序集。ConfuserEx2、Obfuscar 和 BitMono 有真实受保护程序集证据。[JVM/Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md)。
</details>
<details>
<summary><strong>Lua、PHP、shell、Ruby、BEAM、Swift、Go 和 ActionScript 家族</strong></summary>
| 家族 | 支持与前提条件 |
|---|---|
| IronBrew2 | VM 恢复,在真实 2.7.0 standard 和 MAX 输出上进行执行差分检查 |
| Prometheus | 部分恢复,包括受支持的堆叠 `Vmify` 分发树 |
| MoonSec V1、MoonSec V2、MoonSec V3、AztupBrew、DarkSec、Boronide、PSU、WeAreDevs LuaU、luaobfuscator.com、SLua (Unity Lua 5.3)、Hercules | 部分 Lua 恢复;MoonSec 形态 VM 证据使用合成 bootstrap |
| Luraph | 仅检测 |
| Luau 字节码、Garry's Mod Lua (GLua) | 方言识别;Luau 提升和部分 GLua 恢复 |
| ionCube、SourceGuardian、Zend Guard | 商业 PHP 封装检测;加载器驻留密钥仍是边界。旧式静态密钥情况可产生部分 `op_array` 结构 |
| FOPO、Better PHP Obfuscator | 静态 PHP eval 链剥离,加密层需要字面量密钥 |
| Invoke-Obfuscation (token)、Invoke-Obfuscation (AST)、Invoke-Obfuscation (string)、Invoke-Obfuscation (encoding)、Invoke-Obfuscation (compress);Invoke-Stealth、PowerHell、Chameleon、psobf | 静态 PowerShell 恢复 |
| Invoke-Obfuscation (launcher)、ISESteroids | 部分 PowerShell 恢复 |
| Bashfuscator (token)、Bashfuscator (string)、Bashfuscator (obfuscate)、Bashfuscator (compress);Bash 间接(IFS/eval);node-bash-obfuscate(chunk-table eval) | 静态 Bash 恢复 |
| Batch 混淆(`%random%`)、Batch 混淆(set 间接);VBA 宏(p-code 反编译 + stomping) | Batch 剥离和 VBA 源码/p-code 恢复 |
| YARV InstructionSequence(编译 `.rb`)、mruby RITE 字节码 | Ruby 源码恢复 |
| OCRA 自解压可执行文件、RubyScript2Exe 包 | 部分 freezer 分类/恢复 |
| JRuby 编译类、TruffleRuby native image | 通过 Ruby 目录仅检测 |
| BEAM 文件(Erlang / Elixir 编译模块)、EZ 归档(ZIP 封装 `.beam` 模块) | 模块提取、源码/调试块恢复或 Core Erlang 回退 |
| garble | Go 元数据和受支持字面量;没有缺失种子则无法逆转原始名称哈希 |
| Mach-O Swift / Objective-C 元数据、Mach-O fat(通用)二进制、dyld 共享缓存 | 运行时元数据、切片和 dylib 恢复 |
| SwiftShield | 映射解析器;必须提供映射才能恢复原始名称 |
| SWF(Flash、FWS/CWS/ZWS)DoABC、原始 ABC 字节码 | 反汇编和方法体伪代码 |
| secureSWF、DoSWF、Kindi、Irrfuscator、swfLock | 仅检测 |
[家族目录](https://github.com/1-3-7/disrobe/blob/main/docs/src/catalog.md) · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) · [Shell](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) · [AS3](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md)。
</details>
<details>
<summary><strong>全部 103 种已注册容器格式</strong></summary>
| 类别 | 格式 |
|---|---|
| 通用归档 | ZIP、TAR、tar.gz、tar.bz2、tar.xz、tar.zst、7z、RAR、CAB、CPIO、ar、ARJ、ARC、LZH、LZO/lzop、uzip、Xamarin xalz、PAR2、StuffIt |
| 应用和语言归档 | JAR、WAR、APK、XPI、WHL、EGG、CRX、NUPKG、VSIX、PYZ、Electron ASAR |
| 安装器和应用镜像 | PKG、DMG、DEB、RPM、AppImage、Snap、Flatpak、MSIX/APPX、MSI、NSIS、Squirrel、Inno Setup、InstallShield、Enigma Virtual Box |
| 文件系统和文件系统流 | SquashFS、cramfs、ext4、romfs、MinixFS、Android sparse、btrfs-send、EROFS、JFFS2、NTFS、UBI/UBIFS、YAFFS2、QNX、partclone |
| 磁盘和部署镜像 | ISO、OCI、Docker image、VHD、VHDX、WIM、GPT、MBR、FAT12/16/32 |
| 压缩流 | XZ、gzip、bzip2、zstd、LZMA、lzip、LZ4、zlib、Unix compress(`.Z`) |
| 嵌入应用数据 | Bun standalone、UnityFS、.NET 单文件包 |
| 固件 | D-Link SHRS、ENCRPTED_IMG、alpha v1、alpha v2、DEAFBEAD、FPKG;EnGenius;Autel ECC;QNAP;Netgear CHK、TRX v1、TRX v2;Xiaomi HDR1、HDR2;Tesla SBFH;HP BDL、IPKG;Moxa FRM;INSTAR BNEG、HD;Airoha;UEFI firmware volume |
| 内存和加密卷 | Windows minidump、LUKS1 |
该名册声明对每个条目进行检测。在这些路径中,102 个使用通用提取器;<!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth --> 个具有可到达成员字节的已提交输入,DMG 具有仅检测的已提交证据,59 个没有已提交输入。LUKS1 单独针对明文评分,并且需要 `aes-cbc-plain` 原始卷密钥进行解密;没有密钥时它会报告密钥边界。单个压缩方法、加密成员、拆分卷和文件系统特性有更窄的限制。StuffIt 5 当前即使存在其 fork 解码器,也会通过提取返回归档 blob。Airoha OTP-AES 内容会按原样雕刻。
额外的 Rust 读取器暴露 Deno eszip、Apple APFS/HFS+、ELF 追加 overlay 和 Blazor WebCIL 结构;它们不是 103 格式计数中的额外条目。[提取路径、方法版本和限制](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md) · [容器注册表](https://github.com/1-3-7/disrobe/blob/main/crates/disrobe-binfmt/src/container.rs)。
</details>
## 自动恢复`auto` 会从已编译的注册表中选择一个 pass,运行它,然后重新识别其输出和提取出的子项。它会在达到置信度阈值、出现重复内容哈希或达到深度限制(默认八层)时停止。被标记为终端的报告和源文件将保留为输出,而不会被重新送入检测流程。下表列出了完整构建所注册的每一个 pass;精简构建可能会省略受特性门控的行。
| 输入层 | 已注册的 pass ID | 自动输出 | 专用控制或前提条件 |
|---|---|---|---|
| 归档文件、安装程序、固件、卷 | `binfmt.container` | 提取出的子项,递归进入语言/原生 pass | `extract` 用于成员报告以及显式的 LUKS1 原始密钥选项 |
| PyInstaller | `pyinstaller.extract` | 嵌入的成员和 `.pyc` 子项 | `pyinstaller extract` 用于归档特定的选项 |
| Python 打包器 | `pyfreeze.extract`、`nuitka.extract` | 提取出的载荷或受支持的编译包结构 | 实验性 `pyfreeze`;Nuitka 风格决定哪些内容得以保留 |
| 受保护的 Python | `pyarmor.unpack`、`sourcedefender.decrypt` | 可用的明文/字节码、元数据或密钥边界报告 | 匹配的运行时/密钥材料;专用的 PyArmor 模式和严格性选项 |
| Python 源代码和字节码 | `py.deob`、`py.decompile`、`py.disasm` | 剥离后的源代码、反编译的源代码或指令跟踪 | `py decompile --emit source,disasm,ast`;重新编译检查需要匹配的解释器 |
| Pickle | `pickle.classify` | 符号分析和分类 | `pickle` 用于单独的检查/重建操作 |
| JavaScript | `js.deob` | 受支持的混淆还原、webpack/Vite 模块恢复、Node SEA/bytenode 处理 | `js unbundle` 暴露更广泛的打包器集合;source map 和重命名选项是直接控制项 |
| WebAssembly | `wasm.deob` | 恢复或提升的 WAT 以及检测、摘要和恢复附属文件 | `wasm decompile --target` 选择 Rust、TypeScript、C、WAT 或 JSON |
| Electron / Tauri | `webview.carve` | 嵌入的前端成员 | `webview` 也支持 Wails;自动 Wails 恢复使用 `go.classify` |
| PHP / Phar | `php.peel` | 剥离后的源代码、`op_array` 输出、归档子项、残留/密钥报告 | 加密层需要密钥和 IV 静态可用 |
| JVM / DEX | `jvm.classify` | Java 源代码、保护器和恢复清单、类/归档子项 | `jvm`/`apk` 用于映射、签名和可选的外部后端 |
| .NET | `dotnet.classify` | C# 和分析、恢复的常量/资源/CIL 或 Native AOT 元数据 | `dotnet` 用于其他源代码格式和已安装的渲染后端 |
| 移动包 / 字节码 | `mobile.classify` | 运行时/成员提取、Hermes 提升、Dart 内核源代码或 AOT 报告 | `hermes`、`flutter`、`mobile` 用于格式特定的控制 |
| Lua | `lua.deob` | 恢复的 Lua 以及方言/保真度附属文件 | `lua` 用于显式的家族和输出控制 |
| Shell / Office / PDF | `shell.deob` | 剥离后的脚本、宏源代码/p-code、XLM 和文档报告 | `shell` 用于文档特定的操作 |
| Ruby | `ruby.classify` | 分析以及可用的恢复 YARV/mruby 源代码 | `ruby` 用于风格特定的报告;JRuby/TruffleRuby 分类不是 Ruby 源代码恢复 |
| BEAM / EZ | `beam.classify` | Erlang/Elixir/Core Erlang、反汇编、归档子项 | 存留的调试块决定源代码保真度 |
| SWF / ABC | `as3.classify` | ABC 结构、指令列表、AS3 伪代码 | 命名的商业混淆器仍仅支持检测 |
| Go | `go.classify` | 符号、类型、garble 分析以及嵌入的文件系统成员 | `go` 用于 DWARF、BuildInfo 和其他专用报告 |
| Swift / Objective-C | `swift-objc.classify` | 元数据、通用切片和共享缓存 dylib | 可能需要同级的子缓存/符号文件;直接使用 `swift`/`macho` 控制 |
| 原生打包器 | `native.packer-unpack` | 可用的解包镜像或嵌入模块、符号、签名、恢复报告 | 仅已实现的打包器分派会解包;商业 VM 层级可能止步于检测 |
| 原生镜像 | `native.image-classify` | 身份、符号、签名、发现以及有界的 x86-64/AArch64 伪源代码报告 | `native decompile` 选择完整的源代码输出命令;ARM32/MIPS32 源代码路径是直接可用的 |
| Windows / OS/2 NE | `native.ne-structure` | 段、入口、导入和资源 | 结构恢复而非源代码反编译 |
| Perl / R / Tcl / Haxe / WSH | `scriptlang.classify` | 语言报告、恢复的结构和受支持的子产物 | 各格式的库 API 暴露更细粒度的操作 |
| Nim / Zig / Crystal / D | `nativelang.classify` | 语言指纹、符号和部分原生结构 | 分类需要足够存留的语言标记 |
例如,一个被识别出的 PyInstaller 应用程序可以依次经过 `pyinstaller.extract` → `pyarmor.unpack` → `py.decompile`;一个 APK 经过成员提取 → DEX → Java;一个加壳的原生镜像经过解包 → 语言或镜像分析。每个箭头都取决于该特定层实际产生的内容。```sh
disrobe passes
disrobe catalog python --json
disrobe auto input-directory/ --out recovered/ --batch-max-depth 6 --capture-stages
disrobe chain module.pyc --chain py.decompile --out python-source/
scan、frisk、taint、vulnmatch、显式源-目标选择、映射重放以及可选的外部后端调用仍为专用操作。Pass registry · Chain selection and output layout。
capability map 涵盖命令组和集成。其
machine-readable inventory 链接源代码、测试、文档、支持
状态和演示。CLI reference 涵盖嵌套命令;
global flags 涵盖共享选项。使用 disrobe <command> --help
查看已安装构建的接口。
项目和服务命令也在其中索引:serve、plugin、init、config、catalog、passes、doctor、install、install-deps、self-update、completions、man、explain 和 bug-report。使用 doctor 探测 46 到 51 个外部工具(取决于平台)并识别缺失的可选后端。
该表将每个恢复任务映射到 Disrobe 的命令和相关工具。已安装的反编译器和导出的产物提供了如下所示的集成点。
comparison inventory 列出了尚未完成的共享输入比较。后端选项记录在 installation 和上方链接的语言指南中。
测量使用下方链接的固定输入、工具版本和评分规则。DEX 和 JAR 计数测量每个工具所发出区域的编译情况。这些群体不同,因此其计数并不对恢复质量进行排名。APK 密钥召回使用相同的八令牌 ground truth。
在 Disrobe 将加壳可执行文件导出为重建的 PE 后,相同的 Ghidra 12.1.2 分析会看到不同的代码。这些本地快照使用真实良性加壳 fixture,并记录增加和减少。函数/指令/字符串列来自九输入分析快照;完成的 C 渲染来自单独的六输入反编译器快照。完成的渲染是非空输出,而非源代码正确性评分。
kkrunchy 计数减少。发现更多函数并不一定意味着更多正确函数,这些分析计数不能替代字节比较。阅读 analysis snapshot、decompiler snapshot 以及单独的 native byte-recovery measurements。
evidence index 将恢复测量链接到其 fixture、比较方法、命令和结果。
结果区分字节恢复、编译器接受和行为检查。编译器接受和覆盖率计数不是等价性评分。
这些检查将 Disrobe 与原始产物、编译器、解释器或带标签语料库进行比较。它们与比较两个反编译器不同。每个链接结果记录输入群体、先决条件和复现命令。
完整证据记录描述了每个群体和评分规则。
图表标签使用 strong 表示独立正确性参考,recompile-only 表示编译器接受,coverage-self-reported 表示 Disrobe 自己的覆盖率计数器。比较方法和群体定义了每个结果的范围。
--backend auto 选择已安装的工具。在选择后端之前,请查看命令的帮助和安装指南。
链式运行器通过共享产物和中间表示连接单一用途的遍。一个遍贡献它能证明的输出;下游消费者保留来源并报告不支持的边界。探索架构、遍模型、IR 阶梯和链式运行器。
从文档、快速入门和结果指南开始。使用 disrobe explain <code> 查找诊断信息。对于项目的更改,请阅读贡献指南以及相关功能的测试和证据。
威胁模型描述了信任边界和输入处理。通过 SECURITY.md 报告安全问题。LEGAL.md 描述了项目的法律考量;分析产物的许可取决于您的具体情况。
Disrobe 的每个版本都是专有的,并根据 Disrobe Source-Available License, Version 1.1 提供源代码,该许可证取代 Elastic License 2.0 和 Version 1.0 适用于所有版本,并如重新许可通知所述撤销所有先前的授权。
个人爱好项目、个人学习以及个人进行的无偿独立安全研究、非营利教育和研究以及真正的新闻工作是免费的,如许可证中所定义。
任何由公司或为公司进行的使用都需要付费许可证。 参见商业许可。
必需署名: 本工作使用了 Disrobe,由 1-3-7 创建:https://github.com/1-3-7/disrobe
除贡献分支外的分支、转发、重新品牌、转售、托管和竞争性开发均被禁止。软件按原样提供,风险由用户自行承担。
Copyright (c) 2025-2026 1-3-7. All rights reserved.
作为文档和视觉刷新的一部分,早期的开发提交被合并为一个基线。
| 任务 | 命令 | 输出或下一步 |
|---|
| 查找指标、密钥和静态发现 | scan、frisk、strings、ioc、indicators、behavior | Findings and offsets |
| 检查函数、流程和行为 | query、capabilities、taint、vulnmatch | Queryable IR、ATT&CK/MBC 映射和源到汇报告 |
| 保留注解和结构化产物 | annot、rename、envelope、verify、yara | Artifact envelopes 和分析师状态 |
| 追踪来源并比较运行 | chain、context、status、report、diff、guard、semdiff | Reports、哈希和恢复差异 |
| 收集公共网络数据 | prowl | Explicit network collection,与离线恢复分离 |
| 界面 | 入口点 | 指南 |
|---|
| Rust | 共享核心类型和各个 pass crate | Library APIs |
| Python | 通过 import disrobe 的类型化绑定 | Python bindings |
| HTTP、gRPC 和 LSP | disrobe serve | Service |
| Model Context Protocol | disrobe-mcp 或 disrobe serve --mcp | MCP integration |
| 编辑器和分析工具 | VS Code、IDA Pro、Ghidra、Binary Ninja | Editor integrations |
| GitHub Actions | 仓库 action 和 SARIF 输出 | GitHub Action |
| 本地提交检查 | Hook ID disrobe | pre-commit |
| 浏览器 | 客户端 Wasm worker | Playground |
| 编码工具的项目上下文 | disrobe init --ide | Metadata sidecar |
| 恢复任务 | 具名工具 | Disrobe 的路径 | 如何选择或组合它们 |
|---|
| Python 字节码到源代码 | pycdc、PyLingual、uncompyle6、decompyle3 | 进程内 CPython 1.0 到 3.15 反编译器、嵌套代码对象恢复、源代码/反汇编/AST 输出 | 从内置 Python 反编译器检查恢复的源代码、反汇编和 AST |
| 冻结 Python 提取 | pyinstxtractor-ng、pydecipher | PyInstaller、Nuitka 和 freezer 提取,随后进行字节码恢复 | auto 可以从提取的成员继续经过保护器并进入 Python 反编译器 |
| PyArmor | Pyarmor-Static-Unpack-1shot | 静态 wrapper/runtime 恢复、模式报告、可选静态 BCC 提升 | 提供匹配的 runtime 以恢复 wrapper 数据并检查特定模式的结果 |
| Pickle 检查 | fickling、Python pickletools | 指令跟踪、符号 reducer、分类和值重建 | 在不执行 reducer 的情况下检查;pickletools 对检查进行评分,CPython 在 470 个生成的 fixture 上检查重建 |
| JavaScript 反混淆 | webcrack、synchrony、REstringer | obfuscator.io、JS-Confuser、受支持的 Jscrambler 模式、深奥解码器、常量/控制流恢复 | 使用 js deob 获取显式选项,或当 JS 位于包内时使用 auto |
| JS 解包和 source map | wakaru、webcrack、sourcemapper | 模块提取、source-map 处理、作用域感知重命名、打包 V8 检查 | js unbundle 比自动链式调度暴露更多打包器路由 |
| WebAssembly | WABT wasm-decompile、Binaryen | WAT 和 C/Rust/TypeScript 伪源代码、JSON 摘要、受支持的混淆逆转 | 检查选定的源目标;wasmtime 执行检查在下方独立评估恢复的行为 |
| JVM 源代码 | CFR、Vineflower、Procyon、Fernflower | 原生 classfile 恢复以及保护器/字符串处理 | jvm decompile 将 Disrobe 产物与已安装后端的输出一起写入;CFR 在下方有实测的编译产出结果 |
| Android 包和 DEX | JADX、apktool、androguard、dex2jar | 进程内 Dalvik 恢复、APK 元数据/签名、运行时提取、Java 输出 | DEX/APK 反编译默认使用原生路径;Android 后端需显式选择。JADX 在下方有实测分支 |
| .NET 程序集 | ILSpy、dnSpy、dnSpyEx、de4dot | CIL 恢复以及保护器特定常量、资源、VM 主体和 Native AOT 元数据 | dotnet decompile 将 Disrobe CIL 输出与已安装的渲染器一起写入;--backend auto 选择 ILSpy、dnSpyEx、dnSpy 或 de4dot |
| 原生反编译 | Ghidra、IDA、Binary Ninja | 进程内 x86-64 C/Rust 和 AArch64/ARM32/MIPS32 伪 C;恢复的符号/类型报告 | 使用 --backend ghidra 以无头方式选择 Ghidra,或在交互式分析会话中使用编辑器集成和导出的符号 |
| 加壳原生可执行文件 | upx -d、unipacker、Detect It Easy | 已实现的脱壳器和有界 stub 仿真、重建的 PE 映像、嵌入的加载器模块 | 将恢复的 PE 映像导出到 Ghidra/IDA。下方的 Ghidra 测量比较加壳和重建后的输入 |
| 原生混淆 | Ghidra、IDA、Binary Ninja 和反混淆脚本 | OLLVM/Tigress 变换、MBA 简化、栈字符串、原生元数据和恢复报告 | 选择相关的原生操作/API;仅凭 VM 保护器指纹并不意味着主体恢复 |
| Go 元数据和 garble | GoReSym、redress、gore | pclntab、模块/类型元数据、嵌入文件以及可恢复的 garble 字面量 | go 报告名称/类型;native decompile 单独处理机器码源路径 |
| Swift / Objective-C | swift-demangle、class-dump、jtool2 | 运行时类/协议/选择器数据、符号渲染、fat slice、共享缓存 dylib | 提供存活的映射和子缓存文件;因重命名而被抹除的原始名称需要外部映射 |
| Lua 字节码和 VM | unluac、luadec、LuaDec51 | Lua/LuaJIT/Luau 源代码以及受支持的混淆器和自定义 VM 恢复 | IronBrew2 有真实工具执行差分证据;普通 .luac 恢复和 VM 恢复是不同的操作 |
| Ruby 字节码 | MRI 反汇编 | YARV 和 mruby 源代码、操作码列表、freezer/AOT 分类 | MRI 重新编译对操作码名称召回进行评分;该度量并不确立执行等价性 |
| PHP 层 | php-malware-finder | Eval 链和字面量键循环/密码剥离、Phar 提取、编码器信封报告 | 使用静态层和可用的密钥材料;原生加载器密钥的商业 payload 保持密封 |
| PowerShell、Bash、VBA | PowerDecode、FLARE 工具、olevba | Shell 反混淆、VBA 源代码/p-code 和 stomping、XLM 公式、PDF 动作 | shell 将脚本恢复和文档发现与其余产物分析放在一起 |
| BEAM / ActionScript | Erlang beam_disasm、RABCDAsm | BEAM 调试源/Core Erlang 恢复和 ABC 方法体伪代码 | 在可用时保留调试块;剥离的 BEAM 有单独的真实 Erlang 执行检查 |
| Hermes / React Native | hermes-dec、hbctool、DroidSaw | 运行时提取、HBC 结构、受支持的伪 JavaScript 提升 | HBC 解析涵盖 v60 到 v96;源代码提升有更窄的实测边界。Hermes 到 DEX 的桥接污点未实现 |
| Flutter / Dart AOT | reFlutter、Darter、blutter | Kernel 源表、AOT 声明图、ARM64 主体、字符串、重命名映射解析 | Kernel 源代码和 AOT 元数据是不同的恢复级别;快照版本约束 AOT 解析 |
| 容器和固件 | binwalk、unblob、7-Zip | 已注册格式提取、递归子项路由、固件解码/雕刻、逐成员拒绝报告 | 将提取的成员直接送入语言 pass;比较成员字节,而不是将识别出的 magic 视为成功提取 |
| 密钥和指标 | APKLeaks、TruffleHog、Gitleaks、LinkFinder | 恢复树/APK 发现、令牌偏移、静态字符串、密钥和 IOC 报告 | 扫描 APK 或恢复树;将 APKLeaks 与下方相同的植入密钥进行比较 |
| 格式、打包器、编译器识别 | Detect It Easy、TrID、PEiD、binwalk | 多信号识别、符号、签名和路由提示 | 使用 identify/detect 选择恢复路径,然后检查其实际输出 |
| 能力和污点 | capa、Ghidra 脚本、Joern | 带偏移的 ATT&CK/MBC 发现、规范化 IR 查询、源到汇流报告 | 对恢复的产物运行能力匹配和源到汇分析;污点报告包含其 Juliet 测试群体 |
| 工具和输入 | Disrobe 结果 | 具名工具结果 | 测量检查的内容 |
|---|
| JADX 1.5.5 · Android DEX | 157 / 228 个发出区域编译干净 | 281 / 303 个发出区域编译干净 | 已提交的 EdgeCases DEX;真实 javac,完整源代码编译后对有界区域进行隔离以阻止归因;不同的发出群体 |
| CFR 0.152 · JVM classfile | 181 / 181 个发出区域编译干净 | 152 / 166 个发出区域编译干净 | 已提交的 EdgeCases JAR;相同的编译器/评分器流程;不同的发出群体 |
| APKLeaks 2.6.3 · planted-secrets APK | 8 / 8 个植入密钥 | 5 / 8 个植入密钥 | 同一 APK 上的精确令牌召回;Disrobe 还找到了植入的 AWS secret access key、Basic credential 和 JWT |
| 加壳输入 | Ghidra 函数,加壳 → 重建 | 指令,加壳 → 重建 | 字符串,加壳 → 重建 | 完成的 C 渲染,加壳 → 重建 |
|---|
| UPX · Rust hello | 4 → 287 | 225 → 19,060 | 23 → 179 | 4 → 287 |
| ASPack · Clockres | 5 → 243 | 58 → 10,544 | 48 → 116 | 5 → 210 |
| ASPack · AccessEnum | 5 → 101 | 73 → 5,781 | 62 → 195 | 5 → 101 |
| PECompact · Clockres | 2 → 306 | 148 → 14,603 | 27 → 27 | 1 → 267 |
| PECompact · AccessEnum | 2 → 186 | 155 → 9,278 | 52 → 53 | 2 → 186 |
| MEW · Clockres | 4 → 333 | 125 → 20,990 | 3 → 358 | 未测量 |
| MEW · AccessEnum | 4 → 152 | 125 → 9,592 | 3 → 802 | 未测量 |
| MEW · Autologon | 4 → 295 | 125 → 19,595 | 3 → 406 | 未测量 |
| kkrunchy classic · NASM hello | 4 → 1 | 149 → 10 | 3 → 4 | 4 → 1 |
| 输入 | Disrobe 发出区域 | 具名工具发出区域 | 群体边界 | 复现 |
|---|
| Android DEX | 157 / 228 个发出区域编译干净 | JADX 1.5.5:281 / 303 个发出区域编译干净 | 无跨工具排名:每个工具有自己的发出区域群体 | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| JVM classfile | 181 / 181 个发出区域编译干净 | CFR 0.152:152 / 166 个发出区域编译干净 | 无跨工具排名:每个工具有自己的发出区域群体 | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| 恢复 | 记录结果 | 参考和限制 |
|---|
| Python 3.14.5,固定模块 | 6077 / 6286 个代码对象 | CPython 重新编译并进行规范化操作码结构比较;跳转目标、大多数操作数和其他恢复对象未评分。Result |
| Python 3.14.5,固定核心群体 | 17396 / 18276 个代码对象,本地测量 | 跨 574 个模块的相同规范化比较;这不是语义等价结果。Result |
| 旧版 Python 1.0 到 3.7 | 至少 150 / 191 个 fixture(回归下限) | 时期解释器重新编译或针对原始源代码的结构化令牌。Result |
| Pickle 分类 | 102 / 102 个分类 fixture | pickletools 语义。Result |
| Pickle 重建 | 470 / 470 个重建 fixture 通过重新执行相等性检查 | CPython 重新执行。Result |
| JVM 源代码编译 | 131 / 131 个方法编译 | 真实 javac。Result |
| JVM 行为 | 117 / 131 个方法与观察到的执行匹配 | 真实 JVM;八个方法发散,六个未单独驱动。Result |
| Android DEX | 118 / 118 个验证器呈现的类 | JVM -Xverify:all;37 / 155 个类被链接跳过且未评分。Result |
| .NET C# | 18 / 35 个完整 EdgeCases 类型可独立重新编译 | 真实 Roslyn csc;合法源代码并不确立等价行为。Result |
| .NET VM 主体 | Eazfuscator 模型:67 / 67 条指令;真实 KoiVM:6 / 6 个主体被提升 | 单独的原始/干净构建参考;EazVM 使用仓库内虚拟化器,KoiVM 使用真实工具输出。Evidence |
| WebAssembly | 57 / 57 个符合条件的函数 | wasmtime 在测试输入上比较返回值、陷阱和线性内存的前 4,096 字节。Result |
| 无调试块的 BEAM | 19 / 19 个模块 | Erlang/OTP 27.3.4 重新编译、导出比较和 test/0 输出/退出状态。Result |
| Lua IronBrew2 | 真实 2.7.0 标准和 MAX 输出恢复为匹配执行 | 真实 Lua 解释器针对原始程序;一个 VM 家族。Result |
| Ruby YARV | Greeter 100%;megafile 98.67% 操作码名称召回 | MRI 重新编译;多重集召回忽略顺序、操作数、分支目标和额外指令。Result |
| Go 剥离类型名称 | 838 / 838 个名称 | 来自比较构建的真实 go1.26.3 元数据。Result |
| Hermes HBC v96 | 8 / 8 个函数,零回退操作 | 真实 hermesc 样本,带有原始源代码和函数名称。Result |
| 原生加壳字节 | UPX、FSG、NSPack、Petite、MPRESS .text 在具名已提交对上字节相同;Yoda's Crypter 资源字节相同 | RVA 对齐的原始字节;整映像和资源残差仍单独报告。Per-input table |
| 植入指标 | 6 / 6 个 IOC 类别被表示 | 已提交的端点、清单发现、URL、IPv4、电子邮件和 .onion ground truth。Result |
| MCP 调用图 | 5 / 5 条直接边,全部正确识别 | 剥离的 ELF 与其不同的未剥离工具链孪生体比较。Precision、recall |
| 原生污点 | 93 / 190 条带标签流被召回;零误报,本地测量 | NIST Juliet CWE-78 char/system 切片,gcc 16.2.0 -O2;七个声明的流类别在此切片中没有案例。Result |