
Suíte CLI em Rust que descompila estaticamente, desofusca e desempacota código nativo, bytecode, scripts, firmware e pacotes de aplicativos em mais de 15 ecossistemas por meio de um único pipeline automático.
Começar · Entradas suportadas · Recuperação automática · Comparação de ferramentas · Evidências · Documentação
Disrobe é uma suíte de linha de comando em Rust para descompilar, desofuscar e desempacotar software. Use-a para triagem de um arquivo desconhecido, recuperar código para engenharia reversa, extrair indicadores para uma investigação ou preparar artefatos para um desassemblador.
Recupere Python de bytecode e aplicações congeladas, Java de classfiles e DEX, C# de CIL, JavaScript de bundles, Lua de máquinas virtuais personalizadas e C ou Rust de código nativo. Extraia arquivos de instaladores, firmware, pacotes móveis e aplicações Electron, Tauri ou Wails. Mantenha código-fonte recuperado, símbolos, strings, tipos e proveniência juntos para análises posteriores.
A compilação completa cataloga 170 famílias em 15 ecossistemas e detecta 103 formatos de contêiner. disrobe auto identifica cada camada, executa uma passagem correspondente e segue os filhos recuperados em seus próprios caminhos de recuperação. Comandos dedicados expõem controles mais refinados, relatórios de análise e backends opcionais. A recuperação é executada estaticamente por padrão; código-fonte, estrutura, saída parcial e limites de chaves ausentes permanecem distinguíveis no resultado.
Se o Disrobe for útil para você, considere dar uma estrela ao repositório.
Assista ao vídeo completo · Leia a transcrição
Vinte comandos de CLI em 2 minutos e 12 segundos: desempacote um executável nativo, recupere Python e Lua, divida módulos JavaScript, restaure source maps, inspecione WebAssembly e recursos Android, extraia indicadores e preserve relatórios e hashes de artefatos. O capítulo final mostra configuração de projeto, configuração de IDE, anotações de analista e completions de shell. A transcrição inclui o inventário completo de comandos da compilação gravada; o mapa de capacidades explica seus limites de suporte.
Baixe o arquivo para sua plataforma em GitHub Releases, verifique-o em relação ao SHA256SUMS da release e coloque disrobe no seu PATH. Os arquivos de release incluem pacotes de assinatura; o guia de verificação explica como inspecioná-los.
| Plataforma | Alvos de release |
|---|---|
| Windows | x86-64, ARM64 |
| macOS | x86-64, ARM64 |
| Linux | x86-64 e ARM64 com glibc; x86-64 com musl |
Verifique o binário que você instalou:```sh disrobe --version disrobe --help
Para compilar a CLI a partir de um clone, instale o toolchain Rust do repositório e os [pré-requisitos de compilação nativos](https://github.com/1-3-7/disrobe/blob/main/docs/src/installation.md), depois execute:```sh
cargo build --locked --release -p disrobe-cli --bin disrobe
O executável é target/release/disrobe, ou target/release/disrobe.exe no Windows. Consulte o guia de instalação para sinalizadores de recursos e builds enxutos.
Comece com uma aplicação, biblioteca ou pacote. Identifique-a, recupere suas camadas reconhecidas e, em seguida, inspecione o resumo da recuperação:```sh disrobe identify path/to/application disrobe auto path/to/application --out recovered/ --capture-stages disrobe context --out recovered/
`identify` reporta o formato e os sinais disponíveis. `auto` extrai e recupera as camadas reconhecidas. `context` resume as passagens resultantes, a confiança e a proveniência. Com `--capture-stages`, inspecione cada estágio em `recovered/01-*/`, `recovered/02-*/` e `recovered/final/`; `chain.json` registra a topologia e os hashes, e `recovery.json` registra os resultados e os tempos.
Use um comando dedicado quando você souber a saída de que precisa:```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/
O decompilador nativo emite C por padrão em x86-64; --format rust seleciona Rust. AArch64, ARM32 e MIPS32 emitem pseudo-C. native export reconstrói imagens PE empacotadas suportadas para uma ferramenta de análise externa; webview grava a árvore de recursos do frontend recuperada sem iniciar a aplicação.
O repositório inclui um pequeno módulo WebAssembly para o playground do navegador. A partir de um clone, com a CLI completa no seu 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
O primeiro comando grava `add.summary.json`; o segundo grava texto WebAssembly em `add.lifted.wat`. A recuperação automática
seleciona uma cadeia disponível e grava seus artefatos em `recovered/`; `--capture-stages` retém
resultados intermediários. Essas operações inspecionam o módulo sem executar sua função exportada.
Inspecione os arquivos recuperados junto com o relatório: a identificação por si só não estabelece a recuperação. Constructos não suportados, material de chave ausente e cadeias indisponíveis aparecem no resultado. O [guia de resultados](https://github.com/1-3-7/disrobe/blob/main/docs/src/reading-a-result.md) explica artefatos, diagnósticos, resultados parciais e proveniência.
[Abra o playground no navegador](https://1-3-7.github.io/disrobe/playground/) · [Siga o guia de início rápido](https://github.com/1-3-7/disrobe/blob/main/docs/src/quickstart.md)
## Encontre sua entrada
**Recuperar** significa que um caminho alcançável emite código-fonte, bytes ou estrutura. **Parcial** significa que recupera apenas parte dessa informação. **Somente detecção** significa que identifica a família sem recuperar seu corpo protegido. Esses níveis descrevem operações sobre entradas suportadas; um nome de família por si só não é garantia de que toda versão ou configuração seja recuperada. As listas abaixo incluem o catálogo completo de famílias e formatos adicionais expostos por comandos e extratores dedicados.
| Entrada | Recuperação e saída | Comandos e guia |
|---|---|---|
| Python | Bytecode CPython 1.0 a 3.15 e marshal para código-fonte; desmontagem de PyPy, MicroPython `.mpy` v0 a v6, Jython, IronPython e Brython; extração de payload congelado; nomes, assinaturas e fallback estrutural de 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 | Desofuscação de código-fonte, reversão de minificação, divisão de módulos, source maps, inspeção de dados em cache do V8 e de runtime empacotado | `js` · [JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) |
| WebAssembly | `.wasm` para WAT, Rust, TypeScript, pseudo-código C ou JSON; inspeção de Component Model e grafo de tipos GC; reversão de ofuscação suportada | `wasm` · [WebAssembly](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) |
| JVM / Android | `.class`, JAR, DEX, APK, AAB; código-fonte Java, idiomas Kotlin/Scala, informações de manifesto e assinatura, relatórios de protetores e sidecars de mapeamento | `jvm`, `apk` · [JVM e Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) |
| .NET | Metadados PE/CLR e CIL para pseudo-código C#, F# ou VB; inspeção de ReadyToRun e Native AOT; extração de bundle de arquivo único | `dotnet` · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) |
| Nativo | Identificação ou análise de PE32/PE64, EFI PE, ELF32/ELF64, módulos de kernel, Mach-O thin/fat, COFF, MZ, NE, LE, LX e código bruto; emissão de código-fonte nos caminhos específicos de arquitetura acima | `native`, `macho`, `semdiff` · [Nativo](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md), [decompilação](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-decompile.md) |
| Go | Metadados de runtime PE/ELF/Mach-O, nomes de funções e tipos removidos, arquivos `embed.FS`, relatórios de garble e literais recuperáveis | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Classes, protocolos, campos, seletores, símbolos desmangled de Mach-O; slices universais; dylibs de cache compartilhado dyld | `swift`, `macho` · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) |
| Lua | Bytecode Lua 5.1 a 5.4, LuaJIT 2.0/2.1, Luau, Garry's Mod Lua (GLua); código-fonte e relatórios de fidelidade por entrada; recuperação de VM e strings suportada | `lua` · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) |
| PHP | Descasque de cadeia de código-fonte/eval, loops de decodificação de chave literal e camadas AES, extração de Phar, recuperação de `op_array` serializado; envelopes de codificadores comerciais permanecem limitados por chave | `php` · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) |
| Ruby | Binários InstructionSequence MRI/YARV 2.6 a 3.4 e bytecode mruby RITE para Ruby; classificação de freezer e AOT | `ruby` · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) |
| Erlang / Elixir | Módulos BEAM e arquivos EZ; código abstrato sobrevivente ou `Dbgi` para código-fonte, fallback para Core Erlang, listagem de instruções | `beam` · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) |
| ActionScript 3 | Blocos `DoABC` de SWF FWS/CWS/ZWS e bytecode ABC bruto para desmontagem e pseudocódigo AS3 | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| Runtimes móveis | Análise de cabeçalho Hermes v60 a v96, lift de pseudo-JavaScript v62/v71/v74/v76/v83/v84/v89/v96; corpos de código-fonte do kernel Dart do Flutter; declarações, strings e desmontagem de AOT ARM64 | `hermes`, `flutter`, `mobile` · [Móvel](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md) |
| Shell / documentos | PowerShell, Bash, Batch, VBScript, WSH; p-code e stomping de VBA3/5/6/7; código-fonte de macros do Office, fórmulas XLM BIFF8/BIFF12, scripts/ações incorporados em PDF | `shell` · [Shell e documentos](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| Outros artefatos de linguagem | Op-trees/bytecode de Perl, metadados RDS e Rcpp de R, starkits de Tcl, saídas JS/SWF/HashLink/Neko de Haxe; impressões digitais, símbolos e estrutura parcial de Nim, Zig, Crystal e D | `auto`, APIs de biblioteca · [Linguagens de script](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md), [nativo](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) |
| Python pickle | Desmontagem de protocolo, rastreamento simbólico, reconstrução e classificação sem chamar redutores de pickle | `pickle` · [Pickle](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/pickle.md) |
| Arquivos / firmware / frontends | A lista completa de contêineres abaixo; Electron ASAR, mapas incorporados Tauri v1/v2, árvores `embed.FS` do Wails v2 | `extract`, `webview`, `auto` · [Contêineres](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: todos os freezers, protetores e ofuscadores de código-fonte nomeados</strong></summary>
| Família ou formato | Suporte e pré-requisito |
|---|---|
| PyInstaller 2.x a 6.20+ | Recupera arquivos incorporados e bytecode, incluindo camadas AES-CTR/CFB suportadas |
| Nuitka onefile, standalone, module, wheel | Extrai payloads onefile; recupera símbolos e estrutura visível ao Python a partir de formas compiladas |
| cx_Freeze, py2exe, shiv, pex, Briefcase | Extração de empacotadores via `pyfreeze`; o comando permanece experimental |
| PyOxidizer | Extração experimental, não validada |
| SourceDefender `.pye` | Descriptografia estática via `py sourcedefender` e `sourcedefender.decrypt` |
| PyArmor v3 (DES legado), PyArmor v4 (misto legado), PyArmor v5 (AES legado) | Somente detecção: limite de chave encapsulada em RSA |
| PyArmor v6, PyArmor v7 | Recuperação estática parcial; modo super e chaves indisponíveis restringem a saída |
| PyArmor v8, PyArmor v9 / 9-Pro | Recuperação estática de wrapper onde o material de chave está disponível. O resultado publicado <!-- m:pyarmor_frac -->72 / 72<!-- /m --> conta apenas a decodificação completa do `CodeObject` raiz para wrappers nomeados v8/v9 de teste padrão; não estabelece equivalência de código-fonte nem cobre licença registrada/pro, BCC ou modo super |
| Kramer / Specter, Berserker, BlankOBF, PlusOBF, Wodx, pyobfuscate.com, pyobfuscate.com (2026 XOR/lambda), PyObfuscator (mauricelambert), Manglify, Oxyry, pyminifier, família de ofuscadores online, Xindex, Patchwork, pyc-zipper | Recuperação estática de código-fonte/loader via avaliador AST; camadas individuais e resíduos são reportados |
| Jawbreaker, ObfuXtreme | Recupera o corpo presente no artefato; payloads buscados em tempo de execução permanecem ausentes |
| python-obfuscator (PyPI), pyobfus, Pypacker | Descasque parcial de wrapper e classificação |
PyArmor pode precisar do arquivo de runtime correspondente ao lado do wrapper. Seu caminho BCC dedicado requer `--allow-bcc` e emite lifts nativos estáticos mais esqueletos Python para corpos modelados; a recuperação automática ciente do caminho pode publicar os mesmos artefatos BCC. Apenas o hook dinâmico do PyArmor v6/v7 executa código de amostra, atrás de `--allow-dynamic` com um watchdog. `--allow-bcc` permite apenas análise estática in-tree e não executa a amostra nem invoca ferramentas externas. [Detalhes de versão e modo](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor).
</details>
<details>
<summary><strong>JavaScript, WebAssembly e aplicações web empacotadas</strong></summary>
| Família ou formato | Suporte e rota |
|---|---|
| obfuscator.io / javascript-obfuscator, JS-Confuser | Recupera arrays de strings suportados, transformações de dispatcher/controle de fluxo, predicados opacos e camadas de loader; comandos diretos e `js.deob` |
| Jscrambler, js-obfuscator (jsobfu) | Recuperação parcial de templates e transformações estáticas |
| JSFuck, aaencode, jjencode, JSFiretruck, Dean Edwards Packer | Decodificação estática via operações dedicadas e rotas de cadeia reconhecidas |
| JSDefender, Arxan / Digital.ai | Detecção e descasque parcial de transformações estáticas; operações de JS comercial protegido requerem a opção de autorização do comando |
| PACE | Somente detecção |
| webpack 4, webpack 5, Vite, Rollup, Rolldown, esbuild, Turbopack, Bun, Parcel, Browserify, SystemJS; módulos AMD | Desbundling/recuperação de módulos direta. A cadeia despacha webpack e Vite; marcadores de catálogo para outros bundlers não tornam essas rotas automáticas por si só |
| bytenode `.jsc`, Node SEA, nexe, nw.js | Inspeção/carving de dados V8 empacotados; Node SEA e bytenode têm ramificações de cadeia explícitas |
| Electron ASAR, Tauri v1/v2, Wails v2 | Recupera árvores de frontend incorporadas; Electron/Tauri usam `webview.carve`, Wails usa `go.classify`; `webview` direto lida com todos os três |
| Bun standalone, Deno eszip v2 a v2.3 / `deno compile` | Recupera grafos de módulos incorporados através dos respectivos leitores de contêiner; eszip também expõe um leitor Rust direto |
| Wobfuscator, Jscrambler WASM, wasm-mixer / Wasmixer | Reversão parcial de transformações suportadas via `wasm.deob`; fixtures em forma de ferramenta avaliam as transformações, sem saída comprometida dos próprios ofuscadores |
| Tigress → Emscripten, wasm-name-obfuscator | Detecta e classifica; o auxiliar Tigress está fora do caminho de execução do `wasm deob`, e nomes originais destruídos permanecem indisponíveis |
[Rotas JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) · [Limites do Wasm](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) · [Layouts de frontend incorporado](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md).
</details>
<details>
<summary><strong>Packers, protetores e famílias de ofuscação nativos</strong></summary>
| Família | Suporte e rota |
|---|---|
| Donut, sRDI | Recupera o módulo incorporado a partir de layouts de shellcode-loader suportados |
| UPX, ASPack, Petite, MPRESS, FSG, PECompact, Yoda's Crypter, NSPack, MEW, kkrunchy | Rotinas de desempacotamento implementadas, acessíveis via `native unpack` e a cadeia de packers; a fidelidade varia por família e espécime |
| ASProtect, Morphine, nPack, NeoLite, PolyCryptor, Warzone Crypter | `StubEvalPending`: o comportamento do emulador tem evidência de stub construída por especificação; a recuperação real de packers de fornecedores não é validada e nenhum despacho de desempacotamento é anunciado |
| Yoda's Protector, VMProtect, Themida / WinLicense | CLI e auto somente detecção. Auxiliares Rust separados expõem carving assistido por original ou recuperação de seção protegida; eles não estabelecem devirtualização de programa inteiro |
| PE-Protector, PELock, Enigma Protector, Armadillo, Obsidium, WinLicense | Somente detecção |
| DotNetPatcher, NetCryptor | Delegam a camada gerenciada para a passagem .NET |
| OLLVM flattening, fluxo de controle falso, substituição de instruções; Tigress CFF | Transformações de desofuscação estática suportadas e relatórios via APIs Rust nativas; a análise aplicável aparece em relatórios de recuperação nativa |
| Alcatraz, Emotet CFF, Mirai, Dridex, Trickbot, obfus.h, Cryptify (rust-obfuscator), guardian-rs, obfusheader.h, obfuscxx, Amice | Assinaturas de ofuscação nativa nomeadas; auxiliares individuais de string/controle de fluxo têm recuperação mais restrita que a família detectada completa |
A análise nativa também recupera símbolos Rust/C++, RTTI e vtables de C++, modelos de objetos Delphi/C++Builder e recursos DFM, informações DWARF/PDB/STABS, imports, grafos de chamadas, assinaturas de criptografia e correspondências FLIRT. A análise de instruções abrange x86, ARM, RISC-V, MIPS, PowerPC, SPARC, eBPF e AVR; a emissão de código-fonte é o conjunto menor de arquiteturas listado acima. [Análise nativa](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) · [Evidências de desempacotamento e recuperação de bytes](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-unpack.md) · [Desofuscação](https://github.com/1-3-7/disrobe/blob/main/docs/src/anti-analysis.md).
</details>
<details>
<summary><strong>Famílias de pacotes JVM, Android, .NET e móveis</strong></summary>
| Família | Suporte e pré-requisito |
|---|---|
| Zelix KlassMaster, Allatori, Stringer, DashO | Recuperação de strings para padrões suportados, seguida de descompilação de classfile |
| DexGuard | Detecção, descasque estrutural e emulação de descriptografia de strings em classe para constantes com chave suportadas |
| BlackObfuscator | Reconhecimento de dispatcher DEX e anotação de ordem de blocos |
| ProGuard / R8 | Reprodução de mapeamento para um sidecar de restauração de nomes; nomes originais requerem `mapping.txt` |
| yGuard, SkidSuite2, JBCO | Somente detecção |
| Promon SHIELD, Guardsquare DexGuard RASP, Guardsquare ThreatCast, Appdome, OneSpan, Arxan / Digital.ai, Zimperium zShield, Licel DexProtector | Identificação de RASP Android e relatórios estruturais |
| ConfuserEx2 | Recuperação de constantes em amostras reais e desflattening de controle de fluxo; recursos criptografados podem reter um limite de chave em tempo de execução |
| Eazfuscator.NET | Descriptografia de strings e lifting de VM avaliados por modelo; a fixture de VM vem de um virtualizador no repositório, não do produto comercial |
| KoiVM (ConfuserEx VM) | Corpos virtualizados elevados a CIL em saída comprometida de ferramenta real |
| ConfuserEx, Dotfuscator, Dotfuscator CE, SmartAssembly, Babel, DeepSea, Spices.Net, Goliath, Skater, .NET Reactor, CryptoObfuscator, ArmDot, Agile.NET, Obfuscar, DotNetPatcher, NetCryptor, BitMono | Detecção e recuperação parcial específica da família: nomes, strings, recursos ou estruturas de métodos. BitMono está no detector de protetores além do catálogo de cadeia .NET de 22 entradas |
| Themida (wrapper .NET), ILProtector, MaxToCode | Somente detecção para corpos com chave de loader nativo |
| React Native APK, React Native IPA; bytecode React Native Hermes | Extrai payloads JS/Hermes e encaminha bytecode suportado para o lift Hermes |
| Kernel Dart do Flutter; snapshot AOT do Flutter (`libapp.so`) | Recuperação de tabela de código-fonte do kernel; declarações AOT, metadados e desmontagem ARM64. A versão do snapshot e os nomes disponíveis restringem a recuperação |
| Xamarin / .NET MAUI APK, Apache Cordova APK, Capacitor APK, NativeScript APK | Identificação de runtime e extração de pacote/membro suportada |
| Android APK (`classes.dex`), Android app bundle (AAB / APKM / XAPK), IPA | Inspeção de pacote e extração de filhos; a recuperação downstream depende do runtime incorporado |
Os decodificadores de strings .NET para SmartAssembly, Spices.Net, Skater, .NET Reactor, Eazfuscator.NET e CryptoObfuscator são avaliados em algoritmos modelados, não em assemblies produzidos por fornecedores comprometidos. ConfuserEx2, Obfuscar e BitMono têm evidência real de assembly protegido. [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) · [Móvel](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md).
</details>
<details>
<summary><strong>Famílias Lua, PHP, shell, Ruby, BEAM, Swift, Go e ActionScript</strong></summary>
| Família | Suporte e pré-requisito |
|---|---|
| IronBrew2 | Recuperação de VM, verificada diferencialmente por execução em saída real 2.7.0 standard e MAX |
| Prometheus | Recuperação parcial, incluindo árvores de despacho `Vmify` empilhadas suportadas |
| MoonSec V1, MoonSec V2, MoonSec V3, AztupBrew, DarkSec, Boronide, PSU, WeAreDevs LuaU, luaobfuscator.com, SLua (Unity Lua 5.3), Hercules | Recuperação parcial de Lua; evidência de VM em forma MoonSec usa um bootstrap sintético |
| Luraph | Somente detecção |
| Bytecode Luau, Garry's Mod Lua (GLua) | Reconhecimento de dialeto; lifting de Luau e recuperação parcial de GLua |
| ionCube, SourceGuardian, Zend Guard | Detecção de envelope PHP comercial; chaves residentes no loader permanecem um limite. Casos legados de chave estática podem produzir estrutura parcial de `op_array` |
| FOPO, Better PHP Obfuscator | Descasque estático de cadeia eval PHP, com requisitos de chave literal para camadas criptografadas |
| Invoke-Obfuscation (token), Invoke-Obfuscation (AST), Invoke-Obfuscation (string), Invoke-Obfuscation (encoding), Invoke-Obfuscation (compress); Invoke-Stealth, PowerHell, Chameleon, psobf | Recuperação estática de PowerShell |
| Invoke-Obfuscation (launcher), ISESteroids | Recuperação parcial de PowerShell |
| Bashfuscator (token), Bashfuscator (string), Bashfuscator (obfuscate), Bashfuscator (compress); indireção Bash (IFS/eval); node-bash-obfuscate (eval de tabela de chunks) | Recuperação estática de Bash |
| Ofuscação Batch (`%random%`), ofuscação Batch (indireção set); macro VBA (descompilação de p-code + stomping) | Descasque de Batch e recuperação de código-fonte/p-code de VBA |
| YARV InstructionSequence (`.rb` compilado), bytecode mruby RITE | Recuperação de código-fonte Ruby |
| Executável autoextraível OCRA, pacote RubyScript2Exe | Classificação/recuperação parcial de freezer |
| Classe compilada JRuby, imagem nativa TruffleRuby | Somente detecção através do catálogo Ruby |
| Arquivo BEAM (módulo compilado Erlang / Elixir), arquivo EZ (módulos `.beam` encapsulados em ZIP) | Extração de módulos, recuperação de código-fonte/chunk de depuração ou fallback para Core Erlang |
| garble | Metadados Go e literais suportados; o hash de nomes originais não pode ser revertido sem a seed ausente |
| Metadados Swift / Objective-C de Mach-O, binário Mach-O fat (universal), cache compartilhado dyld | Metadados de runtime, recuperação de slice e dylib |
| SwiftShield | Analisador de mapeamento; o mapeamento deve ser fornecido para recuperar nomes originais |
| SWF (Flash, FWS/CWS/ZWS) DoABC, bytecode ABC bruto | Desmontagem e pseudocódigo de corpo de método |
| secureSWF, DoSWF, Kindi, Irrfuscator, swfLock | Somente detecção |
[Catálogo de famílias](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>Todos os 103 formatos de contêiner registrados</strong></summary>
| Categoria | Formatos |
|---|---|
| Arquivos gerais | 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 |
| Arquivos de aplicação e linguagem | JAR, WAR, APK, XPI, WHL, EGG, CRX, NUPKG, VSIX, PYZ, Electron ASAR |
| Instaladores e imagens de aplicação | PKG, DMG, DEB, RPM, AppImage, Snap, Flatpak, MSIX/APPX, MSI, NSIS, Squirrel, Inno Setup, InstallShield, Enigma Virtual Box |
| Sistemas de arquivos e streams de sistemas de arquivos | SquashFS, cramfs, ext4, romfs, MinixFS, Android sparse, btrfs-send, EROFS, JFFS2, NTFS, UBI/UBIFS, YAFFS2, QNX, partclone |
| Imagens de disco e implantação | ISO, OCI, imagem Docker, VHD, VHDX, WIM, GPT, MBR, FAT12/16/32 |
| Streams de compressão | XZ, gzip, bzip2, zstd, LZMA, lzip, LZ4, zlib, Unix compress (`.Z`) |
| Dados de aplicação incorporados | Bun standalone, UnityFS, bundle de arquivo único .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 |
| Memória e volumes criptografados | Windows minidump, LUKS1 |
O registro declara detecção para todas as entradas. Dessas rotas, 102 usam o extrator genérico; <!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth --> têm entradas comprometidas que alcançam bytes de membros, DMG tem evidência comprometida apenas de detecção, e 59 não têm entrada comprometida. LUKS1 é avaliado separadamente contra texto simples e requer uma chave de volume bruta `aes-cbc-plain` para descriptografia; sem uma, ele reporta o limite de chave. Métodos de compressão individuais, membros criptografados, volumes divididos e recursos de sistemas de arquivos têm limites mais restritos. StuffIt 5 atualmente retorna o blob do arquivo através da extração, embora seus decodificadores de fork existam. Conteúdo Airoha OTP-AES é extraído verbatim.
Leitores Rust adicionais expõem estruturas Deno eszip, Apple APFS/HFS+, overlays anexados a ELF e Blazor WebCIL; eles não são entradas extras na contagem de 103 formatos. [Rotas de extração, versões de métodos e limites](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md) · [Registro de contêineres](https://github.com/1-3-7/disrobe/blob/main/crates/disrobe-binfmt/src/container.rs).
</details>
## Recuperação automática`auto` escolhe um passe do registro compilado, executa-o e, em seguida, reidentifica sua saída e os filhos extraídos. Ele para no limite de confiança, em um hash de conteúdo repetido ou no limite de profundidade (oito por padrão). Relatórios e arquivos-fonte marcados como terminais permanecem como saídas em vez de serem realimentados na detecção. A tabela a seguir contabiliza todos os passes registrados por uma compilação completa; uma compilação enxuta pode omitir linhas controladas por recursos.
| Camada de entrada | IDs de passe registrados | Saída automática | Controles dedicados ou pré-requisito |
|---|---|---|---|
| Arquivos, instaladores, firmware, volumes | `binfmt.container` | Filhos extraídos, seguidos recursivamente em passes de linguagem/nativos | `extract` para relatórios de membros e a opção explícita de chave bruta LUKS1 |
| PyInstaller | `pyinstaller.extract` | Membros incorporados e filhos `.pyc` | `pyinstaller extract` para opções específicas de arquivo |
| Congeladores Python | `pyfreeze.extract`, `nuitka.extract` | Payloads extraídos ou estrutura de pacote compilado suportada | `pyfreeze` experimental; o sabor do Nuitka determina o que sobrevive |
| Python protegido | `pyarmor.unpack`, `sourcedefender.decrypt` | Texto simples/bytecode disponível, metadados ou relatórios de limite de chave | Material de runtime/chave correspondente; modo PyArmor dedicado e opções de rigor |
| Código-fonte e bytecode Python | `py.deob`, `py.decompile`, `py.disasm` | Código-fonte descascado, código-fonte descompilado ou rastreamento de instruções | `py decompile --emit source,disasm,ast`; um interpretador correspondente é necessário para verificações de recompilação |
| Pickle | `pickle.classify` | Análise simbólica e classificação | `pickle` para as operações individuais de inspeção/reconstrução |
| JavaScript | `js.deob` | Desofuscação suportada, recuperação de módulos webpack/Vite, tratamento de Node SEA/bytenode | `js unbundle` expõe o conjunto mais amplo de bundlers; source maps e opções de renomeação são controles diretos |
| WebAssembly | `wasm.deob` | WAT recuperado ou elevado, além de sidecars de detecção, resumo e recuperação | `wasm decompile --target` escolhe Rust, TypeScript, C, WAT ou JSON |
| Electron / Tauri | `webview.carve` | Membros de frontend incorporados | `webview` também suporta Wails; a recuperação automática de Wails usa `go.classify` |
| PHP / Phar | `php.peel` | Código-fonte descascado, saída `op_array`, filhos de arquivo, relatórios de resíduos/chaves | Chaves e IVs devem estar estaticamente disponíveis para camadas criptografadas |
| JVM / DEX | `jvm.classify` | Código-fonte Java, manifestos de protetor e recuperação, filhos de classe/arquivo | `jvm`/`apk` para mapeamento, assinaturas e backends externos opcionais |
| .NET | `dotnet.classify` | C# e análise, constantes/recursos/CIL recuperados ou metadados Native AOT | `dotnet` para outros formatos de código-fonte e backends de renderização instalados |
| Pacotes móveis / bytecode | `mobile.classify` | Extração de runtime/membros, elevação Hermes, código-fonte do kernel Dart ou relatórios AOT | `hermes`, `flutter`, `mobile` para controles específicos de formato |
| Lua | `lua.deob` | Lua recuperado e sidecars de dialeto/fidelidade | `lua` para controles explícitos de família e saída |
| Shell / Office / PDF | `shell.deob` | Scripts descascados, código-fonte/p-code de macro, relatórios XLM e de documento | `shell` para operações específicas de documento |
| Ruby | `ruby.classify` | Análise mais código-fonte YARV/mruby recuperado quando disponível | `ruby` para relatórios específicos de sabor; a classificação JRuby/TruffleRuby não é recuperação de código-fonte Ruby |
| BEAM / EZ | `beam.classify` | Erlang/Elixir/Core Erlang, desmontagem, filhos de arquivo | Chunks de depuração sobreviventes determinam a fidelidade do código-fonte |
| SWF / ABC | `as3.classify` | Estrutura ABC, listagens de instruções, pseudocódigo AS3 | Ofuscadores comerciais nomeados permanecem apenas para detecção |
| Go | `go.classify` | Símbolos, tipos, análise de garble e membros de sistema de arquivos incorporados | `go` para DWARF, BuildInfo e outros relatórios dedicados |
| Swift / Objective-C | `swift-objc.classify` | Metadados, fatias universais e dylibs de cache compartilhado | Arquivos irmãos de sub-cache/símbolos podem ser necessários; controles diretos `swift`/`macho` |
| Packers nativos | `native.packer-unpack` | Imagem desempacotada disponível ou módulo incorporado, símbolos, assinaturas, relatórios de recuperação | Apenas dispatches de packers implementados desempacotam; camadas comerciais de VM podem parar na detecção |
| Imagens nativas | `native.image-classify` | Identidade, símbolos, assinaturas, descobertas e um relatório limitado de pseudo-código x86-64/AArch64 | `native decompile` seleciona um comando completo de saída de código-fonte; caminhos de código-fonte ARM32/MIPS32 são diretos |
| Windows / OS/2 NE | `native.ne-structure` | Segmentos, entradas, importações e recursos | Recuperação estrutural em vez de descompilação de código-fonte |
| Perl / R / Tcl / Haxe / WSH | `scriptlang.classify` | Relatórios de linguagem, estruturas recuperadas e artefatos filhos suportados | APIs de biblioteca por formato expõem operações mais refinadas |
| Nim / Zig / Crystal / D | `nativelang.classify` | Impressões digitais de linguagem, símbolos e estrutura nativa parcial | A classificação requer marcadores de linguagem sobreviventes suficientes |
Por exemplo, um aplicativo PyInstaller reconhecido pode progredir por `pyinstaller.extract` → `pyarmor.unpack` → `py.decompile`; um APK por extração de membros → DEX → Java; e uma imagem nativa empacotada por desempacotamento → análise de linguagem ou imagem. Cada seta depende do que aquela camada específica realmente produz.```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, seleção explícita de origem-destino, reprodução de mapeamento e invocação opcional de backend externo permanecem operações dedicadas. Registro de passes · Seleção de cadeia e layout de saída.
O mapa de capacidades cobre grupos de comandos e integrações. Seu
inventário legível por máquina vincula código-fonte, testes, documentação, status
de suporte e demos. A referência da CLI cobre comandos aninhados;
flags globais cobrem opções compartilhadas. Use disrobe <command> --help
para a interface da sua build instalada.
Comandos de projeto e serviço também estão indexados ali: serve, plugin, init, config, catalog, passes, doctor, install, install-deps, self-update, completions, man, explain e bug-report. Use doctor para sondar de 46 a 51 ferramentas externas dependendo da plataforma e identificar backends opcionais ausentes.
A tabela mapeia cada tarefa de recuperação para os comandos do Disrobe e ferramentas relacionadas. Descompiladores instalados e artefatos exportados fornecem os pontos de integração mostrados abaixo.
O inventário de comparação nomeia as comparações pendentes de entrada compartilhada. As opções de backend estão documentadas em instalação e nos guias de linguagem vinculados acima.
As medições usam as entradas fixadas, versões de ferramentas e regras de pontuação vinculadas abaixo. As contagens de DEX e JAR medem a compilação das regiões emitidas por cada ferramenta. Essas populações diferem, então suas contagens não classificam a qualidade da recuperação. A recordação de segredos em APK usa a mesma verdade fundamental de oito tokens.
Entradas, resultados brutos das ferramentas e comandos de reprodução.
A mesma análise do Ghidra 12.1.2 vê código diferente depois que o Disrobe exporta um executável empacotado como PE reconstruído. Esses snapshots locais usam fixtures empacotados benignos reais e registram tanto aumentos quanto diminuições. As colunas de função/instrução/string vêm do snapshot de análise de nove entradas; renderizações C concluídas vêm do snapshot separado de descompilador de seis entradas. Uma renderização concluída é saída não vazia, não uma nota de correção de código-fonte.
As contagens do kkrunchy diminuem. Mais funções descobertas não são necessariamente mais funções corretas, e essas contagens de análise não substituem uma comparação de bytes. Leia o snapshot de análise, o snapshot do descompilador e as medições separadas de recuperação de bytes nativos.
O índice de evidências vincula medições de recuperação aos seus fixtures, métodos de comparação, comandos e resultados.
Os resultados distinguem recuperação de bytes, aceitação do compilador e verificações comportamentais. Aceitação do compilador e contagens de cobertura não são pontuações de equivalência.
Essas verificações medem o Disrobe contra um artefato original, compilador, interpretador ou corpus rotulado. Elas são distintas de comparar dois descompiladores. Cada resultado vinculado registra a população de entrada, pré-requisitos e comando de reprodução.
Registos de evidência completos descrevem cada população e regra de classificação.
Os rótulos dos gráficos usam strong para uma referência de correção independente, recompile-only para aceitação do compilador, e coverage-self-reported para os próprios contadores de cobertura do Disrobe. O método de comparação e a população definem o âmbito de cada resultado.
Consulte os resultados, comparações de ferramentas, e pré-requisitos de reprodução para medições individuais.
--backend auto. Consulte a ajuda do comando e o guia de instalação antes de escolher um backend.
O chain runner liga passes de propósito único através de artefactos partilhados e representações intermédias. Um pass contribui com o output que consegue justificar; os consumidores a jusante retêm a proveniência e reportam fronteiras não suportadas. Explore a arquitetura, o modelo de passes, a escada de IR, e o chain runner.
Comece pela documentação, quickstart, e guia de resultados. Use disrobe explain <code> para consultar um diagnóstico. Para alterações ao projeto, leia o guia de contribuição e os testes e evidências da funcionalidade relevante.
O modelo de ameaças descreve fronteiras de confiança e tratamento de input. Reporte preocupações de segurança através de SECURITY.md. LEGAL.md descreve as considerações legais do projeto; a permissão para analisar um artefacto depende das suas circunstâncias.
Todas as versões do Disrobe são proprietárias e source-available sob a Disrobe Source-Available License, Version 1.1, que substitui a Elastic License 2.0 e a Version 1.0 para todas as versões e revoga todas as concessões anteriores conforme declarado no aviso de relicenciamento.
Projetos pessoais de hobby, aprendizagem pessoal, e investigação de segurança independente não remunerada por indivíduos, educação e investigação sem fins lucrativos, e jornalismo de boa-fé são gratuitos, conforme definido na licença.
Qualquer utilização por ou para uma empresa requer uma licença paga. Ver licenciamento comercial.
Crédito obrigatório: Este trabalho utilizou o Disrobe, criado por 1-3-7: https://github.com/1-3-7/disrobe
Forks que não sejam forks de contribuição, republicação, rebranding, revenda, alojamento, e desenvolvimento concorrente são proibidos. O software é fornecido tal como está, por conta e risco do utilizador.
Ver atribuição, termos para contribuidores, resumo, e avisos de terceiros.
Copyright (c) 2025-2026 1-3-7. Todos os direitos reservados.
Commits de desenvolvimento anteriores foram consolidados numa única baseline como parte da atualização de documentação e visual.
| Tarefa | Comandos | Saída ou próximo passo |
|---|
| Encontrar indicadores, segredos e achados estáticos | scan, frisk, strings, ioc, indicators, behavior | Achados e deslocamentos |
| Inspecionar funções, fluxos e comportamento | query, capabilities, taint, vulnmatch | IR consultável, mapeamentos ATT&CK/MBC e relatórios de origem a destino |
| Manter anotações e artefatos estruturados | annot, rename, envelope, verify, yara | Envelopes de artefatos e estado do analista |
| Seguir proveniência e comparar execuções | chain, context, status, report, diff, guard, semdiff | Relatórios, hashes e diferenças de recuperação |
| Coletar dados de rede públicos | prowl | Coleta de rede explícita, separada da recuperação offline |
| Superfície | Ponto de entrada | Guia |
|---|
| Rust | Tipos centrais compartilhados e crates de passes individuais | APIs de biblioteca |
| Python | Bindings tipados via import disrobe | Bindings Python |
| HTTP, gRPC e LSP | disrobe serve | Serviço |
| Model Context Protocol | disrobe-mcp ou disrobe serve --mcp | Integração MCP |
| Editores e ferramentas de análise | VS Code, IDA Pro, Ghidra, Binary Ninja | Integrações de editor |
| GitHub Actions | Action do repositório e saída SARIF | GitHub Action |
| Verificações de commit locais | ID do hook disrobe | pre-commit |
| Navegador | Worker Wasm do lado do cliente | Playground |
| Contexto de projeto para ferramentas de codificação | disrobe init --ide | Sidecar de metadados |
| Tarefa de recuperação | Ferramentas nomeadas | Caminho do Disrobe | Como escolher ou combiná-las |
|---|
| Bytecode Python para código-fonte | pycdc, PyLingual, uncompyle6, decompyle3 | Descompilador CPython 1.0 a 3.15 em processo, recuperação de code-object aninhado, saída de código-fonte/desmontagem/AST | Inspecione código-fonte recuperado, desmontagem e AST do descompilador Python integrado |
| Extração de Python congelado | pyinstxtractor-ng, pydecipher | Extração de PyInstaller, Nuitka e freezer seguida de recuperação de bytecode | auto pode continuar do membro extraído através de um protetor e entrar no descompilador Python |
| PyArmor | Pyarmor-Static-Unpack-1shot | Recuperação estática de wrapper/runtime, relatórios de modo, lifting BCC estático opcional | Forneça o runtime correspondente para recuperar dados do wrapper e inspecionar resultados específicos de modo |
| Inspeção de Pickle | fickling, pickletools do Python | Rastreamento de instruções, redutores simbólicos, classificação e reconstrução de valores | Inspecione sem executar redutores; pickletools avalia a inspeção, e o CPython verifica a reconstrução em 470 fixtures gerados |
| Desofuscação de JavaScript | webcrack, synchrony, REstringer | obfuscator.io, JS-Confuser, padrões Jscrambler suportados, decodificadores esotéricos, recuperação de constantes/fluxo de controle | Use js deob para opções explícitas ou auto quando JS está dentro de um pacote |
| Desbundling de JS e source maps | wakaru, webcrack, sourcemapper | Extração de módulos, tratamento de source-map, renomeação com reconhecimento de escopo, inspeção de V8 empacotado | js unbundle expõe mais rotas de bundler do que o despacho automático de cadeia |
| WebAssembly | WABT wasm-decompile, Binaryen | Pseudo-código WAT e C/Rust/TypeScript, resumos JSON, reversão de ofuscação suportada | Inspecione um alvo de código-fonte selecionado; a execução via wasmtime verifica o comportamento recuperado de forma independente abaixo |
| Código-fonte JVM | CFR, Vineflower, Procyon, Fernflower | Recuperação nativa de classfile mais tratamento de protetor/strings | jvm decompile grava artefatos do Disrobe junto com a saída de um backend instalado; o CFR tem um resultado medido de rendimento de compilação abaixo |
| Pacotes Android e DEX | JADX, apktool, androguard, dex2jar | Recuperação Dalvik em processo, metadados/assinaturas de APK, extração em runtime, saída Java | A descompilação de DEX/APK usa o caminho nativo por padrão; um backend Android é selecionado explicitamente. O JADX tem uma etapa medida abaixo |
| Assemblies .NET | ILSpy, dnSpy, dnSpyEx, de4dot | Recuperação CIL mais constantes específicas de protetor, recursos, corpos de VM e metadados Native AOT | dotnet decompile grava a saída CIL do Disrobe junto com um renderizador instalado; --backend auto seleciona ILSpy, dnSpyEx, dnSpy ou de4dot |
| Descompilação nativa | Ghidra, IDA, Binary Ninja | Pseudo-C x86-64 C/Rust e AArch64/ARM32/MIPS32 em processo; relatórios de símbolos/tipos recuperados | Selecione Ghidra em modo headless com --backend ghidra, ou use integrações de editor e símbolos exportados em uma sessão de análise interativa |
| Executáveis nativos empacotados | upx -d, unipacker, Detect It Easy | Desempacotadores implementados e emulação de stub limitada, imagens PE reconstruídas, módulos loader embutidos | Exporte imagens PE recuperadas para Ghidra/IDA. As medições do Ghidra abaixo comparam as entradas empacotadas e reconstruídas |
| Ofuscação nativa | Ghidra, IDA, Binary Ninja e scripts de desofuscação | Transformações OLLVM/Tigress, simplificação MBA, stack strings, metadados nativos e relatórios de recuperação | Selecione a operação/API nativa relevante; uma impressão digital de protetor de VM sozinha não implica recuperação de corpo |
| Metadados Go e garble | GoReSym, redress, gore | pclntab, metadados de módulo/tipo, arquivos embutidos e literais garble recuperáveis | go reporta nomes/tipos; native decompile trata o caminho de código-fonte de código de máquina separadamente |
| Swift / Objective-C | swift-demangle, class-dump, jtool2 | Dados de classe/protocolo/seletor em runtime, renderização de símbolos, fat slices, dylibs de cache compartilhado | Forneça mapeamentos sobreviventes e arquivos de sub-cache; nomes originais apagados por renomeação precisam de um mapa externo |
| Bytecode e VMs Lua | unluac, luadec, LuaDec51 | Código-fonte Lua/LuaJIT/Luau mais recuperação de ofuscador suportado e VM personalizada | IronBrew2 tem evidência de diferencial de execução com ferramenta real; recuperação comum de .luac e recuperação de VM são operações diferentes |
| Bytecode Ruby | Desmontagem MRI | Código-fonte YARV e mruby, listagens de opcode, classificação freezer/AOT | A recompilação MRI avalia a recordação de nomes de opcode; essa medida não estabelece equivalência de execução |
| Camadas PHP | php-malware-finder | Descascamento de cadeia eval e loop/cifra de chave literal, extração Phar, relatórios de envelope de encoder | Use camadas estáticas e material de chave disponível; payloads comerciais com chave de loader nativo permanecem selados |
| PowerShell, Bash, VBA | PowerDecode, ferramentas FLARE, olevba | Desofuscação de shell, código-fonte/p-code VBA e stomping, fórmulas XLM, ações PDF | shell coloca a recuperação de script e achados de documento ao lado do restante da análise de artefatos |
| BEAM / ActionScript | beam_disasm do Erlang, RABCDAsm | Recuperação de debug-source/Core Erlang do BEAM e pseudocódigo de corpo de método ABC | Preserve chunks de debug quando disponíveis; BEAM sem símbolos tem uma verificação separada de execução Erlang real |
| Hermes / React Native | hermes-dec, hbctool, DroidSaw | Extração em runtime, estrutura HBC, lifting pseudo-JavaScript suportado | O parsing HBC cobre v60 a v96; o lifting de código-fonte tem um limite medido mais estreito. Taint de ponte Hermes-para-DEX não está implementado |
| Flutter / Dart AOT | reFlutter, Darter, blutter | Tabelas de código-fonte Kernel, grafo de declaração AOT, corpos ARM64, strings, parsing de rename-map | Código-fonte Kernel e metadados AOT são níveis de recuperação diferentes; versões de snapshot restringem o parsing AOT |
| Contêineres e firmware | binwalk, unblob, 7-Zip | Extração de formato registrado, roteamento recursivo de filhos, decodificação/carving de firmware, relatórios de recusa por membro | Alimente membros extraídos diretamente nos passes de linguagem; compare bytes de membros em vez de tratar um magic reconhecido como extração bem-sucedida |
| Segredos e indicadores | APKLeaks, TruffleHog, Gitleaks, LinkFinder | Achados de árvore/APK recuperados, deslocamentos de token, strings estáticas, relatórios de segredos e IOC | Escaneie o APK ou a árvore recuperada; compare o APKLeaks com os mesmos segredos plantados abaixo |
| Identificação de formato, packer, compilador | Detect It Easy, TrID, PEiD, binwalk | Identificação multi-sinal, símbolos, assinaturas e dicas de roteamento | Use identify/detect para selecionar um caminho de recuperação, depois inspecione sua saída real |
| Capacidades e taint | capa, scripts Ghidra, Joern | Achados ATT&CK/MBC com deslocamentos, consultas de IR normalizada, relatórios de fluxo de origem a destino | Execute correspondência de capacidades e análise de origem a destino em artefatos recuperados; o relatório de taint inclui sua população de testes Juliet |
| Ferramenta e entrada | Resultado do Disrobe | Resultado da ferramenta nomeada | O que a medição verifica |
|---|
| JADX 1.5.5 · Android DEX | 157 / 228 regiões emitidas compilam limpas | 281 / 303 regiões emitidas compilam limpas | DEX EdgeCases commitado; javac real, compilação de código-fonte completo e então isolamento limitado de regiões que bloqueiam a atribuição; populações emitidas diferentes |
| CFR 0.152 · classfile JVM | 181 / 181 regiões emitidas compilam limpas | 152 / 166 regiões emitidas compilam limpas | JAR EdgeCases commitado; o mesmo procedimento de compilador/pontuador; populações emitidas diferentes |
| APKLeaks 2.6.3 · APK com segredos plantados | 8 / 8 segredos plantados | 5 / 8 segredos plantados | Recordação de token exato no mesmo APK; o Disrobe também encontra a chave de acesso secreta AWS plantada, credencial Basic e JWT |
| Entrada empacotada | Funções Ghidra, empacotado → reconstruído | Instruções, empacotado → reconstruído | Strings, empacotado → reconstruído | Renderizações C concluídas, empacotado → reconstruído |
|---|
| 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 | Não medido |
| MEW · AccessEnum | 4 → 152 | 125 → 9.592 | 3 → 802 | Não medido |
| MEW · Autologon | 4 → 295 | 125 → 19.595 | 3 → 406 | Não medido |
| kkrunchy classic · NASM hello | 4 → 1 | 149 → 10 | 3 → 4 | 4 → 1 |
| Entrada | Regiões emitidas pelo Disrobe | Regiões emitidas pela ferramenta nomeada | Limite da população | Reproduzir |
|---|
| Android DEX | 157 / 228 regiões emitidas compilam limpas | JADX 1.5.5: 281 / 303 regiões emitidas compilam limpas | sem classificação entre ferramentas: cada ferramenta tem sua própria população de regiões emitidas | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| classfile JVM | 181 / 181 regiões emitidas compilam limpas | CFR 0.152: 152 / 166 regiões emitidas compilam limpas | sem classificação entre ferramentas: cada ferramenta tem sua própria população de regiões emitidas | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| Recuperação | Resultado registrado | Referência e limite |
|---|
| Python 3.14.5, módulos fixados | 6077 de 6286 code objects | Recompilação CPython com comparação normalizada de estrutura de opcode; destinos de salto, a maioria dos operandos e objetos recuperados adicionais não são avaliados. Resultado |
| Python 3.14.5, população central fixa | 17396 de 18276 code objects, medição local | A mesma comparação normalizada em 574 módulos; este não é um resultado de equivalência semântica. Resultado |
| Python legado 1.0 a 3.7 | pelo menos 150 de 191 fixtures (piso de regressão) | Recompilação com interpretador da época ou tokens estruturais contra o código-fonte original. Resultado |
| Classificação de Pickle | 102 / 102 fixtures de classificação | Semântica do pickletools. Resultado |
| Reconstrução de Pickle | 470 / 470 fixtures reconstruídos passam em verificações de igualdade de reexecução | Reexecução CPython. Resultado |
| Compilação de código-fonte JVM | 131 de 131 métodos compilam | javac real. Resultado |
| Comportamento JVM | 117 / 131 métodos correspondem à execução observada | JVM real; oito métodos divergem e seis não são acionados isoladamente. Resultado |
| Android DEX | 118 / 118 classes apresentadas ao verificador | JVM -Xverify:all; 37 de 155 classes são ignoradas na ligação e não avaliadas. Resultado |
| .NET C# | 18 / 35 tipos EdgeCases completos recompilam de forma autônoma | Roslyn csc real; código-fonte legal não estabelece comportamento equivalente. Resultado |
| Corpos de VM .NET | Modelo Eazfuscator: 67 / 67 instruções; KoiVM real: 6 / 6 corpos levantados | Referências separadas de original/build limpo; EazVM usa um virtualizador no repositório, KoiVM usa saída de ferramenta real. Evidência |
| WebAssembly | 57 / 57 funções elegíveis | wasmtime compara retornos, traps e os primeiros 4.096 bytes de memória linear nas entradas de teste. Resultado |
| BEAM sem chunks de debug | 19 / 19 módulos | Recompilação Erlang/OTP 27.3.4, comparação de exportação e saída/status de saída de test/0. Resultado |
| Lua IronBrew2 | Saída real 2.7.0 standard e MAX recupera para execução correspondente | Interpretador Lua real contra programas originais; uma família de VM. Resultado |
| Ruby YARV | Greeter 100%; megafile 98,67% de recordação de nomes de opcode | Recompilação MRI; recordação de multiconjunto ignora ordem, operandos, destinos de salto e instruções extras. Resultado |
| Nomes de tipo Go sem símbolos | 838 de 838 nomes | Metadados reais do go1.26.3 da build de comparação. Resultado |
| Hermes HBC v96 | 8 de 8 funções, zero operações de fallback | Amostra real de hermesc com código-fonte original e nomes de função. Resultado |
| Bytes nativos empacotados | UPX, FSG, NSPack, Petite, MPRESS .text byte a byte idêntico em pares commitados nomeados; recursos do Yoda's Crypter byte a byte idênticos | Bytes originais alinhados por RVA; resíduos de imagem completa e de recursos permanecem reportados separadamente. Tabela por entrada |
| Indicadores plantados | 6 / 6 categorias de IOC representadas | Endpoints commitados, achados de manifesto, URLs, IPv4, email e verdade fundamental .onion. Resultado |
| Grafo de chamadas MCP | 5 / 5 arestas diretas, todas corretamente identificadas | ELF sem símbolos comparado com seu gêmeo distinto de toolchain com símbolos. Precisão, recordação |
| Taint nativo | 93 / 190 fluxos rotulados recordados; zero falsos positivos, medição local | Fatia NIST Juliet CWE-78 char/system, gcc 16.2.0 -O2; sete categorias de fluxo declaradas não têm casos nesta fatia. Resultado |