Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
disrobe — Suite CLI Rust qui décompresse statiquement, désobfusque et dépaquette le code natif, le bytecode, les scripts, les firmwares et les paquets d'applications à travers plus de 15 écosystèmes via un pipeline automatique unique. | Kitploit
Outils/GitHubGitHub/1-3-7/disrobe
Sécurité AndroidAnalyse StatiqueRétro-ingénierieAnalyse de MalwareSécurité MobileAnalyse de BinairesAnalyse de Micrologiciel
GitHub1-3-7/disrobe

disrobe

Suite CLI Rust qui décompresse statiquement, désobfusque et dépaquette le code natif, le bytecode, les scripts, les firmwares et les paquets d'applications à travers plus de 15 écosystèmes via un pipeline automatique unique.

Voir le dépôt
11362il y a 5 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Site web
disrobe : récupérer le code source, la structure et les octets d'un logiciel compilé

Commencer · Entrées prises en charge · Récupération automatique · Comparaisons d'outils · Preuves · Documentation

Voir le logiciel sous-jacent

Disrobe est une suite en ligne de commande écrite en Rust pour décompiler, désobfusquer et décompresser des logiciels. Utilisez-la pour trier un fichier inconnu, récupérer du code à des fins d'ingénierie inverse, extraire des indicateurs pour une investigation, ou préparer des artefacts pour un désassembleur.

Récupérez du Python à partir de bytecode et d'applications figées, du Java à partir de classfiles et de DEX, du C# à partir de CIL, du JavaScript à partir de bundles, du Lua à partir de machines virtuelles personnalisées, et du C ou du Rust à partir de code natif. Extrayez des fichiers à partir d'installateurs, de firmwares, de paquets mobiles et d'applications Electron, Tauri ou Wails. Conservez le code source récupéré, les symboles, les chaînes, les types et la provenance ensemble pour une analyse ultérieure.

La compilation complète catalogue 170 familles à travers 15 écosystèmes et détecte 103 formats de conteneurs. disrobe auto identifie chaque couche, exécute une passe correspondante, et suit les enfants récupérés dans leurs propres chemins de récupération. Des commandes dédiées exposent des contrôles plus fins, des rapports d'analyse et des backends optionnels. La récupération s'exécute statiquement par défaut ; le code source, la structure, la sortie partielle et les limites de clés manquantes restent distinguables dans le résultat.

Si Disrobe vous est utile, envisagez de mettre une étoile au dépôt.

Voir en action

Disrobe CLI : décompresser, récupérer et inspecter un logiciel

Regarder la vidéo complète · Lire la transcription

Vingt commandes CLI en 2 minutes 12 secondes : décompresser un exécutable natif, récupérer du Python et du Lua, diviser des modules JavaScript, restaurer des source maps, inspecter du WebAssembly et des ressources Android, extraire des indicateurs, et préserver les rapports et les hachages d'artefacts. Le dernier chapitre montre la configuration du projet, la configuration de l'IDE, les annotations d'analyste et les complétions de shell. La transcription inclut l'inventaire complet des commandes de la compilation enregistrée ; la carte des capacités explique ses limites de prise en charge.

Commencer

Téléchargez l'archive correspondant à votre plateforme depuis GitHub Releases, vérifiez-la par rapport au fichier SHA256SUMS de la version, et placez disrobe dans votre PATH. Les archives de version incluent des bundles de signature ; le guide de vérification explique comment les inspecter.

PlateformeCibles de version
Windowsx86-64, ARM64
macOSx86-64, ARM64
Linuxx86-64 et ARM64 avec glibc ; x86-64 avec musl

Vérifiez le binaire que vous avez installé :```sh disrobe --version disrobe --help

root@kitploit:~
Pour compiler la CLI à partir d'un clone, installez la chaîne d'outils Rust du dépôt et les [prérequis de compilation natifs](https://github.com/1-3-7/disrobe/blob/main/docs/src/installation.md), puis exécutez :```sh
cargo build --locked --release -p disrobe-cli --bin disrobe

L'exécutable est target/release/disrobe, ou target/release/disrobe.exe sous Windows. Consultez le guide d'installation pour les feature flags et les builds allégés.

Récupérer une application

Commencez par une application, une bibliothèque ou un package. Identifiez-le, récupérez ses couches reconnues, puis inspectez le résumé de récupération :```sh disrobe identify path/to/application disrobe auto path/to/application --out recovered/ --capture-stages disrobe context --out recovered/

root@kitploit:~
`identify` rapporte le format et les signaux disponibles. `auto` extrait et récupère les couches reconnues. `context` résume les passes résultantes, la confiance et la provenance. Avec `--capture-stages`, inspectez chaque étape sous `recovered/01-*/`, `recovered/02-*/` et `recovered/final/` ; `chain.json` enregistre la topologie et les hachages, et `recovery.json` enregistre les résultats et les timings.

Utilisez une commande dédiée lorsque vous connaissez la sortie dont vous avez besoin :```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/

Le décompilateur natif émet du C par défaut sur x86-64 ; --format rust sélectionne Rust. AArch64, ARM32 et MIPS32 émettent du pseudo-C. native export reconstruit les images PE packées prises en charge pour un outil d'analyse externe ; webview écrit l'arborescence des ressources frontend récupérées sans démarrer l'application.

Essayez un petit artefact inspectable

Le dépôt inclut un minuscule module WebAssembly pour le playground du navigateur. À partir d'un clone, avec la CLI complète dans votre 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

root@kitploit:~
La première commande écrit `add.summary.json` ; la seconde écrit du texte WebAssembly dans `add.lifted.wat`. La récupération automatique
sélectionne une chaîne disponible et écrit ses artefacts sous `recovered/` ; `--capture-stages` conserve
les résultats intermédiaires. Ces opérations inspectent le module sans exécuter sa fonction exportée.

Inspectez les fichiers récupérés en parallèle du rapport : l'identification seule n'établit pas la récupération. Les constructions non prises en charge, l'absence de matériel de clé et les chaînes indisponibles apparaissent dans le résultat. Le [guide des résultats](https://github.com/1-3-7/disrobe/blob/main/docs/src/reading-a-result.md) explique les artefacts, les diagnostics, les résultats partiels et la provenance.

[Ouvrir le playground dans le navigateur](https://1-3-7.github.io/disrobe/playground/) · [Suivre le démarrage rapide](https://github.com/1-3-7/disrobe/blob/main/docs/src/quickstart.md)

## Trouver votre entrée

**Récupérer** signifie qu'un chemin accessible émet du code source, des octets ou de la structure. **Partiel** signifie qu'il ne récupère qu'une partie de ces informations. **Détection seule** signifie qu'il identifie la famille sans récupérer son corps protégé. Ces niveaux décrivent des opérations sur des entrées prises en charge ; un nom de famille seul ne garantit pas que chaque version ou configuration soit récupérable. Les listes ci-dessous incluent le catalogue complet des familles et les formats supplémentaires exposés par des commandes et extracteurs dédiés.

| Entrée | Récupération et sortie | Commandes et guide |
|---|---|---|
| Python | Bytecode et marshal CPython 1.0 à 3.15 vers source ; désassemblage PyPy, MicroPython `.mpy` v0 à v6, Jython, IronPython et Brython ; extraction de charges utiles gelées ; noms, signatures et repli structurel 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 | Désobfuscation de source, inversion de minification, découpage de modules, source maps, inspection des données en cache V8 et des runtimes empaquetés | `js` · [JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) |
| WebAssembly | `.wasm` vers WAT, Rust, TypeScript, pseudo-source C ou JSON ; inspection du Component Model et du graphe de types GC ; inversion des obfuscations prises en charge | `wasm` · [WebAssembly](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) |
| JVM / Android | `.class`, JAR, DEX, APK, AAB ; source Java, idiomes Kotlin/Scala, informations de manifest et de signature, rapports de protecteurs et sidecars de mapping | `jvm`, `apk` · [JVM et Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) |
| .NET | Métadonnées PE/CLR et CIL vers pseudo-source C#, F# ou VB ; inspection ReadyToRun et Native AOT ; extraction de bundle single-file | `dotnet` · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) |
| Natif | Identification ou analyse PE32/PE64, EFI PE, ELF32/ELF64, modules noyau, Mach-O thin/fat, COFF, MZ, NE, LE, LX et code brut ; émission de source sur les chemins spécifiques à l'architecture ci-dessus | `native`, `macho`, `semdiff` · [Natif](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md), [décompilation](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-decompile.md) |
| Go | Métadonnées de runtime PE/ELF/Mach-O, noms de fonctions et de types supprimés, fichiers `embed.FS`, rapports garble et littéraux récupérables | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Classes, protocoles, champs, sélecteurs, symboles dé-manglés Mach-O ; tranches universelles ; dylibs du cache partagé dyld | `swift`, `macho` · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) |
| Lua | Bytecode Lua 5.1 à 5.4, LuaJIT 2.0/2.1, Luau, Garry's Mod Lua (GLua) ; rapports de fidélité source et par entrée ; récupération de VM et de chaînes prise en charge | `lua` · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) |
| PHP | Pelage de chaînes source/eval, boucles de décodage à clé littérale et couches AES, extraction Phar, récupération de `op_array` sérialisé ; les enveloppes d'encodeurs commerciaux restent limitées par la clé | `php` · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) |
| Ruby | Binaires InstructionSequence MRI/YARV 2.6 à 3.4 et bytecode mruby RITE vers Ruby ; classification freezer et AOT | `ruby` · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) |
| Erlang / Elixir | Modules BEAM et archives EZ ; code abstrait survivant ou `Dbgi` vers source, repli Core Erlang, listing d'instructions | `beam` · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) |
| ActionScript 3 | Blocs `DoABC` SWF FWS/CWS/ZWS et bytecode ABC brut vers désassemblage et pseudocode AS3 | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| Runtimes mobiles | Analyse d'en-tête Hermes v60 à v96, lift pseudo-JavaScript v62/v71/v74/v76/v83/v84/v89/v96 ; corps source du kernel Dart Flutter ; déclarations, chaînes et désassemblage AOT ARM64 | `hermes`, `flutter`, `mobile` · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md) |
| Shell / documents | PowerShell, Bash, Batch, VBScript, WSH ; p-code et stomping VBA3/5/6/7 ; source de macros Office, formules XLM BIFF8/BIFF12, scripts/actions intégrés aux PDF | `shell` · [Shell et documents](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| Autres artefacts de langages | Op-trees/bytecode Perl, métadonnées R RDS et Rcpp, starkits Tcl, sorties Haxe JS/SWF/HashLink/Neko ; empreintes, symboles et structure partielle Nim, Zig, Crystal et D | `auto`, API de bibliothèque · [Langages de script](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md), [natif](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) |
| Python pickle | Désassemblage de protocole, trace symbolique, reconstruction et classification sans appeler les reducers pickle | `pickle` · [Pickle](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/pickle.md) |
| Archives / firmware / frontends | La liste complète des conteneurs ci-dessous ; Electron ASAR, cartes intégrées Tauri v1/v2, arborescences `embed.FS` Wails v2 | `extract`, `webview`, `auto` · [Conteneurs](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 : chaque freezer, protecteur et obfuscateur de source nommé</strong></summary>

| Famille ou format | Prise en charge et prérequis |
|---|---|
| PyInstaller 2.x à 6.20+ | Récupérer les archives et le bytecode intégrés, y compris les couches AES-CTR/CFB prises en charge |
| Nuitka onefile, standalone, module, wheel | Extraire les charges utiles onefile ; récupérer les symboles et la structure visible depuis Python à partir des formes compilées |
| cx_Freeze, py2exe, shiv, pex, Briefcase | Extraction d'empaqueteur via `pyfreeze` ; la commande reste expérimentale |
| PyOxidizer | Extraction expérimentale, non validée |
| SourceDefender `.pye` | Déchiffrement statique via `py sourcedefender` et `sourcedefender.decrypt` |
| PyArmor v3 (DES hérité), PyArmor v4 (mixte hérité), PyArmor v5 (AES hérité) | Détection seule : frontière de clé encapsulée RSA |
| PyArmor v6, PyArmor v7 | Récupération statique partielle ; le mode super et les clés indisponibles restreignent la sortie |
| PyArmor v8, PyArmor v9 / 9-Pro | Récupération statique du wrapper lorsque le matériel de clé est disponible. Le résultat publié <!-- m:pyarmor_frac -->72 / 72<!-- /m --> compte uniquement le décodage complet du `CodeObject` racine pour les wrappers v8/v9 default-trial nommés ; il n'établit pas l'équivalence de source ni ne couvre le mode licence enregistrée/pro, BCC ou super |
| Kramer / Specter, Berserker, BlankOBF, PlusOBF, Wodx, pyobfuscate.com, pyobfuscate.com (2026 XOR/lambda), PyObfuscator (mauricelambert), Manglify, Oxyry, pyminifier, famille d'obfuscateurs en ligne, Xindex, Patchwork, pyc-zipper | Récupération statique de source/loader via l'évaluateur AST ; les couches individuelles et les résidus sont rapportés |
| Jawbreaker, ObfuXtreme | Récupérer le corps présent dans l'artefact ; les charges utiles récupérées à l'exécution restent absentes |
| python-obfuscator (PyPI), pyobfus, Pypacker | Pelage partiel de wrapper et classification |

PyArmor peut nécessiter le fichier de runtime correspondant à côté du wrapper. Son chemin BCC dédié requiert `--allow-bcc` et émet des lifts natifs statiques ainsi que des squelettes Python pour les corps modélisés ; la récupération automatique sensible au chemin peut publier les mêmes artefacts BCC. Seul le hook dynamique PyArmor v6/v7 exécute du code d'exemple, derrière `--allow-dynamic` avec un watchdog. `--allow-bcc` n'autorise que l'analyse statique dans l'arborescence et n'exécute pas l'échantillon ni n'invoque d'outils externes. [Détails des versions et modes](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor).

</details>

<details>
<summary><strong>JavaScript, WebAssembly et applications web empaquetées</strong></summary>

| Famille ou format | Prise en charge et route |
|---|---|
| obfuscator.io / javascript-obfuscator, JS-Confuser | Récupérer les tableaux de chaînes pris en charge, les transformations dispatcher/control-flow, les prédicats opaques et les couches de loader ; commandes directes et `js.deob` |
| Jscrambler, js-obfuscator (jsobfu) | Récupération partielle de templates et de transformations statiques |
| JSFuck, aaencode, jjencode, JSFiretruck, Dean Edwards Packer | Décodage statique via des opérations dédiées et des routes de chaîne reconnues |
| JSDefender, Arxan / Digital.ai | Détection et pelage partiel de transformations statiques ; les opérations JS commerciales protégées nécessitent l'option d'autorisation de la commande |
| PACE | Détection seule |
| webpack 4, webpack 5, Vite, Rollup, Rolldown, esbuild, Turbopack, Bun, Parcel, Browserify, SystemJS ; modules AMD | Débundling/récupération de modules directe. La chaîne dispatche webpack et Vite ; les marqueurs de catalogue pour les autres bundlers ne rendent pas à eux seuls ces routes automatiques |
| bytenode `.jsc`, Node SEA, nexe, nw.js | Inspection/carving des données V8 empaquetées ; Node SEA et bytenode ont des branches de chaîne explicites |
| Electron ASAR, Tauri v1/v2, Wails v2 | Récupérer les arborescences frontend intégrées ; Electron/Tauri utilisent `webview.carve`, Wails utilise `go.classify` ; `webview` direct gère les trois |
| Bun standalone, Deno eszip v2 à v2.3 / `deno compile` | Récupérer les graphes de modules intégrés via les lecteurs de conteneurs respectifs ; eszip expose aussi un lecteur Rust direct |
| Wobfuscator, Jscrambler WASM, wasm-mixer / Wasmixer | Inversion partielle des transformations prises en charge via `wasm.deob` ; des fixtures en forme d'outil évaluent les transformations, sans sortie commitée provenant de ces obfuscateurs eux-mêmes |
| Tigress → Emscripten, wasm-name-obfuscator | Détecter et classifier ; l'helper Tigress est hors du chemin d'exécution `wasm deob`, et les noms originaux détruits restent indisponibles |

[Routes JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) · [Limites Wasm](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) · [Dispositions frontend intégrées](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md).

</details>

<details>
<summary><strong>Packers, protecteurs et familles d'obfuscation natifs</strong></summary>

| Famille | Prise en charge et route |
|---|---|
| Donut, sRDI | Récupérer le module intégré à partir des dispositions de shellcode-loader prises en charge |
| UPX, ASPack, Petite, MPRESS, FSG, PECompact, Yoda's Crypter, NSPack, MEW, kkrunchy | Routines de dépaquetage implémentées, accessibles via `native unpack` et la chaîne de packers ; la fidélité varie selon la famille et le spécimen |
| ASProtect, Morphine, nPack, NeoLite, PolyCryptor, Warzone Crypter | `StubEvalPending` : le comportement de l'émulateur dispose de preuves de stub construites sur spécification ; la récupération réelle de packers commerciaux n'est pas validée et aucun dispatch de dépaquetage n'est annoncé |
| Yoda's Protector, VMProtect, Themida / WinLicense | CLI et auto en détection seule. Des helpers Rust séparés exposent le carving assisté par l'original ou la récupération de sections protégées ; ils n'établissent pas une dévirtualisation complète du programme |
| PE-Protector, PELock, Enigma Protector, Armadillo, Obsidium, WinLicense | Détection seule |
| DotNetPatcher, NetCryptor | Déléguer la couche managée à la passe .NET |
| Aplatissement OLLVM, flux de contrôle factice, substitution d'instructions ; Tigress CFF | Transformations de désobfuscation statique et rapports pris en charge via les API Rust natives ; l'analyse applicable apparaît dans les rapports de récupération native |
| Alcatraz, Emotet CFF, Mirai, Dridex, Trickbot, obfus.h, Cryptify (rust-obfuscator), guardian-rs, obfusheader.h, obfuscxx, Amice | Signatures d'obfuscation native nommées ; les helpers individuels de chaînes/control-flow ont une récupération plus étroite que la famille complète détectée |

L'analyse native récupère aussi les symboles Rust/C++, les RTTI et vtables C++, les modèles d'objets Delphi/C++Builder et les ressources DFM, les informations DWARF/PDB/STABS, les imports, les graphes d'appels, les signatures cryptographiques et les correspondances FLIRT. L'analyse d'instructions couvre x86, ARM, RISC-V, MIPS, PowerPC, SPARC, eBPF et AVR ; l'émission de source concerne l'ensemble d'architectures plus restreint listé ci-dessus. [Analyse native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) · [Preuves de dépaquetage et de récupération d'octets](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-unpack.md) · [Désobfuscation](https://github.com/1-3-7/disrobe/blob/main/docs/src/anti-analysis.md).

</details>

<details>
<summary><strong>Familles de packages JVM, Android, .NET et mobiles</strong></summary>

| Famille | Prise en charge et prérequis |
|---|---|
| Zelix KlassMaster, Allatori, Stringer, DashO | Récupération de chaînes pour les motifs pris en charge, suivie de la décompilation des classfiles |
| DexGuard | Détection, pelage structurel et émulation de déchiffrement de chaînes dans la classe pour les constantes à clé prises en charge |
| BlackObfuscator | Reconnaissance du dispatcher DEX et annotation de l'ordre des blocs |
| ProGuard / R8 | Rejeu de mapping vers un sidecar de restauration de noms ; les noms originaux nécessitent `mapping.txt` |
| yGuard, SkidSuite2, JBCO | Détection seule |
| Promon SHIELD, Guardsquare DexGuard RASP, Guardsquare ThreatCast, Appdome, OneSpan, Arxan / Digital.ai, Zimperium zShield, Licel DexProtector | Identification RASP Android et rapports structurels |
| ConfuserEx2 | Récupération de constantes sur échantillons réels et déflatage du flux de contrôle ; les ressources chiffrées peuvent conserver une frontière de clé à l'exécution |
| Eazfuscator.NET | Déchiffrement de chaînes et lift de VM évalués sur modèles ; la fixture de VM provient d'un virtualiseur interne au dépôt, pas du produit commercial |
| KoiVM (ConfuserEx VM) | Corps virtualisés liftés vers CIL sur des sorties commitées d'outils réels |
| ConfuserEx, Dotfuscator, Dotfuscator CE, SmartAssembly, Babel, DeepSea, Spices.Net, Goliath, Skater, .NET Reactor, CryptoObfuscator, ArmDot, Agile.NET, Obfuscar, DotNetPatcher, NetCryptor, BitMono | Détection et récupération partielle spécifique à la famille : noms, chaînes, ressources ou structures de méthodes. BitMono figure dans le détecteur de protecteurs au-delà du catalogue de chaînes .NET à 22 entrées |
| Themida (wrapper .NET), ILProtector, MaxToCode | Détection seule pour les corps à clé de loader natif |
| React Native APK, React Native IPA ; bytecode React Native Hermes | Extraire les charges utiles JS/Hermes et router le bytecode pris en charge vers le lift Hermes |
| Kernel Dart Flutter ; snapshot AOT Flutter (`libapp.so`) | Récupération de la table source du kernel ; déclarations AOT, métadonnées et désassemblage ARM64. La version du snapshot et les noms disponibles contraignent la récupération |
| Xamarin / .NET MAUI APK, Apache Cordova APK, Capacitor APK, NativeScript APK | Identification du runtime et extraction prise en charge des packages/membres |
| Android APK (`classes.dex`), Android app bundle (AAB / APKM / XAPK), IPA | Inspection de package et extraction des enfants ; la récupération en aval dépend du runtime intégré |

Les déchiffreurs de chaînes .NET pour SmartAssembly, Spices.Net, Skater, .NET Reactor, Eazfuscator.NET et CryptoObfuscator sont évalués sur des algorithmes modélisés, pas sur des assemblys produits par les éditeurs et commités. ConfuserEx2, Obfuscar et BitMono disposent de preuves sur des assemblys protégés réels. [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>Familles Lua, PHP, shell, Ruby, BEAM, Swift, Go et ActionScript</strong></summary>

| Famille | Prise en charge et prérequis |
|---|---|
| IronBrew2 | Récupération de VM, vérifiée par différentiel d'exécution sur des sorties réelles 2.7.0 standard et MAX |
| Prometheus | Récupération partielle, y compris les arbres de dispatch `Vmify` empilés pris en charge |
| MoonSec V1, MoonSec V2, MoonSec V3, AztupBrew, DarkSec, Boronide, PSU, WeAreDevs LuaU, luaobfuscator.com, SLua (Unity Lua 5.3), Hercules | Récupération Lua partielle ; les preuves de VM de forme MoonSec utilisent un bootstrap synthétique |
| Luraph | Détection seule |
| Bytecode Luau, Garry's Mod Lua (GLua) | Reconnaissance de dialecte ; lift Luau et récupération GLua partielle |
| ionCube, SourceGuardian, Zend Guard | Détection d'enveloppes PHP commerciales ; les clés résidant dans le loader restent une frontière. Les cas hérités à clé statique peuvent produire une structure `op_array` partielle |
| FOPO, Better PHP Obfuscator | Pelage statique de chaînes eval PHP, avec exigences de clé littérale pour les couches chiffrées |
| Invoke-Obfuscation (token), Invoke-Obfuscation (AST), Invoke-Obfuscation (string), Invoke-Obfuscation (encoding), Invoke-Obfuscation (compress) ; Invoke-Stealth, PowerHell, Chameleon, psobf | Récupération PowerShell statique |
| Invoke-Obfuscation (launcher), ISESteroids | Récupération PowerShell partielle |
| Bashfuscator (token), Bashfuscator (string), Bashfuscator (obfuscate), Bashfuscator (compress) ; indirection Bash (IFS/eval) ; node-bash-obfuscate (eval par table de chunks) | Récupération Bash statique |
| Obfuscation Batch (`%random%`), obfuscation Batch (indirection set) ; macro VBA (décompilation p-code + stomping) | Pelage Batch et récupération source/p-code VBA |
| YARV InstructionSequence (`.rb` compilé), bytecode mruby RITE | Récupération de source Ruby |
| Exécutable auto-extractible OCRA, package RubyScript2Exe | Classification/récupération partielle de freezer |
| Classe compilée JRuby, image native TruffleRuby | Détection seule via le catalogue Ruby |
| Fichier BEAM (module compilé Erlang / Elixir), archive EZ (modules `.beam` encapsulés en ZIP) | Extraction de module, récupération de source/chunk de débogage ou repli Core Erlang |
| garble | Métadonnées Go et littéraux pris en charge ; le hachage des noms originaux ne peut être inversé sans la graine manquante |
| Métadonnées Mach-O Swift / Objective-C, binaire Mach-O fat (universel), cache partagé dyld | Métadonnées de runtime, récupération de tranches et de dylibs |
| SwiftShield | Analyseur de mapping ; le mapping doit être fourni pour récupérer les noms originaux |
| SWF (Flash, FWS/CWS/ZWS) DoABC, bytecode ABC brut | Désassemblage et pseudocode de corps de méthode |
| secureSWF, DoSWF, Kindi, Irrfuscator, swfLock | Détection seule |

[Catalogue des familles](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>Les 103 formats de conteneurs enregistrés</strong></summary>

| Catégorie | Formats |
|---|---|
| Archives générales | 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 |
| Archives applicatives et de langages | JAR, WAR, APK, XPI, WHL, EGG, CRX, NUPKG, VSIX, PYZ, Electron ASAR |
| Installateurs et images applicatives | PKG, DMG, DEB, RPM, AppImage, Snap, Flatpak, MSIX/APPX, MSI, NSIS, Squirrel, Inno Setup, InstallShield, Enigma Virtual Box |
| Systèmes de fichiers et flux de systèmes de fichiers | SquashFS, cramfs, ext4, romfs, MinixFS, Android sparse, btrfs-send, EROFS, JFFS2, NTFS, UBI/UBIFS, YAFFS2, QNX, partclone |
| Images disque et de déploiement | ISO, OCI, image Docker, VHD, VHDX, WIM, GPT, MBR, FAT12/16/32 |
| Flux de compression | XZ, gzip, bzip2, zstd, LZMA, lzip, LZ4, zlib, Unix compress (`.Z`) |
| Données applicatives intégrées | Bun standalone, UnityFS, bundle single-file .NET |
| 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 ; volume de firmware UEFI |
| Mémoire et volumes chiffrés | Windows minidump, LUKS1 |

Le registre déclare la détection pour chaque entrée. Parmi ces routes, 102 utilisent l'extracteur générique ; <!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth --> disposent d'entrées commitées qui atteignent les octets des membres, DMG dispose de preuves commitées en détection seule, et 59 n'ont aucune entrée commitée. LUKS1 est évalué séparément par rapport au texte en clair et nécessite une clé de volume brute `aes-cbc-plain` pour le déchiffrement ; sans elle, il rapporte la frontière de clé. Les méthodes de compression individuelles, les membres chiffrés, les volumes fractionnés et les fonctionnalités de systèmes de fichiers ont des limites plus étroites. StuffIt 5 renvoie actuellement le blob d'archive via l'extraction, même si ses décodeurs de forks existent. Le contenu Airoha OTP-AES est extrait verbatim.

Des lecteurs Rust supplémentaires exposent les structures Deno eszip, Apple APFS/HFS+, les overlays ajoutés aux ELF et Blazor WebCIL ; ils ne constituent pas des entrées supplémentaires dans le décompte des 103 formats. [Routes d'extraction, versions de méthodes et limites](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md) · [Registre des conteneurs](https://github.com/1-3-7/disrobe/blob/main/crates/disrobe-binfmt/src/container.rs).

</details>

## Récupération automatique`auto` choisit une passe dans le registre compilé, l'exécute, puis ré-identifie sa sortie et les enfants extraits. Il s'arrête au seuil de confiance, à un hachage de contenu répété ou à la limite de profondeur (huit par défaut). Les rapports et les fichiers sources marqués comme terminaux restent des sorties plutôt que d'être réinjectés dans la détection. Le tableau suivant rend compte de chaque passe enregistrée par une compilation complète ; une compilation allégée peut omettre les lignes conditionnées par des fonctionnalités.

| Couche d'entrée | ID de passe enregistrés | Sortie automatique | Contrôles dédiés ou prérequis |
|---|---|---|---|
| Archives, installateurs, firmware, volumes | `binfmt.container` | Enfants extraits, suivis récursivement dans les passes de langage/natif | `extract` pour les rapports de membres et l'option explicite de clé brute LUKS1 |
| PyInstaller | `pyinstaller.extract` | Membres intégrés et enfants `.pyc` | `pyinstaller extract` pour les options spécifiques aux archives |
| Congélateurs Python | `pyfreeze.extract`, `nuitka.extract` | Charges utiles extraites ou structure de paquet compilé prise en charge | `pyfreeze` expérimental ; la variante Nuitka détermine ce qui survit |
| Python protégé | `pyarmor.unpack`, `sourcedefender.decrypt` | Texte en clair/bytecode disponible, métadonnées ou rapports de frontière de clé | Matériel d'exécution/clé correspondant ; mode PyArmor dédié et options de rigueur |
| Source et bytecode Python | `py.deob`, `py.decompile`, `py.disasm` | Source pelée, source décompilée ou trace d'instructions | `py decompile --emit source,disasm,ast` ; un interpréteur correspondant est nécessaire pour les vérifications de recompilation |
| Pickle | `pickle.classify` | Analyse symbolique et classification | `pickle` pour les opérations individuelles d'inspection/reconstruction |
| JavaScript | `js.deob` | Désobfuscation prise en charge, récupération de modules webpack/Vite, gestion Node SEA/bytenode | `js unbundle` expose l'ensemble plus large de bundlers ; les source maps et les options de renommage sont des contrôles directs |
| WebAssembly | `wasm.deob` | WAT récupéré ou relevé plus sidecars de détection, résumé et récupération | `wasm decompile --target` choisit Rust, TypeScript, C, WAT ou JSON |
| Electron / Tauri | `webview.carve` | Membres frontend intégrés | `webview` prend également en charge Wails ; la récupération automatique Wails utilise `go.classify` |
| PHP / Phar | `php.peel` | Source pelée, sortie `op_array`, enfants d'archive, rapports résiduels/clés | Les clés et IV doivent être disponibles statiquement pour les couches chiffrées |
| JVM / DEX | `jvm.classify` | Source Java, manifestes de protection et de récupération, enfants de classes/archives | `jvm`/`apk` pour le mapping, les signatures et les backends externes optionnels |
| .NET | `dotnet.classify` | C# et analyse, constantes/ressources/CIL récupérés, ou métadonnées Native AOT | `dotnet` pour d'autres formats de source et backends de rendu installés |
| Paquets mobiles / bytecode | `mobile.classify` | Extraction d'exécution/membres, lift Hermes, source Dart kernel ou rapports AOT | `hermes`, `flutter`, `mobile` pour les contrôles spécifiques au format |
| Lua | `lua.deob` | Lua récupéré et sidecars de dialecte/fidélité | `lua` pour les contrôles explicites de famille et de sortie |
| Shell / Office / PDF | `shell.deob` | Scripts pelés, source de macro/p-code, XLM et rapports de documents | `shell` pour les opérations spécifiques aux documents |
| Ruby | `ruby.classify` | Analyse plus source YARV/mruby récupérée lorsque disponible | `ruby` pour les rapports spécifiques à la variante ; la classification JRuby/TruffleRuby n'est pas une récupération de source Ruby |
| BEAM / EZ | `beam.classify` | Erlang/Elixir/Core Erlang, désassemblage, enfants d'archive | Les chunks de débogage survivants déterminent la fidélité de la source |
| SWF / ABC | `as3.classify` | Structure ABC, listings d'instructions, pseudocode AS3 | Les obfuscateurs commerciaux nommés restent en détection seule |
| Go | `go.classify` | Symboles, types, analyse garble et membres de système de fichiers intégrés | `go` pour DWARF, BuildInfo et autres rapports dédiés |
| Swift / Objective-C | `swift-objc.classify` | Métadonnées, tranches universelles et dylibs de cache partagé | Des fichiers de sous-cache/symboles frères peuvent être nécessaires ; contrôles directs `swift`/`macho` |
| Packers natifs | `native.packer-unpack` | Image décompressée ou module intégré disponible, symboles, signatures, rapports de récupération | Seuls les dispatches de packers implémentés décompressent ; les niveaux VM commerciaux peuvent s'arrêter à la détection |
| Images natives | `native.image-classify` | Identité, symboles, signatures, constats et un rapport de pseudo-source x86-64/AArch64 borné | `native decompile` sélectionne une commande complète de sortie de source ; les chemins de source ARM32/MIPS32 sont directs |
| Windows / OS/2 NE | `native.ne-structure` | Segments, entrées, imports et ressources | Récupération structurelle plutôt que décompilation de source |
| Perl / R / Tcl / Haxe / WSH | `scriptlang.classify` | Rapports de langage, structures récupérées et artefacts enfants pris en charge | Les API de bibliothèque par format exposent des opérations plus fines |
| Nim / Zig / Crystal / D | `nativelang.classify` | Empreintes de langage, symboles et structure native partielle | La classification nécessite suffisamment de marqueurs de langage survivants |

Par exemple, une application PyInstaller reconnue peut progresser via `pyinstaller.extract` → `pyarmor.unpack` → `py.decompile` ; un APK via l'extraction de membres → DEX → Java ; et une image native packée via la décompression → l'analyse de langage ou d'image. Chaque flèche dépend de ce que cette couche particulière produit réellement.```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, la sélection explicite source-cible, le rejeu de mapping et l'invocation optionnelle d'un backend externe restent des opérations dédiées. Registre des passes · Sélection de chaîne et disposition de sortie.

Analyser et exporter le résultat

La carte des capacités couvre les groupes de commandes et les intégrations. Son inventaire lisible par machine relie le code source, les tests, la documentation, le statut de support et les démos. La référence CLI couvre les commandes imbriquées ; les drapeaux globaux couvrent les options partagées. Utilisez disrobe <command> --help pour l'interface de votre build installé.

Les commandes de projet et de service y sont également indexées : serve, plugin, init, config, catalog, passes, doctor, install, install-deps, self-update, completions, man, explain et bug-report. Utilisez doctor pour sonder 46 à 51 outils externes selon la plateforme et identifier les backends optionnels manquants.

Utiliser la même récupération dans votre flux de travail

Comparer les outils

Le tableau associe chaque tâche de récupération aux commandes de Disrobe et aux outils apparentés. Les décompilateurs installés et les artefacts exportés fournissent les points d'intégration présentés ci-dessous.

L'inventaire comparatif nomme les comparaisons à entrée partagée en suspens. Les options de backend sont documentées dans installation et les guides de langage liés ci-dessus.

Comparaisons d'outils mesurées

Les mesures utilisent les entrées épinglées, les versions d'outils et les règles de notation liées ci-dessous. Les comptes DEX et JAR mesurent la compilation des régions émises par chaque outil. Ces populations diffèrent, donc leurs comptes ne classent pas la qualité de récupération. Le rappel des secrets APK utilise la même vérité terrain de huit tokens.

Entrées, résultats bruts des outils et commandes de reproduction.

Donner à Ghidra l'exécutable récupéré

La même analyse Ghidra 12.1.2 voit un code différent après que Disrobe a exporté un exécutable packé en PE reconstruit. Ces instantanés locaux utilisent de vraies fixtures packées bénignes et enregistrent à la fois des augmentations et des diminutions. Les colonnes fonctions/instructions/chaînes proviennent de l'instantané d'analyse à neuf entrées ; les rendus C complétés proviennent de l'instantané de décompilateur séparé à six entrées. Un rendu complété est une sortie non vide, pas une note de justesse de la source.

Les comptes kkrunchy diminuent. Plus de fonctions découvertes ne signifie pas nécessairement plus de fonctions correctes, et ces comptes d'analyse ne remplacent pas une comparaison d'octets. Lisez l'instantané d'analyse, l'instantané de décompilateur et les mesures séparées de récupération d'octets natifs.

Inspecter les preuves

L'index des preuves relie les mesures de récupération à leurs fixtures, méthodes de comparaison, commandes et résultats.

Les résultats distinguent la récupération d'octets, l'acceptation par le compilateur et les vérifications comportementales. L'acceptation par le compilateur et les comptes de couverture ne sont pas des scores d'équivalence.

Détails de notation JADX/CFR et commandes de reproduction

Récupération vérifiée par rapport à des références indépendantes

Ces vérifications mesurent Disrobe par rapport à un artefact original, un compilateur, un interpréteur ou un corpus étiqueté. Elles sont distinctes de la comparaison de deux décompilateurs. Chaque résultat lié enregistre la population d'entrée, les prérequis et la commande de reproduction.

Comptes de couverture et leurs populations de justesse plus restreintes| Surface | Count | What it establishes | |---|---|---| | PyArmor | 72 / 72 named v8/v9 default-trial wrappers | Static decryption and complete root `CodeObject` parsing, without an external correctness comparison | | Android, three real APKs | 83662 / 83943 methods lowered, local | Self-reported body coverage. The separate verifier population is 2988 of 2998 bodies presented in isolated carriers | | Wasm instruction inventory | 1034 of 1034 instructions | External `wasm-tools` denominator and re-assemblable WAT; the lowering numerator is self-counted | | Luau instruction table | 86 of 88 entries lifted | Disrobe's declared table; `BREAK` and `NEWCLASSMEMBER` remain decoded but unresolved | | Swift symbols | Committed symbol population renders to pinned strings | Regression consistency, with no required external demangler comparison | | OLLVM flattening | 9 reached states out of 9 derived states | Dispatcher-state coverage over two committed functions; both counts are derived in-process | | Mixed boolean arithmetic | 316 entries; reference run answered 247 and refused 69; external solver proved 236 answers and refuted none | Budgeted recovery and held-out originals; unanswered or unproven entries do not become solver-proved results | | Containers | 42 generic routes write member bytes | Exercised breadth within the 103 detected formats; LUKS1 has its own plaintext comparison |

Complete evidence records describe each population and grading rule.

Chart labels use strong for an independent correctness reference, recompile-only for compiler acceptance, and coverage-self-reported for Disrobe's own coverage counters. The comparison method and population define each result's scope.

Browse the results, tool comparisons, and reproduction prerequisites for individual measurements.

Know the limits

  • Compiled output loses information. Original comments, formatting, names, and some type information may be absent.
  • Family recognition is broader than recovery. A catalog match or successful parser can coexist with partial source emission. Read the family tier and the actual result.
  • Native recovery depends on architecture and output language. The native guide lists supported paths and their tests.
  • Commercial VM-protector detection is not a general source-recovery promise. Internal helpers and protected-section artifacts do not establish a complete CLI recovery path. See native unpacking.
  • Missing keys remain missing. Runtime-derived keys and absent name-hashing seeds cannot be inferred from an unsupported artifact. Python, PHP, and container guides state format-specific boundaries.
  • External backends have their own requirements. Some commands can select installed tools through --backend auto. Check the command's help and installation guide before choosing a backend.
  • Analysis defaults to static recovery. This does not make untrusted input harmless. Resource limits, explicitly selected dynamic operations, and external-process boundaries are described in forensics safety.

Understand the pipeline

Disrobe's intermediate representations, from bytes through program structure to source

The chain runner connects single-purpose passes through shared artifacts and intermediate representations. A pass contributes the output it can justify; downstream consumers retain provenance and report unsupported boundaries. Explore the architecture, pass model, IR ladder, and chain runner.

Documentation and contribution

Start with the documentation, quickstart, and result guide. Use disrobe explain <code> to look up a diagnostic. For changes to the project, read the contributing guide and the relevant feature's tests and evidence.

The threat model describes trust boundaries and input handling. Report security concerns through SECURITY.md. LEGAL.md describes the project's legal considerations; permission to analyze an artifact depends on your circumstances.

License

License: Disrobe Source-Available

Every version of Disrobe is proprietary and source-available under the Disrobe Source-Available License, Version 1.1, which supersedes the Elastic License 2.0 and Version 1.0 for all versions and revokes all earlier grants as stated in the relicensing notice.

Personal hobby projects, personal learning, and unpaid independent security research by individuals, nonprofit education and research, and bona fide journalism are free, as defined in the license.

Any use by or for a company requires a paid license. See commercial licensing.

Required credit: This work used Disrobe, created by 1-3-7: https://github.com/1-3-7/disrobe

Forks other than contribution forks, reposting, rebranding, resale, hosting, and competing development are prohibited. The software is provided as is, at the user's own risk.

See attribution, contributor terms, summary, and third-party notices.

Copyright (c) 2025-2026 1-3-7. All rights reserved.

Earlier development commits were consolidated into a single baseline as part of the documentation and visual refresh.

Télécharger l’outil
TâcheCommandesSortie ou étape suivante
Trouver des indicateurs, des secrets et des constats statiquesscan, frisk, strings, ioc, indicators, behaviorConstats et offsets
Inspecter les fonctions, les flux et le comportementquery, capabilities, taint, vulnmatchIR interrogeable, mappings ATT&CK/MBC et rapports source-to-sink
Conserver les annotations et les artefacts structurésannot, rename, envelope, verify, yaraEnveloppes d'artefacts et état de l'analyste
Suivre la provenance et comparer les exécutionschain, context, status, report, diff, guard, semdiffRapports, hachages et différences de récupération
Collecter des données réseau publiquesprowlCollecte réseau explicite, distincte de la récupération hors ligne
SurfacePoint d'entréeGuide
RustTypes de cœur partagés et crates de passes individuellesAPI de bibliothèque
PythonBindings typés via import disrobeBindings Python
HTTP, gRPC et LSPdisrobe serveService
Model Context Protocoldisrobe-mcp ou disrobe serve --mcpIntégration MCP
Éditeurs et outils d'analyseVS Code, IDA Pro, Ghidra, Binary NinjaIntégrations d'éditeurs
GitHub ActionsAction de dépôt et sortie SARIFGitHub Action
Vérifications de commit localesID de hook disrobepre-commit
NavigateurWorker Wasm côté clientPlayground
Contexte de projet pour les outils de codagedisrobe init --ideSidecar de métadonnées
Tâche de récupérationOutils nommésVoie de DisrobeComment les choisir ou les combiner
Bytecode Python vers sourcepycdc, PyLingual, uncompyle6, decompyle3Décompilateur CPython 1.0 à 3.15 en processus, récupération d'objets de code imbriqués, sortie source/désassemblage/ASTInspectez la source, le désassemblage et l'AST récupérés par le décompilateur Python intégré
Extraction de Python figépyinstxtractor-ng, pydecipherExtraction PyInstaller, Nuitka et freezer suivie de la récupération du bytecodeauto peut poursuivre depuis le membre extrait à travers un protecteur jusqu'au décompilateur Python
PyArmorPyarmor-Static-Unpack-1shotRécupération statique du wrapper/runtime, rapports de mode, lifting BCC statique optionnelFournissez le runtime correspondant pour récupérer les données du wrapper et inspecter les résultats propres au mode
Inspection de Picklefickling, pickletools de PythonTrace d'instructions, réducteurs symboliques, classification et reconstruction de valeursInspectez sans exécuter les réducteurs ; pickletools note l'inspection, et CPython vérifie la reconstruction sur 470 fixtures générées
Désobfuscation JavaScriptwebcrack, synchrony, REstringerobfuscator.io, JS-Confuser, motifs Jscrambler pris en charge, décodeurs ésotériques, récupération de constantes/flux de contrôleUtilisez js deob pour des options explicites ou auto lorsque le JS est dans un paquet
Débundling JS et source mapswakaru, webcrack, sourcemapperExtraction de modules, gestion des source maps, renommage sensible à la portée, inspection V8 empaquetéejs unbundle expose plus de routes de bundlers que la répartition automatique de chaîne
WebAssemblyWABT wasm-decompile, BinaryenPseudo-source WAT et C/Rust/TypeScript, résumés JSON, inversion d'obfuscation prise en chargeInspectez une cible source sélectionnée ; l'exécution wasmtime vérifie indépendamment le comportement récupéré ci-dessous
Source JVMCFR, Vineflower, Procyon, FernflowerRécupération native de classfiles plus gestion des protecteurs/chaînesjvm decompile écrit les artefacts Disrobe aux côtés de la sortie d'un backend installé ; CFR a un résultat de rendement de compilation mesuré ci-dessous
Paquets Android et DEXJADX, apktool, androguard, dex2jarRécupération Dalvik en processus, métadonnées/signatures APK, extraction runtime, sortie JavaLa décompilation DEX/APK utilise par défaut la voie native ; un backend Android est sélectionné explicitement. JADX a une étape mesurée ci-dessous
Assemblys .NETILSpy, dnSpy, dnSpyEx, de4dotRécupération CIL plus constantes propres au protecteur, ressources, corps de VM et métadonnées Native AOTdotnet decompile écrit la sortie CIL de Disrobe aux côtés d'un moteur de rendu installé ; --backend auto sélectionne ILSpy, dnSpyEx, dnSpy ou de4dot
Décompilation nativeGhidra, IDA, Binary NinjaPseudo-C x86-64 C/Rust et AArch64/ARM32/MIPS32 en processus ; rapports de symboles/types récupérésSélectionnez Ghidra en mode headless avec --backend ghidra, ou utilisez les intégrations d'éditeurs et les symboles exportés dans une session d'analyse interactive
Exécutables natifs packésupx -d, unipacker, Detect It EasyDéballeurs implémentés et émulation de stub bornée, images PE reconstruites, modules de chargement embarquésExportez les images PE récupérées vers Ghidra/IDA. Les mesures Ghidra ci-dessous comparent les entrées packées et reconstruites
Obfuscation nativeGhidra, IDA, Binary Ninja et scripts de désobfuscationTransformations OLLVM/Tigress, simplification MBA, chaînes de pile, métadonnées natives et rapports de récupérationSélectionnez l'opération/API native pertinente ; une empreinte de protecteur VM seule n'implique pas la récupération du corps
Métadonnées Go et garbleGoReSym, redress, gorepclntab, métadonnées de modules/types, fichiers embarqués et littéraux garble récupérablesgo rapporte les noms/types ; native decompile traite séparément la voie source du code machine
Swift / Objective-Cswift-demangle, class-dump, jtool2Données de classes/protocoles/sélecteurs runtime, rendu de symboles, tranches fat, dylibs de cache partagéFournissez les mappings survivants et les fichiers de sous-cache ; les noms originaux effacés par renommage nécessitent une carte externe
Bytecode et VM Luaunluac, luadec, LuaDec51Source Lua/LuaJIT/Luau plus récupération d'obfuscateurs pris en charge et de VM personnaliséesIronBrew2 dispose de preuves différentielles d'exécution avec l'outil réel ; la récupération ordinaire de .luac et la récupération de VM sont des opérations différentes
Bytecode RubyDésassemblage MRISource YARV et mruby, listings d'opcodes, classification freezer/AOTLa recompilation MRI note le rappel des noms d'opcodes ; cette mesure n'établit pas l'équivalence d'exécution
Couches PHPphp-malware-finderPelage de chaînes eval et de boucles/chiffrements à clé littérale, extraction Phar, rapports d'enveloppes d'encodeursUtilisez les couches statiques et le matériel de clé disponible ; les charges commerciales à clé de chargeur natif restent scellées
PowerShell, Bash, VBAPowerDecode, outils FLARE, olevbaDésobfuscation de shell, source/p-code VBA et stomping, formules XLM, actions PDFshell place la récupération de scripts et les constats de documents aux côtés du reste de l'analyse d'artefacts
BEAM / ActionScriptbeam_disasm d'Erlang, RABCDAsmRécupération de source de débogage/Core Erlang BEAM et pseudocode de corps de méthode ABCPréservez les chunks de débogage lorsqu'ils sont disponibles ; le BEAM strippé a une vérification d'exécution Erlang réel distincte
Hermes / React Nativehermes-dec, hbctool, DroidSawExtraction runtime, structure HBC, lifting pseudo-JavaScript pris en chargeL'analyse HBC couvre v60 à v96 ; le lifting de source a une frontière mesurée plus étroite. La taint du pont Hermes-vers-DEX n'est pas implémentée
Flutter / Dart AOTreFlutter, Darter, blutterTables de source Kernel, graphe de déclarations AOT, corps ARM64, chaînes, analyse de rename-mapLa source Kernel et les métadonnées AOT sont des niveaux de récupération différents ; les versions de snapshot contraignent l'analyse AOT
Conteneurs et firmwarebinwalk, unblob, 7-ZipExtraction de formats enregistrés, routage récursif des enfants, décodage/carving de firmware, rapports de refus par membreInjectez directement les membres extraits dans les passes de langage ; comparez les octets des membres plutôt que de traiter une magie reconnue comme une extraction réussie
Secrets et indicateursAPKLeaks, TruffleHog, Gitleaks, LinkFinderConstats sur l'arbre récupéré/APK, offsets de tokens, chaînes statiques, rapports de secrets et IOCScannez l'APK ou l'arbre récupéré ; comparez APKLeaks aux mêmes secrets plantés ci-dessous
Identification de format, packer, compilateurDetect It Easy, TrID, PEiD, binwalkIdentification multi-signaux, symboles, signatures et indices de routageUtilisez identify/detect pour sélectionner une voie de récupération, puis inspectez sa sortie réelle
Capacités et taintcapa, scripts Ghidra, JoernConstats ATT&CK/MBC avec offsets, requêtes IR normalisées, rapports de flux source-to-sinkExécutez la correspondance de capacités et l'analyse source-to-sink sur les artefacts récupérés ; le rapport de taint inclut sa population de tests Juliet
Outil et entréeRésultat DisrobeRésultat de l'outil nomméCe que la mesure vérifie
JADX 1.5.5 · Android DEX157 / 228 régions émises compilent proprement281 / 303 régions émises compilent proprementDEX EdgeCases commité ; javac réel, compilation de source complète puis isolation bornée des régions bloquant l'attribution ; populations émises différentes
CFR 0.152 · Classfile JVM181 / 181 régions émises compilent proprement152 / 166 régions émises compilent proprementJAR EdgeCases commité ; la même procédure de compilateur/notation ; populations émises différentes
APKLeaks 2.6.3 · APK à secrets plantés8 / 8 secrets plantés5 / 8 secrets plantésRappel exact de tokens sur le même APK ; Disrobe trouve aussi la clé d'accès AWS plantée, l'identifiant Basic et le JWT
Entrée packéeFonctions Ghidra, packé → reconstruitInstructions, packé → reconstruitChaînes, packé → reconstruitRendus C complétés, packé → reconstruit
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 → 358Non mesuré
MEW · AccessEnum4 → 152125 → 9 5923 → 802Non mesuré
MEW · Autologon4 → 295125 → 19 5953 → 406Non mesuré
kkrunchy classic · NASM hello4 → 1149 → 103 → 44 → 1
EntréeRégions émises par DisrobeRégions émises par l'outil nomméFrontière de populationReproduire
Android DEX157 / 228 régions émises compilent proprementJADX 1.5.5 : 281 / 303 régions émises compilent proprementpas de classement inter-outils : chaque outil a sa propre population de régions émisescargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr
Classfile JVM181 / 181 régions émises compilent proprementCFR 0.152 : 152 / 166 régions émises compilent proprementpas de classement inter-outils : chaque outil a sa propre population de régions émisescargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr
RécupérationRésultat enregistréRéférence et limite
Python 3.14.5, modules épinglés6077 sur 6286 objets de codeRecompilation CPython avec comparaison normalisée de la structure des opcodes ; les cibles de saut, la plupart des opérandes et les objets récupérés supplémentaires ne sont pas notés. Résultat
Python 3.14.5, population de cœur fixe17396 sur 18276 objets de code, mesure localeLa même comparaison normalisée sur 574 modules ; ce n'est pas un résultat d'équivalence sémantique. Résultat
Python hérité 1.0 à 3.7au moins 150 sur 191 fixtures (plancher de régression)Recompilation par interpréteur d'époque ou tokens structurels par rapport à la source originale. Résultat
Classification Pickle102 / 102 fixtures de classificationSémantique de pickletools. Résultat
Reconstruction Pickle470 / 470 fixtures reconstruites passent les vérifications d'égalité de ré-exécutionRé-exécution CPython. Résultat
Compilation de source JVM131 sur 131 méthodes compilentjavac réel. Résultat
Comportement JVM117 / 131 méthodes correspondent à l'exécution observéeJVM réelle ; huit méthodes divergent et six ne sont pas pilotées isolément. Résultat
Android DEX118 / 118 classes présentées au vérificateurJVM -Xverify:all ; 37 sur 155 classes sont ignorées à l'édition de liens et non notées. Résultat
.NET C#18 / 35 types EdgeCases complets se recompilent seulsRoslyn csc réel ; une source légale n'établit pas un comportement équivalent. Résultat
Corps de VM .NETModèle Eazfuscator : 67 / 67 instructions ; KoiVM réel : 6 / 6 corps liftésRéférences originales/build propre séparées ; EazVM utilise un virtualiseur dans le dépôt, KoiVM utilise la sortie d'un outil réel. Preuves
WebAssembly57 / 57 fonctions éligibleswasmtime compare les retours, les traps et les 4 096 premiers octets de mémoire linéaire sur les entrées de test. Résultat
BEAM sans chunks de débogage19 / 19 modulesRecompilation Erlang/OTP 27.3.4, comparaison des exports et sortie/statut de sortie de test/0. Résultat
Lua IronBrew2La sortie réelle 2.7.0 standard et MAX se récupère en une exécution correspondanteInterpréteur Lua réel par rapport aux programmes originaux ; une famille de VM. Résultat
Ruby YARVGreeter 100% ; megafile 98.67% de rappel des noms d'opcodesRecompilation MRI ; le rappel en multiensemble ignore l'ordre, les opérandes, les cibles de branchement et les instructions supplémentaires. Résultat
Noms de types Go strippés838 sur 838 nomsMétadonnées réelles go1.26.3 du build de comparaison. Résultat
Hermes HBC v968 sur 8 fonctions, zéro opération de repliÉchantillon hermesc réel avec source originale et noms de fonctions. Résultat
Octets natifs packésUPX, FSG, NSPack, Petite, MPRESS .text identiques octet par octet sur des paires commitées nommées ; ressources de Yoda's Crypter identiques octet par octetOctets originaux alignés sur les RVA ; les résidus d'image entière et de ressources restent rapportés séparément. Tableau par entrée
Indicateurs plantés6 / 6 catégories IOC représentéesVérité terrain commitée : endpoints, constats de manifeste, URLs, IPv4, email et .onion. Résultat
Graphe d'appels MCP5 / 5 arêtes directes, toutes correctement identifiéesELF strippé comparé à son jumeau de chaîne d'outils non strippé distinct. Précision, rappel
Taint natif93 / 190 flux étiquetés rappelés ; zéro faux positif, mesure localeTranche NIST Juliet CWE-78 char/system, gcc 16.2.0 -O2 ; sept catégories de flux déclarées n'ont pas de cas dans cette tranche. Résultat