Disrobe 是一款静态反编译器、反混淆器和脱壳工具。 它逐层剥离编译后软件中的加壳与混淆,恢复出底层源代码或原始字节。
将可执行文件、应用包、脚本或固件镜像交给 disrobe auto。它会识别每一层(安装程序、归档、加壳器、冻结器、保护器、混淆器、字节码),用对应的恢复流程将其移除,然后对恢复产物再次运行,直到没有任何流程能识别剩余内容。单个 Rust 二进制文件即可覆盖 Python、JavaScript 与 WebAssembly、Java 与 Android、.NET、原生 PE、ELF 与 Mach-O 代码、Go、Lua、PHP、Ruby、Erlang 与 Elixir、ActionScript、shell 脚本与 Office 宏、React Native 与 Flutter 应用、安装程序以及固件。disrobe catalog 列出了它在 15 个生态系统中识别出的 169 个加壳器、保护器、混淆器和字节码家族。
各引擎均为内置。Python 字节码反编译无需安装 Python,JavaScript 恢复无需 Node.js,Java、Android 和 .NET 反编译器无需 JVM 或 .NET SDK;jvm decompile 和 dotnet decompile 仅在 --backend 指定时才会运行已安装的外部反编译器。除非传入 --allow-dynamic(仅适用于 PyArmor v6 和 v7),Disrobe 不会启动它所分析的程序。安全模型列出了用于评估来自输入的代码的有界解释器,以及 Disrobe 启动的主机工具。
它面向恶意软件分析师、逆向工程师、事件响应人员、CTF 选手和安全研究人员。
许可证: Disrobe Source-Available License 1.1。个人业余项目与学习、无偿的独立安全研究、非营利教育与研究以及新闻工作,按许可证定义均免费。任何由公司进行或为公司进行的使用均需付费许可证。
快速开始 · 它能恢复什么 · 实测结果 · 工作原理 · 安全模型 · 文档
从 GitHub Releases 下载适用于你平台的归档文件,用 SHA256SUMS 校验,然后将 disrobe(Windows 上为 disrobe.exe)放入你的 PATH。然后运行:
disrobe identify suspect.exe # compiler, packer, and protector, with evidence
disrobe auto suspect.exe --out recovered/ # remove the layers Disrobe can recover
disrobe context --out recovered/ # what each pass recovered, and at what confidence
对提交到此仓库的 UPX 打包 Rust 程序(corpus/native/packers/upx/hello.packed.nrv2b.exe)运行 identify 及解包步骤的记录输出:
$ disrobe identify hello.packed.exe
format: pe64 (64-bit) subsystem=windows-cui
packer UPX (96%) -> disrobe native unpack
- [section UPX0] UPX characteristic section
- [section UPX1] UPX characteristic section
- [section UPX2] UPX characteristic section
- [byte scan] UPX packer magic
...
$ disrobe native unpack hello.packed.exe --out recovered/hello.bin
native unpack: OK
input: hello.packed.exe
packer: upx
status: Implemented
packed_size: 53248
recovered: 116810 bytes
wrote: recovered/hello.bin
解包基准测试恢复同一文件并与原始构建进行比较:.text 节字节完全一致,为 73,160 字节,无任何差异(解包测量)。
发布归档覆盖 Windows(x86-64、ARM64)、macOS(x86-64、ARM64)以及 Linux(x86-64 和 ARM64 使用 glibc,静态 x86-64 使用 musl)。每个归档都有单独的 cosign 签名包,SECURITY.md 说明了校验方式。从源码构建需要 rust-toolchain.toml 中固定的 Rust 工具链(1.96.1;最低支持版本为 1.95)以及用于原生依赖的 C 工具链:
git clone https://github.com/1-3-7/disrobe
cd disrobe
cargo build --locked --release -p disrobe-cli --bin disrobe
安装指南涵盖了功能标志和可选的外部后端。运行 disrobe doctor 可探测 46 到 51 个外部工具(具体数量取决于平台),并查看已安装哪些可选后端。
每一行列出了 Disrobe 可读取的格式及其移除的保护。当 disrobe catalog 列出某个家族时,所显示的级别即为该目录中的级别。首先列出的家族可被恢复。部分家族会被尽可能剥离,结果会说明剩余内容。仅检测家族会被识别,结果会说明为何其余部分无法恢复,通常是因为密钥仅在运行时存在。以粗体显示的名称是基于真实工具的输出进行评分的,并已提交到此仓库;其他名称则基于为测试编写的样本进行评分,或仅被检测。每个生态系统都链接到其指南。Evidence 列对每一行进行标注:real 链接到对真实编译器或工具输出进行评分的测试或结果,synthetic 表示仅基于为测试构建的输入进行评分,claimed 表示没有任何测试覆盖。