Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
disrobe — Rust CLI 套件,通过一条自动流水线对 15+ 生态系统中的原生代码、字节码、脚本、固件和应用包进行静态反编译、去混淆和解包。 | Kitploit
工具/GitHubGitHub/1-3-7/disrobe
Android安全静态分析逆向工程恶意软件分析移动安全二进制分析固件分析
GitHub1-3-7/disrobe

disrobe

Rust CLI 套件,通过一条自动流水线对 15+ 生态系统中的原生代码、字节码、脚本、固件和应用包进行静态反编译、去混淆和解包。

查看仓库
1136125天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站
disrobe: 从编译后的软件中恢复源代码、结构和字节

开始使用 · 支持的输入 · 自动恢复 · 工具对比 · 证据 · 文档

看清软件底层

Disrobe 是一套用 Rust 编写的命令行工具集,用于反编译、反混淆和解包软件。你可以用它来对未知文件进行初步分析、恢复代码以进行逆向工程、提取调查所需的指标,或为反汇编器准备工件。

从字节码和冻结应用中恢复 Python,从 classfile 和 DEX 中恢复 Java,从 CIL 中恢复 C#,从 bundle 中恢复 JavaScript,从自定义虚拟机中恢复 Lua,以及从原生代码中恢复 C 或 Rust。从安装程序、固件、移动包以及 Electron、Tauri 或 Wails 应用中提取文件。将恢复的源代码、符号、字符串、类型和来源信息保留在一起,以便进一步分析。

完整构建目录收录了 170 个家族,涵盖 15 个生态系统,并检测 103 种容器格式。disrobe auto 会识别每一层,运行匹配的处理流程,并沿着恢复出的子项进入各自的恢复路径。专用命令提供更精细的控制、分析报告和可选后端。恢复默认以静态方式运行;源代码、结构、部分输出和缺失密钥边界在结果中保持可区分。

如果 Disrobe 对你有帮助,欢迎考虑为仓库加星。

实际效果

Disrobe CLI:解包、恢复和检查软件

观看完整视频 · 阅读文字记录

2 分 12 秒内演示二十个 CLI 命令:解包原生可执行文件、恢复 Python 和 Lua、拆分 JavaScript 模块、还原 source map、检查 WebAssembly 和 Android 资源、提取指标,并保留报告和工件哈希。最后一章展示项目配置、IDE 设置、分析人员注释和 shell 补全。文字记录包含所录制构建的完整命令清单;能力图谱说明了其支持范围。

开始使用

从 GitHub Releases 下载适用于你平台的压缩包,用发布版的 SHA256SUMS 校验,然后将 disrobe 放入你的 PATH。发布压缩包包含签名包;验证指南说明了如何检查它们。

平台发布目标
Windowsx86-64、ARM64
macOSx86-64、ARM64
Linux使用 glibc 的 x86-64 和 ARM64;使用 musl 的 x86-64

检查你安装的二进制文件:```sh disrobe --version disrobe --help

root@kitploit:~
要从克隆的仓库构建 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/

root@kitploit:~
`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

root@kitploit:~
第一条命令写入 `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。

输入、原始工具结果和复现命令。

将恢复的可执行文件交给 Ghidra

在 Disrobe 将加壳可执行文件导出为重建的 PE 后,相同的 Ghidra 12.1.2 分析会看到不同的代码。这些本地快照使用真实良性加壳 fixture,并记录增加和减少。函数/指令/字符串列来自九输入分析快照;完成的 C 渲染来自单独的六输入反编译器快照。完成的渲染是非空输出,而非源代码正确性评分。

kkrunchy 计数减少。发现更多函数并不一定意味着更多正确函数,这些分析计数不能替代字节比较。阅读 analysis snapshot、decompiler snapshot 以及单独的 native byte-recovery measurements。

检查证据

evidence index 将恢复测量链接到其 fixture、比较方法、命令和结果。

结果区分字节恢复、编译器接受和行为检查。编译器接受和覆盖率计数不是等价性评分。

JADX/CFR 评分细节和复现命令

针对独立参考检查恢复

这些检查将 Disrobe 与原始产物、编译器、解释器或带标签语料库进行比较。它们与比较两个反编译器不同。每个链接结果记录输入群体、先决条件和复现命令。

覆盖率计数及其较小的正确性群体| 表面 | 数量 | 它确立了 | |---|---|---| | PyArmor | 72 / 72 个命名的 v8/v9 默认试用包装器 | 静态解密和完整的根 `CodeObject` 解析,无需外部正确性比较 | | Android,三个真实 APK | 83662 / 83943 个方法被降级,本地 | 自报的方法体覆盖率。独立的验证器群体是 2988 of 2998 个方法体,呈现在隔离载体中 | | Wasm 指令清单 | 1034 of 1034 条指令 | 外部 `wasm-tools` 分母和可重新汇编的 WAT;降级分子为自行计数 | | Luau 指令表 | 86 of 88 个条目被提升 | Disrobe 声明的表;`BREAK` 和 `NEWCLASSMEMBER` 仍被解码但未解析 | | Swift 符号 | 已提交的符号群体渲染为固定字符串 | 回归一致性,无需外部 demangler 比较 | | OLLVM 扁平化 | 9 个到达状态,共 9 个派生状态 | 两个已提交函数的调度器状态覆盖率;两个计数均在进程内派生 | | 混合布尔运算 | 316 个条目;参考运行回答了 247 个,拒绝了 69 个;外部求解器证明了 236 个答案,未反驳任何答案 | 预算内恢复和留出原始数据;未回答或未证明的条目不会成为求解器证明的结果 | | 容器 | 42 条通用路由写入成员字节 | 在 103 种检测到的格式中实际覆盖的广度;LUKS1 有其自己的明文比较 |

完整证据记录描述了每个群体和评分规则。

图表标签使用 strong 表示独立正确性参考,recompile-only 表示编译器接受,coverage-self-reported 表示 Disrobe 自己的覆盖率计数器。比较方法和群体定义了每个结果的范围。

浏览结果、工具比较和复现前提条件以了解各项测量。

了解限制

  • 编译输出会丢失信息。 原始注释、格式、名称和部分类型信息可能缺失。
  • 家族识别比恢复更宽泛。 目录匹配或成功解析器可以与部分源代码输出共存。请阅读家族层级和实际结果。
  • 原生恢复取决于架构和输出语言。 原生指南列出了支持的路径及其测试。
  • 商业 VM 保护器检测不是通用的源代码恢复承诺。 内部辅助工具和受保护区段产物不能建立完整的 CLI 恢复路径。参见原生解包。
  • 缺失的密钥仍然缺失。 运行时派生的密钥和缺失的名称哈希种子无法从不支持的产物中推断出来。Python、PHP和容器指南说明了特定格式的边界。
  • 外部后端有其自己的要求。 某些命令可以通过 --backend auto 选择已安装的工具。在选择后端之前,请查看命令的帮助和安装指南。
  • 分析默认采用静态恢复。 这并不意味着不受信任的输入是无害的。资源限制、显式选择的动态操作和外部进程边界在取证安全中描述。

理解流水线

Disrobe 的中间表示,从字节到程序结构再到源代码

链式运行器通过共享产物和中间表示连接单一用途的遍。一个遍贡献它能证明的输出;下游消费者保留来源并报告不支持的边界。探索架构、遍模型、IR 阶梯和链式运行器。

文档和贡献

从文档、快速入门和结果指南开始。使用 disrobe explain <code> 查找诊断信息。对于项目的更改,请阅读贡献指南以及相关功能的测试和证据。

威胁模型描述了信任边界和输入处理。通过 SECURITY.md 报告安全问题。LEGAL.md 描述了项目的法律考量;分析产物的许可取决于您的具体情况。

许可证

License: Disrobe Source-Available

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、behaviorFindings and offsets
检查函数、流程和行为query、capabilities、taint、vulnmatchQueryable IR、ATT&CK/MBC 映射和源到汇报告
保留注解和结构化产物annot、rename、envelope、verify、yaraArtifact envelopes 和分析师状态
追踪来源并比较运行chain、context、status、report、diff、guard、semdiffReports、哈希和恢复差异
收集公共网络数据prowlExplicit network collection,与离线恢复分离
界面入口点指南
Rust共享核心类型和各个 pass crateLibrary APIs
Python通过 import disrobe 的类型化绑定Python bindings
HTTP、gRPC 和 LSPdisrobe serveService
Model Context Protocoldisrobe-mcp 或 disrobe serve --mcpMCP integration
编辑器和分析工具VS Code、IDA Pro、Ghidra、Binary NinjaEditor integrations
GitHub Actions仓库 action 和 SARIF 输出GitHub Action
本地提交检查Hook ID disrobepre-commit
浏览器客户端 Wasm workerPlayground
编码工具的项目上下文disrobe init --ideMetadata sidecar
恢复任务具名工具Disrobe 的路径如何选择或组合它们
Python 字节码到源代码pycdc、PyLingual、uncompyle6、decompyle3进程内 CPython 1.0 到 3.15 反编译器、嵌套代码对象恢复、源代码/反汇编/AST 输出从内置 Python 反编译器检查恢复的源代码、反汇编和 AST
冻结 Python 提取pyinstxtractor-ng、pydecipherPyInstaller、Nuitka 和 freezer 提取,随后进行字节码恢复auto 可以从提取的成员继续经过保护器并进入 Python 反编译器
PyArmorPyarmor-Static-Unpack-1shot静态 wrapper/runtime 恢复、模式报告、可选静态 BCC 提升提供匹配的 runtime 以恢复 wrapper 数据并检查特定模式的结果
Pickle 检查fickling、Python pickletools指令跟踪、符号 reducer、分类和值重建在不执行 reducer 的情况下检查;pickletools 对检查进行评分,CPython 在 470 个生成的 fixture 上检查重建
JavaScript 反混淆webcrack、synchrony、REstringerobfuscator.io、JS-Confuser、受支持的 Jscrambler 模式、深奥解码器、常量/控制流恢复使用 js deob 获取显式选项,或当 JS 位于包内时使用 auto
JS 解包和 source mapwakaru、webcrack、sourcemapper模块提取、source-map 处理、作用域感知重命名、打包 V8 检查js unbundle 比自动链式调度暴露更多打包器路由
WebAssemblyWABT wasm-decompile、BinaryenWAT 和 C/Rust/TypeScript 伪源代码、JSON 摘要、受支持的混淆逆转检查选定的源目标;wasmtime 执行检查在下方独立评估恢复的行为
JVM 源代码CFR、Vineflower、Procyon、Fernflower原生 classfile 恢复以及保护器/字符串处理jvm decompile 将 Disrobe 产物与已安装后端的输出一起写入;CFR 在下方有实测的编译产出结果
Android 包和 DEXJADX、apktool、androguard、dex2jar进程内 Dalvik 恢复、APK 元数据/签名、运行时提取、Java 输出DEX/APK 反编译默认使用原生路径;Android 后端需显式选择。JADX 在下方有实测分支
.NET 程序集ILSpy、dnSpy、dnSpyEx、de4dotCIL 恢复以及保护器特定常量、资源、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 元数据和 garbleGoReSym、redress、gorepclntab、模块/类型元数据、嵌入文件以及可恢复的 garble 字面量go 报告名称/类型;native decompile 单独处理机器码源路径
Swift / Objective-Cswift-demangle、class-dump、jtool2运行时类/协议/选择器数据、符号渲染、fat slice、共享缓存 dylib提供存活的映射和子缓存文件;因重命名而被抹除的原始名称需要外部映射
Lua 字节码和 VMunluac、luadec、LuaDec51Lua/LuaJIT/Luau 源代码以及受支持的混淆器和自定义 VM 恢复IronBrew2 有真实工具执行差分证据;普通 .luac 恢复和 VM 恢复是不同的操作
Ruby 字节码MRI 反汇编YARV 和 mruby 源代码、操作码列表、freezer/AOT 分类MRI 重新编译对操作码名称召回进行评分;该度量并不确立执行等价性
PHP 层php-malware-finderEval 链和字面量键循环/密码剥离、Phar 提取、编码器信封报告使用静态层和可用的密钥材料;原生加载器密钥的商业 payload 保持密封
PowerShell、Bash、VBAPowerDecode、FLARE 工具、olevbaShell 反混淆、VBA 源代码/p-code 和 stomping、XLM 公式、PDF 动作shell 将脚本恢复和文档发现与其余产物分析放在一起
BEAM / ActionScriptErlang beam_disasm、RABCDAsmBEAM 调试源/Core Erlang 恢复和 ABC 方法体伪代码在可用时保留调试块;剥离的 BEAM 有单独的真实 Erlang 执行检查
Hermes / React Nativehermes-dec、hbctool、DroidSaw运行时提取、HBC 结构、受支持的伪 JavaScript 提升HBC 解析涵盖 v60 到 v96;源代码提升有更窄的实测边界。Hermes 到 DEX 的桥接污点未实现
Flutter / Dart AOTreFlutter、Darter、blutterKernel 源表、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 DEX157 / 228 个发出区域编译干净281 / 303 个发出区域编译干净已提交的 EdgeCases DEX;真实 javac,完整源代码编译后对有界区域进行隔离以阻止归因;不同的发出群体
CFR 0.152 · JVM classfile181 / 181 个发出区域编译干净152 / 166 个发出区域编译干净已提交的 EdgeCases JAR;相同的编译器/评分器流程;不同的发出群体
APKLeaks 2.6.3 · planted-secrets APK8 / 8 个植入密钥5 / 8 个植入密钥同一 APK 上的精确令牌召回;Disrobe 还找到了植入的 AWS secret access key、Basic credential 和 JWT
加壳输入Ghidra 函数,加壳 → 重建指令,加壳 → 重建字符串,加壳 → 重建完成的 C 渲染,加壳 → 重建
UPX · Rust hello4 → 287225 → 19,06023 → 1794 → 287
ASPack · Clockres5 → 24358 → 10,54448 → 1165 → 210
ASPack · AccessEnum5 → 10173 → 5,78162 → 1955 → 101
PECompact · Clockres2 → 306148 → 14,60327 → 271 → 267
PECompact · AccessEnum2 → 186155 → 9,27852 → 532 → 186
MEW · Clockres4 → 333125 → 20,9903 → 358未测量
MEW · AccessEnum4 → 152125 → 9,5923 → 802未测量
MEW · Autologon4 → 295125 → 19,5953 → 406未测量
kkrunchy classic · NASM hello4 → 1149 → 103 → 44 → 1
输入Disrobe 发出区域具名工具发出区域群体边界复现
Android DEX157 / 228 个发出区域编译干净JADX 1.5.5:281 / 303 个发出区域编译干净无跨工具排名:每个工具有自己的发出区域群体cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr
JVM classfile181 / 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 个分类 fixturepickletools 语义。Result
Pickle 重建470 / 470 个重建 fixture 通过重新执行相等性检查CPython 重新执行。Result
JVM 源代码编译131 / 131 个方法编译真实 javac。Result
JVM 行为117 / 131 个方法与观察到的执行匹配真实 JVM;八个方法发散,六个未单独驱动。Result
Android DEX118 / 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
WebAssembly57 / 57 个符合条件的函数wasmtime 在测试输入上比较返回值、陷阱和线性内存的前 4,096 字节。Result
无调试块的 BEAM19 / 19 个模块Erlang/OTP 27.3.4 重新编译、导出比较和 test/0 输出/退出状态。Result
Lua IronBrew2真实 2.7.0 标准和 MAX 输出恢复为匹配执行真实 Lua 解释器针对原始程序;一个 VM 家族。Result
Ruby YARVGreeter 100%;megafile 98.67% 操作码名称召回MRI 重新编译;多重集召回忽略顺序、操作数、分支目标和额外指令。Result
Go 剥离类型名称838 / 838 个名称来自比较构建的真实 go1.26.3 元数据。Result
Hermes HBC v968 / 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