
Rust-CLI-Suite, die nativen Code, Bytecode, Skripte, Firmware und App-Pakete aus über 15 Ökosystemen über eine einzige automatische Pipeline statisch dekompiliert, deobfuskiert und entpackt.
Erste Schritte · Unterstützte Eingaben · Automatische Wiederherstellung · Werkzeugvergleiche · Nachweise · Dokumentation
Disrobe ist eine Rust-Kommandozeilen-Suite zum Dekompilieren, Deobfuskieren und Entpacken von Software. Nutze sie, um eine unbekannte Datei zu triagieren, Code für Reverse Engineering wiederherzustellen, Indikatoren für eine Untersuchung zu extrahieren oder Artefakte für einen Disassembler vorzubereiten.
Stelle Python aus Bytecode und eingefrorenen Anwendungen wieder her, Java aus Classfiles und DEX, C# aus CIL, JavaScript aus Bundles, Lua aus benutzerdefinierten virtuellen Maschinen sowie C oder Rust aus nativem Code. Extrahiere Dateien aus Installern, Firmware, mobilen Paketen und Electron-, Tauri- oder Wails-Anwendungen. Halte wiederhergestellten Quellcode, Symbole, Strings, Typen und Provenienz für die weitere Analyse zusammen.
Der vollständige Build katalogisiert 170 Familien über 15 Ökosysteme hinweg und erkennt 103 Container-Formate. disrobe auto identifiziert jede Ebene, führt einen passenden Durchlauf aus und folgt wiederhergestellte Kindelemente in ihre eigenen Wiederherstellungspfade. Dedizierte Befehle bieten feinere Steuerung, Analyseberichte und optionale Backends. Die Wiederherstellung läuft standardmäßig statisch ab; Quellcode, Struktur, Teilausgaben und Grenzen fehlender Schlüssel bleiben im Ergebnis unterscheidbar.
Wenn Disrobe für dich nützlich ist, ziehe in Betracht, das Repository mit einem Stern zu versehen.
Das vollständige Video ansehen · Das Transkript lesen
Zwanzig CLI-Befehle in 2 Minuten 12 Sekunden: eine native ausführbare Datei entpacken, Python und Lua wiederherstellen, JavaScript-Module aufteilen, Source Maps wiederherstellen, WebAssembly und Android-Ressourcen inspizieren, Indikatoren extrahieren und Berichte sowie Artefakt-Hashes bewahren. Das letzte Kapitel zeigt Projektkonfiguration, IDE-Einrichtung, Analysten-Annotationen und Shell-Vervollständigungen. Das Transkript enthält das vollständige Befehlsverzeichnis des aufgezeichneten Builds; die Fähigkeitskarte erläutert ihre Unterstützungsgrenzen.
Lade das Archiv für deine Plattform von GitHub Releases herunter, prüfe es gegen die SHA256SUMS des Releases und lege disrobe in deinen PATH. Release-Archive enthalten Signatur-Bundles; die Verifikationsanleitung erläutert, wie man sie inspiziert.
| Plattform | Release-Ziele |
|---|---|
| Windows | x86-64, ARM64 |
| macOS | x86-64, ARM64 |
| Linux | x86-64 und ARM64 mit glibc; x86-64 mit musl |
Prüfe die installierte Binärdatei:```sh disrobe --version disrobe --help
Um die CLI aus einem Klon zu erstellen, installiere die Rust-Toolchain des Repositorys und die [nativen Build-Voraussetzungen](https://github.com/1-3-7/disrobe/blob/main/docs/src/installation.md) und führe dann aus:```sh
cargo build --locked --release -p disrobe-cli --bin disrobe
Die ausführbare Datei ist target/release/disrobe oder target/release/disrobe.exe unter Windows. Siehe die Installationsanleitung für Feature-Flags und Slim-Builds.
Beginnen Sie mit einer Anwendung, einer Bibliothek oder einem Paket. Identifizieren Sie es, stellen Sie seine erkannten Schichten wieder her und untersuchen Sie dann die Wiederherstellungszusammenfassung:```sh disrobe identify path/to/application disrobe auto path/to/application --out recovered/ --capture-stages disrobe context --out recovered/
`identify` meldet das Format und die verfügbaren Signale. `auto` extrahiert und stellt die erkannten Ebenen wieder her. `context` fasst die resultierenden Durchläufe, die Konfidenz und die Herkunft zusammen. Mit `--capture-stages` können Sie jede Stufe unter `recovered/01-*/`, `recovered/02-*/` und `recovered/final/` untersuchen; `chain.json` zeichnet die Topologie und Hashes auf, und `recovery.json` zeichnet Ergebnisse und Zeitmessungen auf.
Verwenden Sie einen dedizierten Befehl, wenn Sie die benötigte Ausgabe kennen:```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/
Der native Decompiler gibt standardmäßig C auf x86-64 aus; --format rust wählt Rust. AArch64, ARM32 und MIPS32 geben Pseudo-C aus. native export baut unterstützte gepackte PE-Images für ein externes Analysewerkzeug neu auf; webview schreibt den wiederhergestellten Frontend-Asset-Baum, ohne die Anwendung zu starten.
Das Repository enthält ein winziges WebAssembly-Modul für den Browser-Playground. Aus einem Klon heraus, mit der vollständigen CLI in deinem PATH:```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
Der erste Befehl schreibt `add.summary.json`; der zweite schreibt WebAssembly-Text nach `add.lifted.wat`. Die automatische Wiederherstellung
wählt eine verfügbare Kette aus und schreibt ihre Artefakte unter `recovered/`; `--capture-stages` behält
Zwischenergebnisse. Diese Operationen untersuchen das Modul, ohne seine exportierte Funktion auszuführen.
Untersuchen Sie die wiederhergestellten Dateien zusammen mit dem Bericht: Die Identifizierung allein belegt keine Wiederherstellung. Nicht unterstützte Konstrukte, fehlendes Schlüsselmaterial und nicht verfügbare Ketten erscheinen im Ergebnis. Der [Ergebnisleitfaden](https://github.com/1-3-7/disrobe/blob/main/docs/src/reading-a-result.md) erklärt Artefakte, Diagnosen, Teilergebnisse und Provenienz.
[Den Browser-Playground öffnen](https://1-3-7.github.io/disrobe/playground/) · [Dem Quickstart folgen](https://github.com/1-3-7/disrobe/blob/main/docs/src/quickstart.md)
## Finden Sie Ihre Eingabe
**Recover** (Wiederherstellen) bedeutet, dass ein erreichbarer Pfad Quellcode, Bytes oder Struktur ausgibt. **Partial** (Teilweise) bedeutet, dass nur ein Teil dieser Informationen wiederhergestellt wird. **Detect-only** (Nur-Erkennung) bedeutet, dass die Familie identifiziert wird, ohne ihren geschützten Inhalt wiederherzustellen. Diese Stufen beschreiben Operationen auf unterstützten Eingaben; ein Familienname allein ist keine Garantie dafür, dass jede Version oder Konfiguration wiederhergestellt wird. Die folgenden Listen enthalten den vollständigen Familienkatalog und zusätzliche Formate, die durch dedizierte Befehle und Extraktoren bereitgestellt werden.
| Eingabe | Wiederherstellung und Ausgabe | Befehle und Leitfaden |
|---|---|---|
| Python | CPython 1.0 bis 3.15 Bytecode und Marshal zu Quellcode; PyPy, MicroPython `.mpy` v0 bis v6, Jython, IronPython und Brython Disassembly; Extraktion eingefrorener Payloads; Cython `.pyd`/`.so` Namen, Signaturen und struktureller Fallback | `py`, `pyinstaller`, `pyarmor`, `pyfreeze`, `nuitka` · [Python](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md) |
| JavaScript / TypeScript | Quellcode-Deobfuskierung, Umkehrung der Minifizierung, Modulaufteilung, Source Maps, V8 Cached-Data- und Packaged-Runtime-Inspektion | `js` · [JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) |
| WebAssembly | `.wasm` zu WAT, Rust, TypeScript, C-Pseudocode oder JSON; Component Model und GC-Typgraphen-Inspektion; unterstützte Obfuskierungsumkehrung | `wasm` · [WebAssembly](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) |
| JVM / Android | `.class`, JAR, DEX, APK, AAB; Java-Quellcode, Kotlin/Scala-Idiome, Manifest- und Signierungsinformationen, Protector-Berichte und Mapping-Sidecars | `jvm`, `apk` · [JVM und Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) |
| .NET | PE/CLR-Metadaten und CIL zu C#, F# oder VB-Pseudocode; ReadyToRun- und Native-AOT-Inspektion; Extraktion von Single-File-Bundles | `dotnet` · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) |
| Native | PE32/PE64, EFI PE, ELF32/ELF64, Kernelmodule, Thin/Fat Mach-O, COFF, MZ, NE, LE, LX und Raw-Code-Identifizierung oder -Analyse; Quellcodeausgabe auf den oben genannten architekturspezifischen Pfaden | `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 Runtime-Metadaten, entfernte Funktions- und Typnamen, `embed.FS`-Dateien, Garble-Berichte und wiederherstellbare Literale | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Mach-O-Klassen, Protokolle, Felder, Selektoren, demangelte Symbole; Universal-Slices; dyld Shared-Cache-Dylibs | `swift`, `macho` · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) |
| Lua | Lua 5.1 bis 5.4, LuaJIT 2.0/2.1, Luau-Bytecode, Garry's Mod Lua (GLua); Quellcode- und pro-Eingabe-Treueberichte; unterstützte VM- und String-Wiederherstellung | `lua` · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) |
| PHP | Quellcode-/Eval-Ketten-Ablösung, Literal-Key-Decode-Schleifen und AES-Schichten, Phar-Extraktion, serialisierte `op_array`-Wiederherstellung; kommerzielle Encoder-Hüllen bleiben schlüsselbeschränkt | `php` · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) |
| Ruby | MRI/YARV 2.6 bis 3.4 InstructionSequence-Binärdateien und mruby RITE-Bytecode zu Ruby; Freezer- und AOT-Klassifizierung | `ruby` · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) |
| Erlang / Elixir | BEAM-Module und EZ-Archive; erhaltener abstrakter Code oder `Dbgi` zu Quellcode, Core-Erlang-Fallback, Instruktionsauflistung | `beam` · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) |
| ActionScript 3 | SWF FWS/CWS/ZWS `DoABC`-Blöcke und roher ABC-Bytecode zu Disassembly und AS3-Pseudocode | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| Mobile Runtimes | Hermes v60 bis v96 Header-Parsing, v62/v71/v74/v76/v83/v84/v89/v96 Pseudo-JavaScript-Lift; Flutter Dart Kernel-Quellcodekörper; ARM64 AOT-Deklarationen, Strings und Disassembly | `hermes`, `flutter`, `mobile` · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md) |
| Shell / Dokumente | PowerShell, Bash, Batch, VBScript, WSH; VBA3/5/6/7 P-Code und Stomping; Office-Makro-Quellcode, BIFF8/BIFF12 XLM-Formeln, PDF-eingebettete Skripte/Aktionen | `shell` · [Shell und Dokumente](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| Andere Sprachartefakte | Perl Op-Trees/Bytecode, R RDS und Rcpp-Metadaten, Tcl Starkits, Haxe JS/SWF/HashLink/Neko-Ausgaben; Nim, Zig, Crystal und D Fingerprints, Symbole und Teilstruktur | `auto`, Bibliotheks-APIs · [Skriptsprachen](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 | Protokoll-Disassembly, symbolischer Trace, Rekonstruktion und Klassifizierung ohne Aufruf von Pickle-Reducern | `pickle` · [Pickle](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/pickle.md) |
| Archive / Firmware / Frontends | Die vollständige Container-Liste unten; Electron ASAR, Tauri v1/v2 eingebettete Maps, Wails v2 `embed.FS`-Bäume | `extract`, `webview`, `auto` · [Container](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: jeder benannte Freezer, Protector und Quellcode-Obfuskator</strong></summary>
| Familie oder Format | Unterstützung und Voraussetzung |
|---|---|
| PyInstaller 2.x bis 6.20+ | Wiederherstellung eingebetteter Archive und Bytecode, einschließlich unterstützter AES-CTR/CFB-Schichten |
| Nuitka onefile, standalone, module, wheel | Extraktion von Onefile-Payloads; Wiederherstellung von Symbolen und Python-sichtbarer Struktur aus kompilierten Formen |
| cx_Freeze, py2exe, shiv, pex, Briefcase | Packager-Extraktion über `pyfreeze`; der Befehl bleibt experimentell |
| PyOxidizer | Experimentelle, unvalidierte Extraktion |
| SourceDefender `.pye` | Statische Entschlüsselung über `py sourcedefender` und `sourcedefender.decrypt` |
| PyArmor v3 (Legacy-DES), PyArmor v4 (Legacy-Mixed), PyArmor v5 (Legacy-AES) | Nur-Erkennung: RSA-umhüllte Schlüsselgrenze |
| PyArmor v6, PyArmor v7 | Teilweise statische Wiederherstellung; Super-Modus und nicht verfügbare Schlüssel schränken die Ausgabe ein |
| PyArmor v8, PyArmor v9 / 9-Pro | Statische Wrapper-Wiederherstellung, wo Schlüsselmaterial verfügbar ist. Das veröffentlichte <!-- m:pyarmor_frac -->72 / 72<!-- /m --> Ergebnis zählt vollständige Root-`CodeObject`-Dekodierung nur für benannte v8/v9 Default-Trial-Wrapper; es belegt keine Quellcode-Äquivalenz und deckt weder registrierte Lizenz/Pro, BCC noch Super-Modus ab |
| Kramer / Specter, Berserker, BlankOBF, PlusOBF, Wodx, pyobfuscate.com, pyobfuscate.com (2026 XOR/Lambda), PyObfuscator (mauricelambert), Manglify, Oxyry, pyminifier, Online-Obfuskator-Familie, Xindex, Patchwork, pyc-zipper | Statische Quellcode-/Loader-Wiederherstellung über den AST-Evaluator; einzelne Schichten und Reste werden berichtet |
| Jawbreaker, ObfuXtreme | Wiederherstellung des im Artefakt vorhandenen Körpers; zur Laufzeit abgerufene Payloads bleiben abwesend |
| python-obfuscator (PyPI), pyobfus, Pypacker | Teilweise Wrapper-Ablösung und Klassifizierung |
PyArmor kann die passende Runtime-Datei neben dem Wrapper benötigen. Sein dedizierter BCC-Pfad erfordert `--allow-bcc` und gibt statische native Lifts plus Python-Skelette für modellierte Körper aus; pfadbewusste automatische Wiederherstellung kann dieselben BCC-Artefakte veröffentlichen. Nur der PyArmor v6/v7 Dynamic-Hook führt Beispielcode aus, hinter `--allow-dynamic` mit einem Watchdog. `--allow-bcc` erlaubt nur In-Tree-Statikanalyse und führt weder das Beispiel aus noch ruft es externe Tools auf. [Versions- und Modusdetails](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor).
</details>
<details>
<summary><strong>JavaScript, WebAssembly und paketierte Webanwendungen</strong></summary>
| Familie oder Format | Unterstützung und Route |
|---|---|
| obfuscator.io / javascript-obfuscator, JS-Confuser | Wiederherstellung unterstützter String-Arrays, Dispatcher-/Control-Flow-Transformationen, opaker Prädikate und Loader-Schichten; direkte Befehle und `js.deob` |
| Jscrambler, js-obfuscator (jsobfu) | Teilweise Template- und statische Transformations-Wiederherstellung |
| JSFuck, aaencode, jjencode, JSFiretruck, Dean Edwards Packer | Statische Dekodierung über dedizierte Operationen und erkannte Kettenrouten |
| JSDefender, Arxan / Digital.ai | Erkennung und teilweise Ablösung statischer Transformationen; geschützte kommerzielle JS-Operationen erfordern die Autorisierungsoption des Befehls |
| PACE | Nur-Erkennung |
| webpack 4, webpack 5, Vite, Rollup, Rolldown, esbuild, Turbopack, Bun, Parcel, Browserify, SystemJS; AMD-Module | Direktes Unbundling/Modul-Wiederherstellung. Die Kette dispatcht webpack und Vite; Katalogmarker für andere Bundler machen diese Routen nicht von selbst automatisch |
| bytenode `.jsc`, Node SEA, nexe, nw.js | Inspektion/Carving paketierter V8-Daten; Node SEA und bytenode haben explizite Kettenzweige |
| Electron ASAR, Tauri v1/v2, Wails v2 | Wiederherstellung eingebetteter Frontend-Bäume; Electron/Tauri verwenden `webview.carve`, Wails verwendet `go.classify`; direktes `webview` behandelt alle drei |
| Bun standalone, Deno eszip v2 bis v2.3 / `deno compile` | Wiederherstellung eingebetteter Modulgraphen über die jeweiligen Container-Reader; eszip bietet auch einen direkten Rust-Reader |
| Wobfuscator, Jscrambler WASM, wasm-mixer / Wasmixer | Teilweise Umkehrung unterstützter Transformationen über `wasm.deob`; werkzeugförmige Fixtures bewerten die Transformationen, ohne dass committete Ausgaben von diesen Obfuskatoren selbst vorliegen |
| Tigress → Emscripten, wasm-name-obfuscator | Erkennen und klassifizieren; der Tigress-Helper liegt außerhalb des `wasm deob`-Ausführungspfads, und zerstörte Originalnamen bleiben nicht verfügbar |
[JavaScript-Routen](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) · [Wasm-Grenzen](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) · [Eingebettete Frontend-Layouts](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md).
</details>
<details>
<summary><strong>Native Packer, Protectors und Obfuskierungsfamilien</strong></summary>
| Familie | Unterstützung und Route |
|---|---|
| Donut, sRDI | Wiederherstellung des eingebetteten Moduls aus unterstützten Shellcode-Loader-Layouts |
| UPX, ASPack, Petite, MPRESS, FSG, PECompact, Yoda's Crypter, NSPack, MEW, kkrunchy | Implementierte Unpack-Routinen, erreichbar über `native unpack` und die Packer-Kette; Treue variiert je nach Familie und Exemplar |
| ASProtect, Morphine, nPack, NeoLite, PolyCryptor, Warzone Crypter | `StubEvalPending`: Emulator-Verhalten hat spezifikationsbasierte Stub-Evidenz; echte herstellergespackte Wiederherstellung ist unvalidiert und es wird kein Unpack-Dispatch beworben |
| Yoda's Protector, VMProtect, Themida / WinLicense | CLI und Auto nur-Erkennung. Separate Rust-Helper bieten original-unterstütztes Carving oder Wiederherstellung geschützter Abschnitte; sie belegen keine Devirtualisierung des gesamten Programms |
| PE-Protector, PELock, Enigma Protector, Armadillo, Obsidium, WinLicense | Nur-Erkennung |
| DotNetPatcher, NetCryptor | Delegieren die Managed-Schicht an den .NET-Durchlauf |
| OLLVM-Flattening, Bogus Control Flow, Instruktionssubstitution; Tigress CFF | Unterstützte statische Deobfuskierungs-Transformationen und Berichte über die nativen Rust-APIs; anwendbare Analyse erscheint in nativen Wiederherstellungsberichten |
| Alcatraz, Emotet CFF, Mirai, Dridex, Trickbot, obfus.h, Cryptify (rust-obfuscator), guardian-rs, obfusheader.h, obfuscxx, Amice | Benannte native Obfuskierungssignaturen; einzelne String-/Control-Flow-Helper haben eine engere Wiederherstellung als die vollständig erkannte Familie |
Die native Analyse stellt außerdem Rust/C++-Symbole, C++-RTTI und Vtables, Delphi/C++Builder-Objektmodelle und DFM-Ressourcen, DWARF/PDB/STABS-Informationen, Importe, Aufrufgraphen, Krypto-Signaturen und FLIRT-Matches wieder her. Die Instruktionsanalyse umfasst x86, ARM, RISC-V, MIPS, PowerPC, SPARC, eBPF und AVR; die Quellcodeausgabe ist die kleinere, oben aufgeführte Architekturmenge. [Native Analyse](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) · [Unpacking- und Byte-Wiederherstellungs-Evidenz](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-unpack.md) · [Deobfuskierung](https://github.com/1-3-7/disrobe/blob/main/docs/src/anti-analysis.md).
</details>
<details>
<summary><strong>JVM-, Android-, .NET- und Mobile-Paketfamilien</strong></summary>
| Familie | Unterstützung und Voraussetzung |
|---|---|
| Zelix KlassMaster, Allatori, Stringer, DashO | String-Wiederherstellung für unterstützte Muster, gefolgt von Classfile-Dekompilierung |
| DexGuard | Erkennung, strukturelle Ablösung und In-Class-String-Decrypt-Emulation für unterstützte geschlüsselte Konstanten |
| BlackObfuscator | DEX-Dispatcher-Erkennung und Blockreihenfolge-Annotation |
| ProGuard / R8 | Mapping-Replay auf ein Namenswiederherstellungs-Sidecar; Originalnamen erfordern `mapping.txt` |
| yGuard, SkidSuite2, JBCO | Nur-Erkennung |
| Promon SHIELD, Guardsquare DexGuard RASP, Guardsquare ThreatCast, Appdome, OneSpan, Arxan / Digital.ai, Zimperium zShield, Licel DexProtector | Android-RASP-Identifizierung und strukturelle Berichte |
| ConfuserEx2 | Konstanten-Wiederherstellung aus echten Samples und Control-Flow-Deflattening; verschlüsselte Ressourcen können eine Runtime-Key-Grenze behalten |
| Eazfuscator.NET | Modellbewertete String-Entschlüsselung und VM-Lifting; das VM-Fixture stammt von einem In-Repository-Virtualizer, nicht vom ausgelieferten Produkt |
| KoiVM (ConfuserEx VM) | Virtualisierte Körper, geliftet zu CIL auf committeter Real-Tool-Ausgabe |
| ConfuserEx, Dotfuscator, Dotfuscator CE, SmartAssembly, Babel, DeepSea, Spices.Net, Goliath, Skater, .NET Reactor, CryptoObfuscator, ArmDot, Agile.NET, Obfuscar, DotNetPatcher, NetCryptor, BitMono | Erkennung und familienspezifische Teilwiederherstellung: Namen, Strings, Ressourcen oder Methodenstrukturen. BitMono befindet sich im Protector-Detektor jenseits des 22-Einträge-.NET-Kettenkatalogs |
| Themida (.NET-Wrapper), ILProtector, MaxToCode | Nur-Erkennung für native-loader-geschlüsselte Körper |
| React Native APK, React Native IPA; React Native Hermes-Bytecode | Extraktion von JS/Hermes-Payloads und Weiterleitung unterstützten Bytecodes in den Hermes-Lift |
| Flutter Dart Kernel; Flutter AOT-Snapshot (`libapp.so`) | Kernel-Quellcode-Tabellen-Wiederherstellung; AOT-Deklarationen, Metadaten und ARM64-Disassembly. Snapshot-Version und verfügbare Namen schränken die Wiederherstellung ein |
| Xamarin / .NET MAUI APK, Apache Cordova APK, Capacitor APK, NativeScript APK | Runtime-Identifizierung und unterstützte Paket-/Member-Extraktion |
| Android APK (`classes.dex`), Android App Bundle (AAB / APKM / XAPK), IPA | Paketinspektion und Kind-Extraktion; nachgelagerte Wiederherstellung hängt von der eingebetteten Runtime ab |
Die .NET-String-Decoder für SmartAssembly, Spices.Net, Skater, .NET Reactor, Eazfuscator.NET und CryptoObfuscator werden an modellierten Algorithmen bewertet, nicht an committeten herstellergenerierten Assemblies. ConfuserEx2, Obfuscar und BitMono haben echte geschützte Assembly-Evidenz. [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- und ActionScript-Familien</strong></summary>
| Familie | Unterstützung und Voraussetzung |
|---|---|
| IronBrew2 | VM-Wiederherstellung, ausführungsdifferenziell geprüft an echter 2.7.0 Standard- und MAX-Ausgabe |
| Prometheus | Teilweise Wiederherstellung, einschließlich unterstützter gestapelter `Vmify`-Dispatch-Bäume |
| MoonSec V1, MoonSec V2, MoonSec V3, AztupBrew, DarkSec, Boronide, PSU, WeAreDevs LuaU, luaobfuscator.com, SLua (Unity Lua 5.3), Hercules | Teilweise Lua-Wiederherstellung; MoonSec-förmige VM-Evidenz verwendet einen synthetischen Bootstrap |
| Luraph | Nur-Erkennung |
| Luau-Bytecode, Garry's Mod Lua (GLua) | Dialekterkennung; Luau-Lifting und teilweise GLua-Wiederherstellung |
| ionCube, SourceGuardian, Zend Guard | Erkennung kommerzieller PHP-Hüllen; im Loader befindliche Schlüssel bleiben eine Grenze. Legacy-Static-Key-Fälle können teilweise `op_array`-Struktur liefern |
| FOPO, Better PHP Obfuscator | Statische PHP-Eval-Ketten-Ablösung, mit Literal-Key-Anforderungen für verschlüsselte Schichten |
| Invoke-Obfuscation (Token), Invoke-Obfuscation (AST), Invoke-Obfuscation (String), Invoke-Obfuscation (Encoding), Invoke-Obfuscation (Compress); Invoke-Stealth, PowerHell, Chameleon, psobf | Statische PowerShell-Wiederherstellung |
| Invoke-Obfuscation (Launcher), ISESteroids | Teilweise PowerShell-Wiederherstellung |
| Bashfuscator (Token), Bashfuscator (String), Bashfuscator (Obfuscate), Bashfuscator (Compress); Bash-Indirektion (IFS/eval); node-bash-obfuscate (Chunk-Table-Eval) | Statische Bash-Wiederherstellung |
| Batch-Obfuskierung (`%random%`), Batch-Obfuskierung (Set-Indirektion); VBA-Makro (P-Code-Dekompilierung + Stomping) | Batch-Ablösung und VBA-Quellcode-/P-Code-Wiederherstellung |
| YARV InstructionSequence (kompiliertes `.rb`), mruby RITE-Bytecode | Ruby-Quellcode-Wiederherstellung |
| OCRA selbstextrahierendes Executable, RubyScript2Exe-Paket | Teilweise Freezer-Klassifizierung/-Wiederherstellung |
| JRuby kompilierte Klasse, TruffleRuby Native Image | Nur-Erkennung über den Ruby-Katalog |
| BEAM-Datei (Erlang / Elixir kompiliertes Modul), EZ-Archiv (ZIP-umhüllte `.beam`-Module) | Modul-Extraktion, Quellcode-/Debug-Chunk-Wiederherstellung oder Core-Erlang-Fallback |
| garble | Go-Metadaten und unterstützte Literale; Original-Namens-Hashing kann ohne den fehlenden Seed nicht umgekehrt werden |
| Mach-O Swift / Objective-C-Metadaten, Mach-O Fat (Universal)-Binärdatei, dyld Shared Cache | Runtime-Metadaten, Slice- und Dylib-Wiederherstellung |
| SwiftShield | Mapping-Parser; das Mapping muss bereitgestellt werden, um Originalnamen wiederherzustellen |
| SWF (Flash, FWS/CWS/ZWS) DoABC, roher ABC-Bytecode | Disassembly und Methodenkörper-Pseudocode |
| secureSWF, DoSWF, Kindi, Irrfuscator, swfLock | Nur-Erkennung |
[Familienkatalog](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>Alle 103 registrierten Container-Formate</strong></summary>
| Kategorie | Formate |
|---|---|
| Allgemeine Archive | 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 |
| Anwendungs- und Spracharchive | JAR, WAR, APK, XPI, WHL, EGG, CRX, NUPKG, VSIX, PYZ, Electron ASAR |
| Installer und Anwendungsimages | PKG, DMG, DEB, RPM, AppImage, Snap, Flatpak, MSIX/APPX, MSI, NSIS, Squirrel, Inno Setup, InstallShield, Enigma Virtual Box |
| Dateisysteme und Dateisystem-Streams | SquashFS, cramfs, ext4, romfs, MinixFS, Android sparse, btrfs-send, EROFS, JFFS2, NTFS, UBI/UBIFS, YAFFS2, QNX, partclone |
| Datenträger- und Deployment-Images | ISO, OCI, Docker-Image, VHD, VHDX, WIM, GPT, MBR, FAT12/16/32 |
| Komprimierungs-Streams | XZ, gzip, bzip2, zstd, LZMA, lzip, LZ4, zlib, Unix compress (`.Z`) |
| Eingebettete Anwendungsdaten | Bun standalone, UnityFS, .NET Single-File-Bundle |
| Firmware | 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 |
| Speicher- und verschlüsselte Volumes | Windows Minidump, LUKS1 |
Das Verzeichnis deklariert die Erkennung für jeden Eintrag. Von diesen Routen verwenden 102 den generischen Extraktor; <!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth --> haben committete Eingaben, die Member-Bytes erreichen, DMG hat Nur-Erkennungs-Evidenz, und 59 haben keine committete Eingabe. LUKS1 wird separat gegen Klartext bewertet und erfordert einen `aes-cbc-plain` Raw-Volume-Key zur Entschlüsselung; ohne einen solchen meldet es die Schlüsselgrenze. Einzelne Komprimierungsmethoden, verschlüsselte Member, Split-Volumes und Dateisystemfunktionen haben engere Grenzen. StuffIt 5 gibt derzeit den Archiv-Blob durch Extraktion zurück, obwohl seine Fork-Decoder existieren. Airoha OTP-AES-Inhalte werden wörtlich gecarvt.
Zusätzliche Rust-Reader stellen Deno eszip, Apple APFS/HFS+, ELF angehängte Overlays und Blazor WebCIL-Strukturen bereit; sie sind keine zusätzlichen Einträge in der 103-Format-Zählung. [Extraktionsrouten, Methodenversionen und Grenzen](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md) · [Container-Registry](https://github.com/1-3-7/disrobe/blob/main/crates/disrobe-binfmt/src/container.rs).
</details>
## Automatische Wiederherstellung`auto` wählt einen Pass aus der kompilierten Registry, führt ihn aus und identifiziert anschließend dessen Ausgabe und extrahierte Kinder neu. Es stoppt am Konfidenzschwellenwert, bei einem wiederholten Content-Hash oder am Tiefenlimit (standardmäßig acht). Berichte und Quelldateien, die als terminal markiert sind, bleiben Ausgaben und werden nicht erneut in die Erkennung eingespeist. Die folgende Tabelle erfasst jeden Pass, der von einem vollständigen Build registriert wird; ein schlanker Build kann feature-gesteuerte Zeilen auslassen.
| Eingabeebene | Registrierte Pass-IDs | Automatische Ausgabe | Dedizierte Steuerungen oder Voraussetzung |
|---|---|---|---|
| Archive, Installer, Firmware, Volumes | `binfmt.container` | Extrahierte Kinder, rekursiv weiterverfolgt in Sprach-/Native-Passes | `extract` für Member-Berichte und die explizite LUKS1-Raw-Key-Option |
| PyInstaller | `pyinstaller.extract` | Eingebettete Member und `.pyc`-Kinder | `pyinstaller extract` für archivspezifische Optionen |
| Python-Freezer | `pyfreeze.extract`, `nuitka.extract` | Extrahierte Payloads oder unterstützte kompilierte Paketstruktur | Experimentelles `pyfreeze`; der Nuitka-Flavor bestimmt, was erhalten bleibt |
| Geschütztes Python | `pyarmor.unpack`, `sourcedefender.decrypt` | Verfügbarer Klartext/Bytecode, Metadaten oder Key-Boundary-Berichte | Passendes Runtime-/Key-Material; dedizierter PyArmor-Modus und Striktheitsoptionen |
| Python-Quellcode und Bytecode | `py.deob`, `py.decompile`, `py.disasm` | Gepellter Quellcode, dekompilierter Quellcode oder Instruktions-Trace | `py decompile --emit source,disasm,ast`; ein passender Interpreter ist für Rekompilierungsprüfungen erforderlich |
| Pickle | `pickle.classify` | Symbolische Analyse und Klassifizierung | `pickle` für die einzelnen Inspektions-/Rekonstruktionsoperationen |
| JavaScript | `js.deob` | Unterstützte Deobfuskierung, Webpack/Vite-Modulwiederherstellung, Node-SEA-/bytenode-Handling | `js unbundle` legt die breitere Bundler-Menge offen; Source Maps und Umbenennungsoptionen sind direkte Steuerungen |
| WebAssembly | `wasm.deob` | Wiederhergestelltes oder geliftetes WAT plus Detection-, Summary- und Recovery-Sidecars | `wasm decompile --target` wählt Rust, TypeScript, C, WAT oder JSON |
| Electron / Tauri | `webview.carve` | Eingebettete Frontend-Member | `webview` unterstützt auch Wails; die automatische Wails-Wiederherstellung verwendet `go.classify` |
| PHP / Phar | `php.peel` | Gepellter Quellcode, `op_array`-Ausgabe, Archiv-Kinder, Residual-/Key-Berichte | Keys und IVs müssen für verschlüsselte Schichten statisch verfügbar sein |
| JVM / DEX | `jvm.classify` | Java-Quellcode, Protector- und Recovery-Manifeste, Klassen-/Archiv-Kinder | `jvm`/`apk` für Mapping, Signaturen und optionale externe Backends |
| .NET | `dotnet.classify` | C# und Analyse, wiederhergestellte Konstanten/Ressourcen/CIL oder Native-AOT-Metadaten | `dotnet` für andere Quellformate und installierte Rendering-Backends |
| Mobile-Pakete / Bytecode | `mobile.classify` | Runtime-/Member-Extraktion, Hermes-Lift, Dart-Kernel-Quellcode oder AOT-Berichte | `hermes`, `flutter`, `mobile` für formatspezifische Steuerungen |
| Lua | `lua.deob` | Wiederhergestelltes Lua und Dialekt-/Fidelity-Sidecars | `lua` für explizite Family- und Ausgabesteuerungen |
| Shell / Office / PDF | `shell.deob` | Gepellte Skripte, Makro-Quellcode/p-Code, XLM- und Dokumentberichte | `shell` für dokumentenspezifische Operationen |
| Ruby | `ruby.classify` | Analyse plus wiederhergestellter YARV-/mruby-Quellcode, sofern verfügbar | `ruby` für flavorspezifische Berichte; JRuby-/TruffleRuby-Klassifizierung ist keine Ruby-Quellcode-Wiederherstellung |
| BEAM / EZ | `beam.classify` | Erlang/Elixir/Core Erlang, Disassembly, Archiv-Kinder | Erhaltene Debug-Chunks bestimmen die Quellcode-Treue |
| SWF / ABC | `as3.classify` | ABC-Struktur, Instruktionsauflistungen, AS3-Pseudocode | Benannte kommerzielle Obfuskatoren bleiben nur erkennbar |
| Go | `go.classify` | Symbole, Typen, Garble-Analyse und eingebettete Dateisystem-Member | `go` für DWARF, BuildInfo und andere dedizierte Berichte |
| Swift / Objective-C | `swift-objc.classify` | Metadaten, Universal-Slices und Shared-Cache-Dylibs | Benachbarte Sub-Cache-/Symboldateien können erforderlich sein; direkte `swift`/`macho`-Steuerungen |
| Native Packer | `native.packer-unpack` | Verfügbares entpacktes Image oder eingebettetes Modul, Symbole, Signaturen, Recovery-Berichte | Nur implementierte Packer-Dispatches entpacken; kommerzielle VM-Stufen können bei der Erkennung stoppen |
| Native Images | `native.image-classify` | Identität, Symbole, Signaturen, Findings und ein begrenzter x86-64/AArch64-Pseudo-Quellcode-Bericht | `native decompile` wählt einen vollständigen Quellcode-Ausgabebefehl; ARM32-/MIPS32-Quellcodepfade sind direkt |
| Windows / OS/2 NE | `native.ne-structure` | Segmente, Einträge, Importe und Ressourcen | Strukturelle Wiederherstellung statt Quellcode-Dekompilierung |
| Perl / R / Tcl / Haxe / WSH | `scriptlang.classify` | Sprachberichte, wiederhergestellte Strukturen und unterstützte Kind-Artefakte | Format-spezifische Bibliotheks-APIs legen feinere Operationen offen |
| Nim / Zig / Crystal / D | `nativelang.classify` | Sprach-Fingerprints, Symbole und partielle native Struktur | Die Klassifizierung erfordert ausreichend erhaltene Sprachmarker |
Beispielsweise kann eine erkannte PyInstaller-Anwendung durch `pyinstaller.extract` → `pyarmor.unpack` → `py.decompile` fortschreiten; ein APK durch Member-Extraktion → DEX → Java; und ein gepacktes natives Image durch Entpacken → Sprach- oder Image-Analyse. Jeder Pfeil hängt davon ab, was diese jeweilige Schicht tatsächlich liefert.```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, explizite Quell-Ziel-Auswahl, Mapping-Replay und optionale Aufrufe externer Backends bleiben dedizierte Operationen. Pass-Registry · Chain-Auswahl und Ausgabe-Layout.
Die Capability-Map deckt Befehlsgruppen und Integrationen ab. Ihr
maschinenlesbares Inventar verknüpft Quelle, Tests, Dokumentation, Support-
Status und Demos. Die CLI-Referenz deckt verschachtelte Befehle ab;
globale Flags decken gemeinsame Optionen ab. Verwende disrobe <command> --help
für die Schnittstelle deines installierten Builds.
Projekt- und Service-Befehle sind dort ebenfalls indexiert: serve, plugin, init, config, catalog, passes, doctor, install, install-deps, self-update, completions, man, explain und bug-report. Verwende doctor, um je nach Plattform 46 bis 51 externe Tools zu prüfen und fehlende optionale Backends zu identifizieren.
Die Tabelle ordnet jede Recovery-Aufgabe den Befehlen von Disrobe und verwandten Tools zu. Installierte Decompiler und exportierte Artefakte liefern die unten gezeigten Integrationspunkte.
Das Vergleichsinventar benennt die ausstehenden Vergleiche mit gemeinsamer Eingabe. Backend-Optionen sind in der Installation und den oben verlinkten Sprach-Anleitungen dokumentiert.
Die Messungen verwenden die unten verlinkten gepinnten Eingaben, Tool-Versionen und Bewertungsregeln. DEX- und JAR-Zählungen messen die Kompilierung der von jedem Tool ausgegebenen Regionen. Diese Populationen unterscheiden sich, daher ordnen ihre Zählungen nicht die Recovery-Qualität ein. Der APK-Secret-Recall verwendet dieselbe Ground Truth aus acht Tokens.
Eingaben, rohe Tool-Ergebnisse und Reproduktionsbefehle.
Dieselbe Ghidra-12.1.2-Analyse sieht anderen Code, nachdem Disrobe eine gepackte Executable als neu aufgebaute PE exportiert. Diese lokalen Snapshots verwenden echte benigne gepackte Fixtures und verzeichnen sowohl Zunahmen als auch Abnahmen. Die Spalten Funktionen/Instruktionen/Strings stammen aus dem Analyse-Snapshot mit neun Eingaben; abgeschlossene C-Renderings stammen aus dem separaten Decompiler-Snapshot mit sechs Eingaben. Ein abgeschlossenes Rendering ist nichtleere Ausgabe, keine Quellcode-Korrektheitsnote.
Die kkrunchy-Zählungen nehmen ab. Mehr entdeckte Funktionen sind nicht zwangsläufig mehr korrekte Funktionen, und diese Analysezählungen ersetzen keinen Byte-Vergleich. Lies den Analyse-Snapshot, den Decompiler-Snapshot und die separaten nativen Byte-Recovery-Messungen.
Der Evidenz-Index verknüpft Recovery-Messungen mit ihren Fixtures, Vergleichsmethoden, Befehlen und Ergebnissen.
Ergebnisse unterscheiden Byte-Recovery, Compiler-Akzeptanz und Verhaltensprüfungen. Compiler-Akzeptanz und Coverage-Zählungen sind keine Äquivalenznoten.
Diese Prüfungen messen Disrobe gegen ein Originalartefakt, einen Compiler, einen Interpreter oder ein gelabeltes Korpus. Sie unterscheiden sich vom Vergleich zweier Decompiler. Jedes verlinkte Ergebnis dokumentiert die Eingabepopulation, Voraussetzungen und den Reproduktionsbefehl.
Vollständige Evidenzdatensätze beschreiben jede Population und Bewertungsregel.
Diagrammbeschriftungen verwenden strong für eine unabhängige Korrektheitsreferenz, recompile-only für Compiler-Akzeptanz und coverage-self-reported für Disrobes eigene Abdeckungszähler. Die Vergleichsmethode und die Population definieren den Geltungsbereich jedes Ergebnisses.
Durchsuchen Sie die Ergebnisse, Tool-Vergleiche und Reproduktionsvoraussetzungen für einzelne Messungen.
--backend auto auswählen. Prüfen Sie die Hilfe des Befehls und den Installationsleitfaden, bevor Sie ein Backend wählen.
Der Chain-Runner verbindet zweckgebundene Pässe über gemeinsame Artefakte und Zwischendarstellungen. Ein Pass trägt die Ausgabe bei, die er rechtfertigen kann; nachgelagerte Konsumenten behalten die Provenienz bei und melden nicht unterstützte Grenzen. Erkunden Sie die Architektur, das Pass-Modell, die IR-Leiter und den Chain-Runner.
Beginnen Sie mit der Dokumentation, dem Quickstart und dem Ergebnisleitfaden. Verwenden Sie disrobe explain <code>, um eine Diagnose nachzuschlagen. Für Änderungen am Projekt lesen Sie den Mitwirkungsleitfaden sowie die Tests und Evidenz des jeweiligen Features.
Das Bedrohungsmodell beschreibt Vertrauensgrenzen und Eingabebehandlung. Melden Sie Sicherheitsbedenken über SECURITY.md. LEGAL.md beschreibt die rechtlichen Erwägungen des Projekts; die Berechtigung zur Analyse eines Artefakts hängt von Ihren Umständen ab.
Jede Version von Disrobe ist proprietär und quelloffen verfügbar unter der Disrobe Source-Available License, Version 1.1, die die Elastic License 2.0 und Version 1.0 für alle Versionen ersetzt und alle früheren Gewährungen widerruft, wie in der Relizenzierungsmitteilung dargelegt.
Persönliche Hobbyprojekte, persönliches Lernen und unbezahlte unabhängige Sicherheitsforschung durch Einzelpersonen, gemeinnützige Bildung und Forschung sowie bona fide Journalismus sind kostenlos, wie in der Lizenz definiert.
Jede Nutzung durch oder für ein Unternehmen erfordert eine kostenpflichtige Lizenz. Siehe kommerzielle Lizenzierung.
Erforderliche Nennung: Diese Arbeit verwendete Disrobe, erstellt von 1-3-7: https://github.com/1-3-7/disrobe
Forks, die keine Beitrags-Forks sind, Reposting, Rebranding, Weiterverkauf, Hosting und konkurrierende Entwicklung sind untersagt. Die Software wird wie besehen und auf eigenes Risiko des Nutzers bereitgestellt.
Siehe Attribution, Beitragsbedingungen, Zusammenfassung und Hinweise zu Drittanbietern.
Copyright (c) 2025-2026 1-3-7. Alle Rechte vorbehalten.
Frühere Entwicklungs-Commits wurden im Rahmen der Dokumentations- und visuellen Überarbeitung zu einer einzigen Baseline zusammengeführt.
| Aufgabe | Befehle | Ausgabe oder nächster Schritt |
|---|
| Indikatoren, Secrets und statische Befunde finden | scan, frisk, strings, ioc, indicators, behavior | Befunde und Offsets |
| Funktionen, Flows und Verhalten untersuchen | query, capabilities, taint, vulnmatch | Abfragbarer IR, ATT&CK/MBC-Mappings und Source-to-Sink-Berichte |
| Annotationen und strukturierte Artefakte behalten | annot, rename, envelope, verify, yara | Artefakt-Envelopes und Analysten-Zustand |
| Provenienz verfolgen und Läufe vergleichen | chain, context, status, report, diff, guard, semdiff | Berichte, Hashes und Recovery-Unterschiede |
| Öffentliche Netzwerkdaten sammeln | prowl | Explizite Netzwerkerfassung, getrennt von Offline-Recovery |
| Oberfläche | Einstiegspunkt | Anleitung |
|---|
| Rust | Gemeinsame Core-Typen und einzelne Pass-Crates | Library-APIs |
| Python | Typisierte Bindings über import disrobe | Python-Bindings |
| HTTP, gRPC und LSP | disrobe serve | Service |
| Model Context Protocol | disrobe-mcp oder disrobe serve --mcp | MCP-Integration |
| Editoren und Analyse-Tools | VS Code, IDA Pro, Ghidra, Binary Ninja | Editor-Integrationen |
| GitHub Actions | Repository-Action und SARIF-Ausgabe | GitHub Action |
| Lokale Commit-Prüfungen | Hook-ID disrobe | pre-commit |
| Browser | Clientseitiger Wasm-Worker | Playground |
| Projektkontext für Coding-Tools | disrobe init --ide | Metadata-Sidecar |
| Recovery-Aufgabe | Genannte Tools | Disrobes Weg | Wie man sie auswählt oder kombiniert |
|---|
| Python-Bytecode zu Quellcode | pycdc, PyLingual, uncompyle6, decompyle3 | In-Process-Decompiler für CPython 1.0 bis 3.15, Recovery verschachtelter Code-Objekte, Quellcode-/Disassembly-/AST-Ausgabe | Rekonstruierten Quellcode, Disassembly und AST aus dem integrierten Python-Decompiler untersuchen |
| Frozen-Python-Extraktion | pyinstxtractor-ng, pydecipher | PyInstaller-, Nuitka- und Freezer-Extraktion gefolgt von Bytecode-Recovery | auto kann vom extrahierten Member durch einen Protector bis in den Python-Decompiler fortfahren |
| PyArmor | Pyarmor-Static-Unpack-1shot | Statische Wrapper-/Runtime-Recovery, Modus-Berichte, optionales statisches BCC-Lifting | Die passende Runtime bereitstellen, um Wrapper-Daten wiederherzustellen und modusspezifische Ergebnisse zu untersuchen |
| Pickle-Inspektion | fickling, Python pickletools | Instruktions-Trace, symbolische Reducer, Klassifikation und Wertrekonstruktion | Ohne Ausführung von Reducern untersuchen; pickletools bewertet die Inspektion, und CPython prüft die Rekonstruktion an 470 generierten Fixtures |
| JavaScript-Deobfuskierung | webcrack, synchrony, REstringer | obfuscator.io, JS-Confuser, unterstützte Jscrambler-Muster, esoterische Decoder, Konstanten-/Control-Flow-Recovery | js deob für explizite Optionen verwenden oder auto, wenn JS in einem Paket steckt |
| JS-Unbundling und Source Maps | wakaru, webcrack, sourcemapper | Modulextraktion, Source-Map-Handling, scope-bewusstes Renaming, paketierte V8-Inspektion | js unbundle bietet mehr Bundler-Routen als der automatische Chain-Dispatch |
| WebAssembly | WABT wasm-decompile, Binaryen | WAT und C/Rust/TypeScript-Pseudocode, JSON-Zusammenfassungen, unterstützte Obfuskierungsumkehr | Ein ausgewähltes Quellziel untersuchen; wasmtime-Ausführung prüft das wiederhergestellte Verhalten unabhängig |
| JVM-Quellcode | CFR, Vineflower, Procyon, Fernflower | Native Classfile-Recovery plus Protector-/String-Handling | jvm decompile schreibt Disrobe-Artefakte neben die Ausgabe eines installierten Backends; CFR hat unten ein gemessenes Compile-Yield-Ergebnis |
| Android-Pakete und DEX | JADX, apktool, androguard, dex2jar | In-Process-Dalvik-Recovery, APK-Metadaten/-Signaturen, Runtime-Extraktion, Java-Ausgabe | DEX/APK-Dekompilierung nutzt standardmäßig den nativen Pfad; ein Android-Backend wird explizit ausgewählt. JADX hat unten einen gemessenen Abschnitt |
| .NET-Assemblies | ILSpy, dnSpy, dnSpyEx, de4dot | CIL-Recovery plus protectorspezifische Konstanten, Ressourcen, VM-Bodies und Native-AOT-Metadaten | dotnet decompile schreibt Disrobe-CIL-Ausgabe neben einen installierten Renderer; --backend auto wählt ILSpy, dnSpyEx, dnSpy oder de4dot |
| Native-Dekompilierung | Ghidra, IDA, Binary Ninja | In-Process-x86-64-C/Rust und AArch64/ARM32/MIPS32-Pseudo-C; Berichte zu wiederhergestellten Symbolen/Typen | Ghidra headless mit --backend ghidra auswählen oder Editor-Integrationen und exportierte Symbole in einer interaktiven Analysesitzung verwenden |
| Gepackte native Executables | upx -d, unipacker, Detect It Easy | Implementierte Unpacker und begrenzte Stub-Emulation, neu aufgebaute PE-Images, eingebettete Loader-Module | Wiederhergestellte PE-Images in Ghidra/IDA exportieren. Die Ghidra-Messungen unten vergleichen die gepackten und die neu aufgebauten Eingaben |
| Native-Obfuskierung | Ghidra, IDA, Binary Ninja und Deobfuskierungs-Skripte | OLLVM/Tigress-Transformationen, MBA-Vereinfachung, Stack-Strings, native Metadaten und Recovery-Berichte | Die relevante native Operation/API auswählen; ein VM-Protector-Fingerprint allein impliziert keine Body-Recovery |
| Go-Metadaten und garble | GoReSym, redress, gore | pclntab, Modul-/Typ-Metadaten, eingebettete Dateien und wiederherstellbare garble-Literale | go berichtet Namen/Typen; native decompile behandelt den Maschinencode-Quellpfad separat |
| Swift / Objective-C | swift-demangle, class-dump, jtool2 | Runtime-Klassen-/Protokoll-/Selektor-Daten, Symbol-Rendering, Fat Slices, Shared-Cache-Dylibs | Überlebende Mappings und Sub-Cache-Dateien bereitstellen; durch Renaming gelöschte Originalnamen benötigen eine externe Map |
| Lua-Bytecode und VMs | unluac, luadec, LuaDec51 | Lua/LuaJIT/Luau-Quellcode plus unterstützte Obfuskator- und Custom-VM-Recovery | IronBrew2 hat Execution-Differential-Evidenz mit echten Tools; gewöhnliche .luac-Recovery und VM-Recovery sind unterschiedliche Operationen |
| Ruby-Bytecode | MRI-Disassembly | YARV- und mruby-Quellcode, Opcode-Listings, Freezer-/AOT-Klassifikation | MRI-Rekompilierung bewertet den Opcode-Namen-Recall; dieses Maß belegt keine Ausführungsäquivalenz |
| PHP-Schichten | php-malware-finder | Eval-Chain- und Literal-Key-Loop-/Cipher-Peeling, Phar-Extraktion, Encoder-Envelope-Berichte | Statische Schichten und verfügbares Schlüsselmaterial verwenden; mit Native-Loader verschlüsselte kommerzielle Payloads bleiben versiegelt |
| PowerShell, Bash, VBA | PowerDecode, FLARE-Tools, olevba | Shell-Deobfuskierung, VBA-Quellcode/p-Code und Stomping, XLM-Formeln, PDF-Aktionen | shell platziert Script-Recovery und Dokumentbefunde neben den Rest der Artefaktanalyse |
| BEAM / ActionScript | Erlang beam_disasm, RABCDAsm | BEAM-Debug-Source-/Core-Erlang-Recovery und ABC-Method-Body-Pseudocode | Debug-Chunks erhalten, wenn verfügbar; gestripptes BEAM hat eine separate Real-Erlang-Ausführungsprüfung |
| Hermes / React Native | hermes-dec, hbctool, DroidSaw | Runtime-Extraktion, HBC-Struktur, unterstütztes Pseudo-JavaScript-Lifting | HBC-Parsing deckt v60 bis v96 ab; Source-Lifting hat eine engere gemessene Grenze. Hermes-zu-DEX-Bridge-Taint ist nicht implementiert |
| Flutter / Dart AOT | reFlutter, Darter, blutter | Kernel-Source-Tabellen, AOT-Deklarationsgraph, ARM64-Bodies, Strings, Rename-Map-Parsing | Kernel-Source und AOT-Metadaten sind unterschiedliche Recovery-Ebenen; Snapshot-Versionen beschränken das AOT-Parsing |
| Container und Firmware | binwalk, unblob, 7-Zip | Registrierte Format-Extraktion, rekursives Child-Routing, Firmware-Dekodierung/-Carving, Refusal-Berichte pro Member | Extrahierte Member direkt in Sprach-Passes einspeisen; Member-Bytes vergleichen, statt eine erkannte Magic als erfolgreiche Extraktion zu behandeln |
| Secrets und Indikatoren | APKLeaks, TruffleHog, Gitleaks, LinkFinder | Befunde im wiederhergestellten Baum/APK, Token-Offsets, statische Strings, Secret- und IOC-Berichte | Das APK oder den wiederhergestellten Baum scannen; APKLeaks gegen dieselben unten platzierten Secrets vergleichen |
| Format-, Packer-, Compiler-Identifikation | Detect It Easy, TrID, PEiD, binwalk | Multi-Signal-Identifikation, Symbole, Signaturen und Routing-Hinweise | identify/detect verwenden, um einen Recovery-Pfad auszuwählen, dann dessen tatsächliche Ausgabe untersuchen |
| Capabilities und Taint | capa, Ghidra-Skripte, Joern | ATT&CK/MBC-Befunde mit Offsets, normalisierte IR-Abfragen, Source-to-Sink-Flow-Berichte | Capability-Matching und Source-to-Sink-Analyse auf wiederhergestellten Artefakten ausführen; der Taint-Bericht enthält seine Juliet-Testpopulation |
| Tool und Eingabe | Disrobe-Ergebnis | Ergebnis des genannten Tools | Was die Messung prüft |
|---|
| JADX 1.5.5 · Android DEX | 157 / 228 ausgegebene Regionen kompilieren sauber | 281 / 303 ausgegebene Regionen kompilieren sauber | Committete EdgeCases-DEX; echtes javac, vollständige Quellcode-Kompilierung, dann begrenzte Isolation von Regionen, die die Zuordnung blockieren; unterschiedliche ausgegebene Populationen |
| CFR 0.152 · JVM-Classfile | 181 / 181 ausgegebene Regionen kompilieren sauber | 152 / 166 ausgegebene Regionen kompilieren sauber | Committetes EdgeCases-JAR; dasselbe Compiler-/Scorer-Verfahren; unterschiedliche ausgegebene Populationen |
| APKLeaks 2.6.3 · APK mit platzierten Secrets | 8 / 8 platzierte Secrets | 5 / 8 platzierte Secrets | Exakter Token-Recall auf demselben APK; Disrobe findet außerdem den platzierten AWS Secret Access Key, die Basic-Credential und das JWT |
| Gepackte Eingabe | Ghidra-Funktionen, gepackt → neu aufgebaut | Instruktionen, gepackt → neu aufgebaut | Strings, gepackt → neu aufgebaut | Abgeschlossene C-Renderings, gepackt → neu aufgebaut |
|---|
| 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 | Nicht gemessen |
| MEW · AccessEnum | 4 → 152 | 125 → 9.592 | 3 → 802 | Nicht gemessen |
| MEW · Autologon | 4 → 295 | 125 → 19.595 | 3 → 406 | Nicht gemessen |
| kkrunchy classic · NASM hello | 4 → 1 | 149 → 10 | 3 → 4 | 4 → 1 |
| Eingabe | Von Disrobe ausgegebene Regionen | Vom genannten Tool ausgegebene Regionen | Populationsgrenze | Reproduzieren |
|---|
| Android DEX | 157 / 228 ausgegebene Regionen kompilieren sauber | JADX 1.5.5: 281 / 303 ausgegebene Regionen kompilieren sauber | kein toolübergreifendes Ranking: jedes Tool hat seine eigene Population ausgegebener Regionen | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| JVM-Classfile | 181 / 181 ausgegebene Regionen kompilieren sauber | CFR 0.152: 152 / 166 ausgegebene Regionen kompilieren sauber | kein toolübergreifendes Ranking: jedes Tool hat seine eigene Population ausgegebener Regionen | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| Recovery | Aufgezeichnetes Ergebnis | Referenz und Grenze |
|---|
| Python 3.14.5, gepinnte Module | 6077 von 6286 Code-Objekten | CPython-Rekompilierung mit normalisiertem Opcode-Struktur-Vergleich; Sprungziele, die meisten Operanden und zusätzliche wiederhergestellte Objekte werden nicht bewertet. Ergebnis |
| Python 3.14.5, feste Core-Population | 17396 von 18276 Code-Objekten, lokale Messung | Derselbe normalisierte Vergleich über 574 Module; dies ist kein Ergebnis semantischer Äquivalenz. Ergebnis |
| Legacy-Python 1.0 bis 3.7 | mindestens 150 von 191 Fixtures (Regressions-Untergrenze) | Rekompilierung mit zeitgenössischem Interpreter oder strukturelle Tokens gegen den Originalquellcode. Ergebnis |
| Pickle-Klassifikation | 102 / 102 Klassifikations-Fixtures | pickletools-Semantik. Ergebnis |
| Pickle-Rekonstruktion | 470 / 470 rekonstruierte Fixtures bestehen Re-Execution-Gleichheitsprüfungen | CPython-Re-Execution. Ergebnis |
| JVM-Quellcode-Kompilierung | 131 von 131 Methoden kompilieren | Echtes javac. Ergebnis |
| JVM-Verhalten | 117 / 131 Methoden stimmen mit beobachteter Ausführung überein | Echte JVM; acht Methoden weichen ab und sechs werden nicht isoliert angesteuert. Ergebnis |
| Android DEX | 118 / 118 dem Verifier vorgelegte Klassen | JVM -Xverify:all; 37 von 155 Klassen werden beim Linken übersprungen und nicht bewertet. Ergebnis |
| .NET C# | 18 / 35 vollständige EdgeCases-Typen kompilieren eigenständig neu | Echtes Roslyn csc; legaler Quellcode belegt kein äquivalentes Verhalten. Ergebnis |
| .NET VM-Bodies | Eazfuscator-Modell: 67 / 67 Instruktionen; echtes KoiVM: 6 / 6 Bodies geliftet | Getrennte Original-/Clean-Build-Referenzen; EazVM verwendet einen im Repository enthaltenen Virtualizer, KoiVM verwendet die Ausgabe echter Tools. Evidenz |
| WebAssembly | 57 / 57 geeignete Funktionen | wasmtime vergleicht Rückgaben, Traps und die ersten 4.096 Bytes des linearen Speichers auf den Testeingaben. Ergebnis |
| BEAM ohne Debug-Chunks | 19 / 19 Module | Erlang/OTP 27.3.4-Rekompilierung, Export-Vergleich und test/0-Ausgabe/Exit-Status. Ergebnis |
| Lua IronBrew2 | Echte 2.7.0-Standard- und MAX-Ausgabe wird zu übereinstimmender Ausführung wiederhergestellt | Echter Lua-Interpreter gegen Originalprogramme; eine VM-Familie. Ergebnis |
| Ruby YARV | Greeter 100%; Megafile 98.67% Opcode-Namen-Recall | MRI-Rekompilierung; Multiset-Recall ignoriert Reihenfolge, Operanden, Sprungziele und zusätzliche Instruktionen. Ergebnis |
| Go gestrippte Typnamen | 838 von 838 Namen | Echte go1.26.3-Metadaten aus dem Vergleichs-Build. Ergebnis |
| Hermes HBC v96 | 8 von 8 Funktionen, null Fallback-Operationen | Echtes hermesc-Sample mit Originalquellcode und Funktionsnamen. Ergebnis |
| Native gepackte Bytes | UPX, FSG, NSPack, Petite, MPRESS .text byte-identisch bei benannten committeten Paaren; Yoda's Crypter-Ressourcen byte-identisch | RVA-ausgerichtete Originalbytes; Whole-Image- und Ressourcen-Residuen werden weiterhin separat berichtet. Tabelle pro Eingabe |
| Platzierte Indikatoren | 6 / 6 IOC-Kategorien vertreten | Committete Endpunkte, Manifest-Befunde, URLs, IPv4, E-Mail und .onion-Ground-Truth. Ergebnis |
| MCP-Callgraph | 5 / 5 direkte Kanten, alle korrekt identifiziert | Gestripptes ELF verglichen mit seinem unterschiedlichen ungestrippten Toolchain-Zwilling. Präzision, Recall |
| Native Taint | 93 / 190 gelabelte Flows erkannt; null False Positives, lokale Messung | NIST Juliet CWE-78 char/system-Slice, gcc 16.2.0 -O2; sieben deklarierte Flow-Kategorien haben keine Fälle in diesem Slice. Ergebnis |