
Rust CLI-набор, который статически декомпилирует, деобфусцирует и распаковывает нативный код, байт-код, скрипты, прошивки и пакеты приложений в более чем 15 экосистемах через единый автоматический конвейер.
Начало работы · Поддерживаемые входные данные · Автоматическое восстановление · Сравнение инструментов · Доказательства · Документация
Disrobe — это набор консольных утилит на Rust для декомпиляции, деобфускации и распаковки программного обеспечения. Используйте его для быстрой оценки неизвестного файла, восстановления кода для обратной разработки, извлечения индикаторов для расследования или подготовки артефактов для дизассемблера.
Восстанавливайте Python из байт-кода и замороженных приложений, Java из class-файлов и DEX, C# из CIL, JavaScript из бандлов, Lua из пользовательских виртуальных машин, а также C или Rust из нативного кода. Извлекайте файлы из установщиков, прошивок, мобильных пакетов и приложений Electron, Tauri или Wails. Сохраняйте восстановленный исходный код, символы, строки, типы и сведения о происхождении вместе для дальнейшего анализа.
Полная сборка каталогизирует 170 семейств в 15 экосистемах и обнаруживает 103 формата контейнеров. disrobe auto определяет каждый слой, запускает соответствующий проход и следует за восстановленными дочерними элементами по их собственным путям восстановления. Специализированные команды предоставляют более тонкий контроль, отчёты об анализе и опциональные бэкенды. Восстановление по умолчанию выполняется статически; исходный код, структура, частичный вывод и границы отсутствующих ключей остаются различимыми в результате.
Если Disrobe вам полезен, рассмотрите возможность поставить звезду репозиторию.
Смотреть полное видео · Читать расшифровку
Двадцать команд CLI за 2 минуты 12 секунд: распаковка нативного исполняемого файла, восстановление Python и Lua, разделение модулей JavaScript, восстановление source map, анализ WebAssembly и ресурсов Android, извлечение индикаторов и сохранение отчётов и хешей артефактов. Финальная глава показывает конфигурацию проекта, настройку IDE, аннотации аналитика и автодополнение для оболочки. Расшифровка включает полный перечень команд записанной сборки; карта возможностей объясняет её пределы поддержки.
Скачайте архив для вашей платформы со страницы GitHub Releases, сверьте его с SHA256SUMS из релиза и поместите disrobe в ваш PATH. Архивы релизов включают наборы подписей; руководство по проверке объясняет, как их проверить.
| Платформа | Цели релиза |
|---|---|
| Windows | x86-64, ARM64 |
| macOS | x86-64, ARM64 |
| Linux | x86-64 и ARM64 с glibc; x86-64 с musl |
Проверьте установленный бинарный файл:```sh disrobe --version disrobe --help
Чтобы собрать CLI из клона, установите Rust-инструментарий репозитория и [нативные предварительные требования для сборки](https://github.com/1-3-7/disrobe/blob/main/docs/src/installation.md), затем выполните:```sh
cargo build --locked --release -p disrobe-cli --bin disrobe
Исполняемый файл — target/release/disrobe или target/release/disrobe.exe в Windows. См. руководство по установке для флагов функций и slim-сборок.
Начните с приложения, библиотеки или пакета. Идентифицируйте его, восстановите его распознанные слои, затем просмотрите сводку восстановления:```sh disrobe identify path/to/application disrobe auto path/to/application --out recovered/ --capture-stages disrobe context --out recovered/
`identify` сообщает формат и доступные сигналы. `auto` извлекает и восстанавливает распознанные слои. `context` суммирует полученные проходы, уверенность и происхождение. С `--capture-stages` проверяйте каждый этап в `recovered/01-*/`, `recovered/02-*/` и `recovered/final/`; `chain.json` записывает топологию и хеши, а `recovery.json` записывает результаты и тайминги.
Используйте специальную команду, когда вы знаете нужный вам вывод:```sh
disrobe py decompile module.pyc --out python-source/
disrobe js deob bundle.js --full --out readable.js
disrobe native decompile application.exe --out native-source/
disrobe native export packed.exe --format ghidra --out ghidra-input/
disrobe webview desktop.exe --out frontend/
Нативный декомпилятор по умолчанию генерирует C для x86-64; --format rust выбирает Rust. AArch64, ARM32 и MIPS32 генерируют псевдо-C. native export пересобирает поддерживаемые упакованные PE-образы для внешнего инструмента анализа; webview записывает восстановленное дерево ресурсов фронтенда без запуска приложения.
Репозиторий включает крошечный модуль WebAssembly для браузерной площадки. Из клона, с полным CLI в вашем 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
Первая команда записывает `add.summary.json`; вторая записывает текст WebAssembly в `add.lifted.wat`. Автоматическое восстановление
выбирает доступную цепочку и записывает её артефакты в `recovered/`; `--capture-stages` сохраняет
промежуточные результаты. Эти операции исследуют модуль, не запуская его экспортируемую функцию.
Изучайте восстановленные файлы вместе с отчётом: одна лишь идентификация не устанавливает факт восстановления. Неподдерживаемые конструкции, отсутствующий ключевой материал и недоступные цепочки отражаются в результате. [Руководство по результатам](https://github.com/1-3-7/disrobe/blob/main/docs/src/reading-a-result.md) объясняет артефакты, диагностику, частичные исходы и происхождение.
[Открыть браузерную площадку](https://1-3-7.github.io/disrobe/playground/) · [Следовать быстрому старту](https://github.com/1-3-7/disrobe/blob/main/docs/src/quickstart.md)
## Найдите свой вход
**Recover** означает, что достижимый путь выдаёт исходный код, байты или структуру. **Partial** означает, что восстанавливается лишь часть этой информации. **Detect-only** означает, что семейство идентифицируется без восстановления его защищённого тела. Эти уровни описывают операции над поддерживаемыми входами; одно лишь имя семейства не гарантирует, что каждая версия или конфигурация восстанавливается. Приведённые ниже списки включают полный каталог семейств и дополнительные форматы, доступные через специализированные команды и экстракторы.
| Вход | Восстановление и вывод | Команды и руководство |
|---|---|---|
| Python | Байткод CPython 1.0–3.15 и marshal в исходный код; дизассемблирование PyPy, MicroPython `.mpy` v0–v6, Jython, IronPython и Brython; извлечение замороженных полезных нагрузок; имена, сигнатуры и структурный фолбэк Cython `.pyd`/`.so` | `py`, `pyinstaller`, `pyarmor`, `pyfreeze`, `nuitka` · [Python](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md) |
| JavaScript / TypeScript | Деобфускация исходного кода, обращение минификации, разделение модулей, source maps, инспекция кэшированных данных V8 и упакованных сред выполнения | `js` · [JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) |
| WebAssembly | `.wasm` в WAT, Rust, TypeScript, псевдоисходный код C или JSON; инспекция Component Model и графа типов GC; обращение поддерживаемой обфускации | `wasm` · [WebAssembly](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) |
| JVM / Android | `.class`, JAR, DEX, APK, AAB; исходный код Java, идиомы Kotlin/Scala, информация о манифесте и подписях, отчёты протекторов и sidecar-файлы маппинга | `jvm`, `apk` · [JVM и Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) |
| .NET | Метаданные PE/CLR и CIL в псевдоисходный код C#, F# или VB; инспекция ReadyToRun и Native AOT; извлечение single-file bundle | `dotnet` · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) |
| Native | Идентификация или анализ PE32/PE64, EFI PE, ELF32/ELF64, модулей ядра, thin/fat Mach-O, COFF, MZ, NE, LE, LX и raw-кода; генерация исходного кода на архитектурно-специфичных путях выше | `native`, `macho`, `semdiff` · [Native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md), [декомпиляция](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-decompile.md) |
| Go | Метаданные среды выполнения PE/ELF/Mach-O, имена stripped-функций и типов, файлы `embed.FS`, отчёты garble и восстановимые литералы | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Классы, протоколы, поля, селекторы, демутированные символы Mach-O; универсальные срезы; dylib из dyld shared cache | `swift`, `macho` · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) |
| Lua | Байткод Lua 5.1–5.4, LuaJIT 2.0/2.1, Luau, Garry's Mod Lua (GLua); исходный код и отчёты о точности по каждому входу; поддерживаемое восстановление VM и строк | `lua` · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) |
| PHP | Снятие слоёв source/eval-цепочек, циклы декодирования с литеральными ключами и слои AES, извлечение Phar, восстановление сериализованного `op_array`; коммерческие обёртки энкодеров остаются ограниченными ключом | `php` · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) |
| Ruby | Бинарники MRI/YARV 2.6–3.4 InstructionSequence и байткод mruby RITE в Ruby; классификация freezer и AOT | `ruby` · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) |
| Erlang / Elixir | Модули BEAM и архивы EZ; сохранившийся абстрактный код или `Dbgi` в исходный код, фолбэк на Core Erlang, листинг инструкций | `beam` · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) |
| ActionScript 3 | Блоки SWF FWS/CWS/ZWS `DoABC` и сырой байткод ABC в дизассемблирование и псевдокод AS3 | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| Мобильные среды выполнения | Разбор заголовков Hermes v60–v96, псевдо-JavaScript-лифтинг v62/v71/v74/v76/v83/v84/v89/v96; тела исходного кода Flutter Dart kernel; объявления, строки и дизассемблирование ARM64 AOT | `hermes`, `flutter`, `mobile` · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md) |
| Shell / документы | PowerShell, Bash, Batch, VBScript, WSH; p-код и stomping VBA3/5/6/7; исходный код макросов Office, формулы XLM BIFF8/BIFF12, встроенные скрипты/действия PDF | `shell` · [Shell и документы](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| Прочие языковые артефакты | Op-деревья/байткод Perl, метаданные R RDS и Rcpp, Tcl starkits, выходные данные Haxe JS/SWF/HashLink/Neko; отпечатки, символы и частичная структура Nim, Zig, Crystal и D | `auto`, библиотечные API · [Скриптовые языки](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md), [native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) |
| Python pickle | Дизассемблирование протокола, символьная трассировка, реконструкция и классификация без вызова pickle-редьюсеров | `pickle` · [Pickle](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/pickle.md) |
| Архивы / прошивки / фронтенды | Полный список контейнеров ниже; Electron ASAR, встроенные карты Tauri v1/v2, деревья `embed.FS` Wails v2 | `extract`, `webview`, `auto` · [Контейнеры](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md), [webview](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md) |
<details>
<summary><strong>Python: каждый именованный freezer, протектор и обфускатор исходного кода</strong></summary>
| Семейство или формат | Поддержка и предварительное условие |
|---|---|
| PyInstaller 2.x–6.20+ | Восстановление встроенных архивов и байткода, включая поддерживаемые слои AES-CTR/CFB |
| Nuitka onefile, standalone, module, wheel | Извлечение полезных нагрузок onefile; восстановление символов и видимой для Python структуры из скомпилированных форм |
| cx_Freeze, py2exe, shiv, pex, Briefcase | Извлечение упаковщика через `pyfreeze`; команда остаётся экспериментальной |
| PyOxidizer | Экспериментальное, непроверенное извлечение |
| SourceDefender `.pye` | Статическая расшифровка через `py sourcedefender` и `sourcedefender.decrypt` |
| PyArmor v3 (legacy DES), PyArmor v4 (legacy mixed), PyArmor v5 (legacy AES) | Detect-only: граница ключа, обёрнутого в RSA |
| PyArmor v6, PyArmor v7 | Частичное статическое восстановление; super mode и недоступные ключи ограничивают вывод |
| PyArmor v8, PyArmor v9 / 9-Pro | Статическое восстановление обёртки там, где доступен ключевой материал. Опубликованный <!-- m:pyarmor_frac -->72 / 72<!-- /m --> результат учитывает полное декодирование корневого `CodeObject` только для именованных обёрток v8/v9 default-trial; он не устанавливает эквивалентность исходного кода и не охватывает registered-license/pro, BCC или super mode |
| Kramer / Specter, Berserker, BlankOBF, PlusOBF, Wodx, pyobfuscate.com, pyobfuscate.com (2026 XOR/lambda), PyObfuscator (mauricelambert), Manglify, Oxyry, pyminifier, семейство online obfuscator, Xindex, Patchwork, pyc-zipper | Статическое восстановление исходного кода/загрузчика через вычислитель AST; отдельные слои и остатки отражаются в отчёте |
| Jawbreaker, ObfuXtreme | Восстановление тела, присутствующего в артефакте; полезные нагрузки, получаемые во время выполнения, остаются недоступными |
| python-obfuscator (PyPI), pyobfus, Pypacker | Частичное снятие обёртки и классификация |
PyArmor может нуждаться в соответствующем файле среды выполнения рядом с обёрткой. Его специализированный путь BCC требует `--allow-bcc` и выдаёт статические нативные лифты плюс скелеты Python для смоделированных тел; автоматическое восстановление с учётом пути может публиковать те же артефакты BCC. Только динамический хук PyArmor v6/v7 выполняет пример кода, за `--allow-dynamic` с watchdog. `--allow-bcc` разрешает только статический анализ внутри дерева и не выполняет пример и не вызывает внешние инструменты. [Сведения о версиях и режимах](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor).
</details>
<details>
<summary><strong>JavaScript, WebAssembly и упакованные веб-приложения</strong></summary>
| Семейство или формат | Поддержка и маршрут |
|---|---|
| obfuscator.io / javascript-obfuscator, JS-Confuser | Восстановление поддерживаемых строковых массивов, преобразований диспетчера/потока управления, непрозрачных предикатов и слоёв загрузчика; прямые команды и `js.deob` |
| Jscrambler, js-obfuscator (jsobfu) | Частичное восстановление шаблонов и статических преобразований |
| JSFuck, aaencode, jjencode, JSFiretruck, Dean Edwards Packer | Статическое декодирование через специализированные операции и распознанные маршруты цепочек |
| JSDefender, Arxan / Digital.ai | Обнаружение и частичное снятие статических преобразований; защищённые операции коммерческого JS требуют опции авторизации команды |
| PACE | Detect-only |
| webpack 4, webpack 5, Vite, Rollup, Rolldown, esbuild, Turbopack, Bun, Parcel, Browserify, SystemJS; модули AMD | Прямое разбиение/восстановление модулей. Цепочка диспетчеризует webpack и Vite; маркеры каталога для других бандлеров сами по себе не делают эти маршруты автоматическими |
| bytenode `.jsc`, Node SEA, nexe, nw.js | Инспекция/карвинг упакованных данных V8; Node SEA и bytenode имеют явные ветви цепочки |
| Electron ASAR, Tauri v1/v2, Wails v2 | Восстановление встроенных деревьев фронтенда; Electron/Tauri используют `webview.carve`, Wails использует `go.classify`; прямой `webview` обрабатывает все три |
| Bun standalone, Deno eszip v2–v2.3 / `deno compile` | Восстановление встроенных графов модулей через соответствующие читатели контейнеров; eszip также предоставляет прямой читатель на Rust |
| Wobfuscator, Jscrambler WASM, wasm-mixer / Wasmixer | Частичное обращение поддерживаемых преобразований через `wasm.deob`; фикстуры в форме инструментов оценивают преобразования, без зафиксированного вывода от самих этих обфускаторов |
| Tigress → Emscripten, wasm-name-obfuscator | Обнаружение и классификация; помощник Tigress находится вне пути запуска `wasm deob`, а уничтоженные исходные имена остаются недоступными |
[Маршруты JavaScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/javascript.md) · [Ограничения Wasm](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/wasm.md) · [Макеты встроенного фронтенда](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/webview.md).
</details>
<details>
<summary><strong>Нативные упаковщики, протекторы и семейства обфускации</strong></summary>
| Семейство | Поддержка и маршрут |
|---|---|
| Donut, sRDI | Восстановление встроенного модуля из поддерживаемых макетов shellcode-загрузчика |
| UPX, ASPack, Petite, MPRESS, FSG, PECompact, Yoda's Crypter, NSPack, MEW, kkrunchy | Реализованные процедуры распаковки, доступные через `native unpack` и цепочку упаковщиков; точность варьируется по семейству и образцу |
| ASProtect, Morphine, nPack, NeoLite, PolyCryptor, Warzone Crypter | `StubEvalPending`: поведение эмулятора имеет подтверждение заглушки, построенной по спецификации; реальное восстановление упакованного вендором кода не проверено, и диспетчеризация распаковки не заявлена |
| Yoda's Protector, VMProtect, Themida / WinLicense | CLI и auto detect-only. Отдельные помощники на Rust предоставляют карвинг с помощью оригинала или восстановление защищённой секции; они не устанавливают девиртуализацию всей программы |
| PE-Protector, PELock, Enigma Protector, Armadillo, Obsidium, WinLicense | Detect-only |
| DotNetPatcher, NetCryptor | Делегируют управляемый слой проходу .NET |
| OLLVM flattening, bogus control flow, instruction substitution; Tigress CFF | Поддерживаемые статические преобразования деобфускации и отчёты через нативные API Rust; применимый анализ появляется в отчётах нативного восстановления |
| Alcatraz, Emotet CFF, Mirai, Dridex, Trickbot, obfus.h, Cryptify (rust-obfuscator), guardian-rs, obfusheader.h, obfuscxx, Amice | Именованные сигнатуры нативной обфускации; отдельные помощники для строк/потока управления имеют более узкое восстановление, чем полное обнаруженное семейство |
Нативный анализ также восстанавливает символы Rust/C++, RTTI и vtables C++, объектные модели Delphi/C++Builder и ресурсы DFM, информацию DWARF/PDB/STABS, импорты, графы вызовов, криптосигнатуры и совпадения FLIRT. Анализ инструкций охватывает x86, ARM, RISC-V, MIPS, PowerPC, SPARC, eBPF и AVR; генерация исходного кода — это меньший набор архитектур, перечисленный выше. [Нативный анализ](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md) · [Доказательства распаковки и восстановления байтов](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-unpack.md) · [Деобфускация](https://github.com/1-3-7/disrobe/blob/main/docs/src/anti-analysis.md).
</details>
<details>
<summary><strong>Семейства пакетов JVM, Android, .NET и мобильных</strong></summary>
| Семейство | Поддержка и предварительное условие |
|---|---|
| Zelix KlassMaster, Allatori, Stringer, DashO | Восстановление строк для поддерживаемых шаблонов с последующей декомпиляцией classfile |
| DexGuard | Обнаружение, структурное снятие слоёв и эмуляция расшифровки строк внутри класса для поддерживаемых ключевых констант |
| BlackObfuscator | Распознавание диспетчера DEX и аннотирование порядка блоков |
| ProGuard / R8 | Воспроизведение маппинга в sidecar-файл восстановления имён; исходные имена требуют `mapping.txt` |
| yGuard, SkidSuite2, JBCO | Detect-only |
| Promon SHIELD, Guardsquare DexGuard RASP, Guardsquare ThreatCast, Appdome, OneSpan, Arxan / Digital.ai, Zimperium zShield, Licel DexProtector | Идентификация Android RASP и структурные отчёты |
| ConfuserEx2 | Восстановление констант на реальных образцах и выравнивание потока управления; зашифрованные ресурсы могут сохранять границу ключа времени выполнения |
| Eazfuscator.NET | Расшифровка строк и лифтинг VM, оцениваемые по модели; фикстура VM происходит из виртуализатора внутри репозитория, а не из поставляемого продукта |
| KoiVM (ConfuserEx VM) | Виртуализированные тела, поднятые в CIL на зафиксированном выводе реального инструмента |
| ConfuserEx, Dotfuscator, Dotfuscator CE, SmartAssembly, Babel, DeepSea, Spices.Net, Goliath, Skater, .NET Reactor, CryptoObfuscator, ArmDot, Agile.NET, Obfuscar, DotNetPatcher, NetCryptor, BitMono | Обнаружение и частичное восстановление, специфичное для семейства: имена, строки, ресурсы или структуры методов. BitMono входит в детектор протекторов за пределами каталога цепочек .NET из 22 записей |
| Themida (.NET wrapper), ILProtector, MaxToCode | Detect-only для тел, защищённых нативным загрузчиком |
| React Native APK, React Native IPA; байткод React Native Hermes | Извлечение полезных нагрузок JS/Hermes и направление поддерживаемого байткода в лифтинг Hermes |
| Flutter Dart kernel; снимок Flutter AOT (`libapp.so`) | Восстановление таблицы исходников kernel; объявления AOT, метаданные и дизассемблирование ARM64. Версия снимка и доступные имена ограничивают восстановление |
| Xamarin / .NET MAUI APK, Apache Cordova APK, Capacitor APK, NativeScript APK | Идентификация среды выполнения и поддерживаемое извлечение пакетов/членов |
| Android APK (`classes.dex`), Android app bundle (AAB / APKM / XAPK), IPA | Инспекция пакета и извлечение дочерних элементов; последующее восстановление зависит от встроенной среды выполнения |
Декодеры строк .NET для SmartAssembly, Spices.Net, Skater, .NET Reactor, Eazfuscator.NET и CryptoObfuscator оцениваются на смоделированных алгоритмах, а не на зафиксированных сборках, созданных вендором. ConfuserEx2, Obfuscar и BitMono имеют доказательства на реальных защищённых сборках. [JVM/Android](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/jvm-android.md) · [.NET](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/dotnet.md) · [Mobile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/mobile.md).
</details>
<details>
<summary><strong>Семейства Lua, PHP, shell, Ruby, BEAM, Swift, Go и ActionScript</strong></summary>
| Семейство | Поддержка и предварительное условие |
|---|---|
| IronBrew2 | Восстановление VM, проверенное дифференциально по исполнению на реальном выводе 2.7.0 standard и MAX |
| Prometheus | Частичное восстановление, включая поддерживаемые стекированные деревья диспетчеризации `Vmify` |
| MoonSec V1, MoonSec V2, MoonSec V3, AztupBrew, DarkSec, Boronide, PSU, WeAreDevs LuaU, luaobfuscator.com, SLua (Unity Lua 5.3), Hercules | Частичное восстановление Lua; доказательство VM формы MoonSec использует синтетический bootstrap |
| Luraph | Detect-only |
| Байткод Luau, Garry's Mod Lua (GLua) | Распознавание диалекта; лифтинг Luau и частичное восстановление GLua |
| ionCube, SourceGuardian, Zend Guard | Обнаружение коммерческих обёрток PHP; ключи, находящиеся в загрузчике, остаются границей. Устаревшие случаи со статическим ключом могут дать частичную структуру `op_array` |
| FOPO, Better PHP Obfuscator | Статическое снятие eval-цепочек PHP, с требованиями литеральных ключей для зашифрованных слоёв |
| Invoke-Obfuscation (token), Invoke-Obfuscation (AST), Invoke-Obfuscation (string), Invoke-Obfuscation (encoding), Invoke-Obfuscation (compress); Invoke-Stealth, PowerHell, Chameleon, psobf | Статическое восстановление PowerShell |
| Invoke-Obfuscation (launcher), ISESteroids | Частичное восстановление PowerShell |
| Bashfuscator (token), Bashfuscator (string), Bashfuscator (obfuscate), Bashfuscator (compress); Bash indirection (IFS/eval); node-bash-obfuscate (chunk-table eval) | Статическое восстановление Bash |
| Обфускация Batch (`%random%`), обфускация Batch (set indirection); макрос VBA (декомпиляция p-кода + stomping) | Снятие слоёв Batch и восстановление исходного кода/p-кода VBA |
| YARV InstructionSequence (скомпилированный `.rb`), байткод mruby RITE | Восстановление исходного кода Ruby |
| Самораспаковывающийся исполняемый файл OCRA, пакет RubyScript2Exe | Частичная классификация/восстановление freezer |
| Скомпилированный класс JRuby, нативный образ TruffleRuby | Detect-only через каталог Ruby |
| Файл BEAM (скомпилированный модуль Erlang / Elixir), архив EZ (модули `.beam`, обёрнутые в ZIP) | Извлечение модулей, восстановление исходного кода/debug-чанков или фолбэк на Core Erlang |
| garble | Метаданные Go и поддерживаемые литералы; хеширование исходных имён необратимо без отсутствующего seed |
| Метаданные Mach-O Swift / Objective-C, бинарник Mach-O fat (universal), dyld shared cache | Метаданные среды выполнения, восстановление срезов и dylib |
| SwiftShield | Парсер маппинга; для восстановления исходных имён необходимо предоставить маппинг |
| SWF (Flash, FWS/CWS/ZWS) DoABC, сырой байткод ABC | Дизассемблирование и псевдокод тел методов |
| secureSWF, DoSWF, Kindi, Irrfuscator, swfLock | Detect-only |
[Каталог семейств](https://github.com/1-3-7/disrobe/blob/main/docs/src/catalog.md) · [Lua](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/lua.md) · [PHP](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/php.md) · [Shell](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) · [Ruby](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/ruby.md) · [BEAM](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/beam.md) · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) · [Swift](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/swift.md) · [AS3](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md).
</details>
<details>
<summary><strong>Все 103 зарегистрированных формата контейнеров</strong></summary>
| Категория | Форматы |
|---|---|
| Общие архивы | ZIP, TAR, tar.gz, tar.bz2, tar.xz, tar.zst, 7z, RAR, CAB, CPIO, ar, ARJ, ARC, LZH, LZO/lzop, uzip, Xamarin xalz, PAR2, StuffIt |
| Архивы приложений и языков | JAR, WAR, APK, XPI, WHL, EGG, CRX, NUPKG, VSIX, PYZ, Electron ASAR |
| Установщики и образы приложений | PKG, DMG, DEB, RPM, AppImage, Snap, Flatpak, MSIX/APPX, MSI, NSIS, Squirrel, Inno Setup, InstallShield, Enigma Virtual Box |
| Файловые системы и потоки файловых систем | SquashFS, cramfs, ext4, romfs, MinixFS, Android sparse, btrfs-send, EROFS, JFFS2, NTFS, UBI/UBIFS, YAFFS2, QNX, partclone |
| Образы дисков и развёртывания | ISO, OCI, Docker image, VHD, VHDX, WIM, GPT, MBR, FAT12/16/32 |
| Потоки сжатия | XZ, gzip, bzip2, zstd, LZMA, lzip, LZ4, zlib, Unix compress (`.Z`) |
| Встроенные данные приложений | Bun standalone, UnityFS, .NET single-file bundle |
| Прошивки | D-Link SHRS, ENCRPTED_IMG, alpha v1, alpha v2, DEAFBEAD, FPKG; EnGenius; Autel ECC; QNAP; Netgear CHK, TRX v1, TRX v2; Xiaomi HDR1, HDR2; Tesla SBFH; HP BDL, IPKG; Moxa FRM; INSTAR BNEG, HD; Airoha; том прошивки UEFI |
| Память и зашифрованные тома | Windows minidump, LUKS1 |
Реестр заявляет обнаружение для каждой записи. Из этих маршрутов 102 используют универсальный экстрактор; <!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth --> имеют зафиксированные входы, достигающие байтов членов, DMG имеет зафиксированное доказательство только обнаружения, а 59 не имеют зафиксированного входа. LUKS1 оценивается отдельно относительно открытого текста и требует raw-ключа тома `aes-cbc-plain` для расшифровки; без него он сообщает границу ключа. Отдельные методы сжатия, зашифрованные члены, разделённые тома и возможности файловых систем имеют более узкие ограничения. StuffIt 5 в настоящее время возвращает блоб архива через извлечение, хотя его декодеры fork существуют. Содержимое Airoha OTP-AES карвится дословно.
Дополнительные читатели на Rust предоставляют доступ к структурам Deno eszip, Apple APFS/HFS+, добавленным оверлеям ELF и Blazor WebCIL; они не являются дополнительными записями в счёте из 103 форматов. [Маршруты извлечения, версии методов и ограничения](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/containers.md) · [Реестр контейнеров](https://github.com/1-3-7/disrobe/blob/main/crates/disrobe-binfmt/src/container.rs).
</details>
## Автоматическое восстановление`auto` выбирает проход из скомпилированного реестра, запускает его, затем повторно идентифицирует его вывод и извлечённые дочерние элементы. Он останавливается при достижении порога уверенности, повторяющегося хеша содержимого или ограничения глубины (по умолчанию восемь). Отчёты и исходные файлы, помеченные как терминальные, остаются выводами, а не возвращаются обратно в обнаружение. Следующая таблица учитывает каждый проход, зарегистрированный при полной сборке; slim-сборка может опускать строки, зависящие от функций.
| Входной слой | Зарегистрированные ID проходов | Автоматический вывод | Специализированные элементы управления или предварительное условие |
|---|---|---|---|
| Архивы, установщики, прошивки, тома | `binfmt.container` | Извлечённые дочерние элементы, рекурсивно передаваемые в языковые/нативные проходы | `extract` для отчётов об элементах и явная опция raw-key для LUKS1 |
| PyInstaller | `pyinstaller.extract` | Встроенные элементы и дочерние `.pyc` | `pyinstaller extract` для опций, специфичных для архива |
| Python-фризеры | `pyfreeze.extract`, `nuitka.extract` | Извлечённые полезные нагрузки или поддерживаемая структура скомпилированного пакета | Экспериментальный `pyfreeze`; вариант Nuitka определяет, что сохраняется |
| Защищённый Python | `pyarmor.unpack`, `sourcedefender.decrypt` | Доступный открытый текст/байткод, метаданные или отчёты о границах ключей | Соответствующие runtime/ключевые материалы; выделенный режим PyArmor и опции строгости |
| Исходный код и байткод Python | `py.deob`, `py.decompile`, `py.disasm` | Очищенный исходный код, декомпилированный исходный код или трассировка инструкций | `py decompile --emit source,disasm,ast`; для проверок рекомпиляции требуется соответствующий интерпретатор |
| Pickle | `pickle.classify` | Символический анализ и классификация | `pickle` для отдельных операций инспекции/реконструкции |
| JavaScript | `js.deob` | Поддерживаемая деобфускация, восстановление модулей webpack/Vite, обработка Node SEA/bytenode | `js unbundle` предоставляет более широкий набор бандлеров; source maps и опции переименования являются прямыми элементами управления |
| WebAssembly | `wasm.deob` | Восстановленный или поднятый WAT плюс sidecar-файлы обнаружения, сводки и восстановления | `wasm decompile --target` выбирает Rust, TypeScript, C, WAT или JSON |
| Electron / Tauri | `webview.carve` | Встроенные элементы фронтенда | `webview` также поддерживает Wails; автоматическое восстановление Wails использует `go.classify` |
| PHP / Phar | `php.peel` | Очищенный исходный код, вывод `op_array`, дочерние элементы архива, отчёты об остатках/ключах | Ключи и IV должны быть статически доступны для зашифрованных слоёв |
| JVM / DEX | `jvm.classify` | Исходный код Java, манифесты протектора и восстановления, дочерние элементы классов/архивов | `jvm`/`apk` для маппинга, сигнатур и опциональных внешних бэкендов |
| .NET | `dotnet.classify` | C# и анализ, восстановленные константы/ресурсы/CIL или метаданные Native AOT | `dotnet` для других форматов исходного кода и установленных бэкендов рендеринга |
| Мобильные пакеты / байткод | `mobile.classify` | Извлечение runtime/элементов, подъём Hermes, исходный код Dart kernel или отчёты AOT | `hermes`, `flutter`, `mobile` для элементов управления, специфичных для формата |
| Lua | `lua.deob` | Восстановленный Lua и sidecar-файлы диалекта/точности | `lua` для явных элементов управления семейством и выводом |
| Shell / Office / PDF | `shell.deob` | Очищенные скрипты, исходный код макросов/p-код, отчёты XLM и документов | `shell` для операций, специфичных для документов |
| Ruby | `ruby.classify` | Анализ плюс восстановленный исходный код YARV/mruby, где доступно | `ruby` для отчётов, специфичных для варианта; классификация JRuby/TruffleRuby не является восстановлением исходного кода Ruby |
| BEAM / EZ | `beam.classify` | Erlang/Elixir/Core Erlang, дизассемблирование, дочерние элементы архива | Сохранившиеся отладочные чанки определяют точность исходного кода |
| SWF / ABC | `as3.classify` | Структура ABC, листинги инструкций, псевдокод AS3 | Именованные коммерческие обфускаторы остаются только для обнаружения |
| Go | `go.classify` | Символы, типы, анализ garble и элементы встроенной файловой системы | `go` для DWARF, BuildInfo и других специализированных отчётов |
| Swift / Objective-C | `swift-objc.classify` | Метаданные, универсальные срезы и dylib из общего кеша | Могут потребоваться соседние файлы подкеша/символов; прямые элементы управления `swift`/`macho` |
| Нативные упаковщики | `native.packer-unpack` | Доступный распакованный образ или встроенный модуль, символы, сигнатуры, отчёты восстановления | Распаковку выполняет только реализованный диспетчер упаковщиков; коммерческие VM-уровни могут остановиться на обнаружении |
| Нативные образы | `native.image-classify` | Идентификация, символы, сигнатуры, находки и ограниченный отчёт псевдо-исходного кода x86-64/AArch64 | `native decompile` выбирает полную команду вывода исходного кода; пути исходного кода ARM32/MIPS32 являются прямыми |
| Windows / OS/2 NE | `native.ne-structure` | Сегменты, точки входа, импорты и ресурсы | Структурное восстановление, а не декомпиляция исходного кода |
| Perl / R / Tcl / Haxe / WSH | `scriptlang.classify` | Отчёты по языку, восстановленные структуры и поддерживаемые дочерние артефакты | Библиотечные API для каждого формата предоставляют более тонкие операции |
| Nim / Zig / Crystal / D | `nativelang.classify` | Языковые отпечатки, символы и частичная нативная структура | Для классификации требуется достаточное количество сохранившихся языковых маркеров |
Например, распознанное приложение PyInstaller может пройти через `pyinstaller.extract` → `pyarmor.unpack` → `py.decompile`; APK — через извлечение элементов → DEX → Java; а упакованный нативный образ — через распаковку → анализ языка или образа. Каждая стрелка зависит от того, что фактически даёт этот конкретный слой.```sh
disrobe passes
disrobe catalog python --json
disrobe auto input-directory/ --out recovered/ --batch-max-depth 6 --capture-stages
disrobe chain module.pyc --chain py.decompile --out python-source/
scan, frisk, taint, vulnmatch, явный выбор источника-цели, воспроизведение маппинга и опциональный вызов внешнего бэкенда остаются отдельными операциями. Реестр проходов · Выбор цепочки и компоновка вывода.
Карта возможностей охватывает группы команд и интеграции. Её
машиночитаемая инвентаризация связывает исходный код, тесты, документацию, статус
поддержки и демонстрации. Справочник CLI охватывает вложенные команды;
глобальные флаги описывают общие опции. Используйте disrobe <command> --help
для интерфейса вашей установленной сборки.
Команды проекта и сервиса также проиндексированы там: serve, plugin, init, config, catalog, passes, doctor, install, install-deps, self-update, completions, man, explain и bug-report. Используйте doctor для проверки от 46 до 51 внешних инструментов в зависимости от платформы и выявления отсутствующих опциональных бэкендов.
Таблица сопоставляет каждую задачу восстановления с командами Disrobe и связанными инструментами. Установленные декомпиляторы и экспортированные артефакты обеспечивают точки интеграции, показанные ниже.
Инвентаризация сравнений перечисляет оставшиеся сравнения на общих входах. Опции бэкендов описаны в установке и связанных языковых руководствах выше.
Измерения используют закреплённые входы, версии инструментов и правила оценки, указанные ниже. Подсчёты DEX и JAR измеряют компиляцию регионов, выдаваемых каждым инструментом. Эти популяции различаются, поэтому их подсчёты не ранжируют качество восстановления. Полнота секретов APK использует одну и ту же эталонную истину из восьми токенов.
Входы, сырые результаты инструментов и команды воспроизведения.
Тот же анализ Ghidra 12.1.2 видит другой код после того, как Disrobe экспортирует упакованный исполняемый файл как пересобранный PE. Эти локальные снимки используют реальные безвредные упакованные фикстуры и фиксируют как увеличения, так и уменьшения. Столбцы функций/инструкций/строк взяты из снимка анализа на девяти входах; завершённые рендеринги C взяты из отдельного снимка декомпилятора на шести входах. Завершённый рендеринг — это непустой вывод, а не оценка корректности исходного кода.
Подсчёты kkrunchy уменьшаются. Больше обнаруженных функций не обязательно означает больше корректных функций, и эти подсчёты анализа не заменяют побайтовое сравнение. Прочитайте снимок анализа, снимок декомпилятора и отдельные измерения нативного побайтового восстановления.
Индекс доказательств связывает измерения восстановления с их фикстурами, методами сравнения, командами и результатами.
Результаты различают побайтовое восстановление, принятие компилятором и поведенческие проверки. Принятие компилятором и подсчёты покрытия не являются оценками эквивалентности.
Эти проверки измеряют Disrobe относительно оригинального артефакта, компилятора, интерпретатора или размеченного корпуса. Они отличаются от сравнения двух декомпиляторов. Каждый связанный результат фиксирует входную популяцию, предварительные условия и команду воспроизведения.
Полные записи доказательств описывают каждую популяцию и правило оценки.
Метки на графиках используют strong для независимого эталона корректности, recompile-only для принятия компилятором и coverage-self-reported для собственных счётчиков покрытия Disrobe. Метод сравнения и популяция определяют область применения каждого результата.
Просмотрите результаты, сравнения инструментов и предварительные условия воспроизведения для отдельных измерений.
--backend auto. Проверьте справку команды и руководство по установке перед выбором бэкенда.
Chain runner соединяет проходы с единственной целью через общие артефакты и промежуточные представления. Проход вносит тот вывод, который он может обосновать; нижестоящие потребители сохраняют происхождение и сообщают о неподдерживаемых границах. Изучите архитектуру, модель проходов, лестницу IR и chain runner.
Начните с документации, быстрого старта и руководства по результатам. Используйте disrobe explain <code> для поиска диагностики. Для изменений в проекте прочитайте руководство по внесению вклада и тесты и доказательства соответствующей функции.
Модель угроз описывает границы доверия и обработку ввода. Сообщайте о проблемах безопасности через SECURITY.md. LEGAL.md описывает юридические соображения проекта; разрешение на анализ артефакта зависит от ваших обстоятельств.
Каждая версия Disrobe является проприетарной и доступной в исходном виде в соответствии с Disrobe Source-Available License, Version 1.1, которая заменяет Elastic License 2.0 и Version 1.0 для всех версий и отзывает все более ранние разрешения, как указано в уведомлении о перелицензировании.
Личные хобби-проекты, личное обучение и неоплачиваемые независимые исследования безопасности отдельными лицами, некоммерческое образование и исследования, а также добросовестная журналистика бесплатны, как определено в лицензии.
Любое использование компанией или для компании требует платной лицензии. См. коммерческое лицензирование.
Обязательное указание авторства: В этой работе использовался Disrobe, созданный 1-3-7: https://github.com/1-3-7/disrobe
Форки, кроме форков для внесения вклада, повторная публикация, ребрендинг, перепродажа, хостинг и конкурирующая разработка запрещены. Программное обеспечение предоставляется как есть, на риск пользователя.
См. атрибуцию, условия для участников, сводку и уведомления третьих сторон.
Copyright (c) 2025-2026 1-3-7. Все права защищены.
Более ранние коммиты разработки были объединены в единую базовую версию в рамках обновления документации и визуального оформления.
| Задача | Команды | Вывод или следующий шаг |
|---|
| Поиск индикаторов, секретов и статических находок | scan, frisk, strings, ioc, indicators, behavior | Находки и смещения |
| Изучение функций, потоков и поведения | query, capabilities, taint, vulnmatch | Запрашиваемый IR, маппинги ATT&CK/MBC и отчёты source-to-sink |
| Сохранение аннотаций и структурированных артефактов | annot, rename, envelope, verify, yara | Конверты артефактов и состояние аналитика |
| Отслеживание происхождения и сравнение запусков | chain, context, status, report, diff, guard, semdiff | Отчёты, хеши и различия восстановления |
| Сбор публичных сетевых данных | prowl | Явный сетевой сбор, отдельно от офлайн-восстановления |
| Интерфейс | Точка входа | Руководство |
|---|
| Rust | Общие типы ядра и отдельные крейты проходов | API библиотеки |
| Python | Типизированные привязки через import disrobe | Привязки Python |
| HTTP, gRPC и LSP | disrobe serve | Сервис |
| Model Context Protocol | disrobe-mcp или disrobe serve --mcp | Интеграция MCP |
| Редакторы и инструменты анализа | VS Code, IDA Pro, Ghidra, Binary Ninja | Интеграции с редакторами |
| GitHub Actions | Действие репозитория и вывод SARIF | GitHub Action |
| Локальные проверки коммитов | ID хука disrobe | pre-commit |
| Браузер | Клиентский Wasm-воркер | Песочница |
| Контекст проекта для инструментов кодирования | disrobe init --ide | Метаданные sidecar |
| Задача восстановления | Названные инструменты | Путь Disrobe | Как выбрать или объединить их |
|---|
| Python-байткод в исходный код | pycdc, PyLingual, uncompyle6, decompyle3 | Встроенный декомпилятор CPython 1.0–3.15, восстановление вложенных code-объектов, вывод исходного кода/дизассемблирования/AST | Изучайте восстановленный исходный код, дизассемблирование и AST из встроенного декомпилятора Python |
| Извлечение замороженного Python | pyinstxtractor-ng, pydecipher | Извлечение PyInstaller, Nuitka и freezer с последующим восстановлением байткода | auto может продолжить от извлечённого члена через протектор и до декомпилятора Python |
| PyArmor | Pyarmor-Static-Unpack-1shot | Статическое восстановление обёртки/рантайма, отчёты о режимах, опциональный статический лифтинг BCC | Предоставьте соответствующий рантайм для восстановления данных обёртки и изучения результатов, специфичных для режима |
| Инспекция Pickle | fickling, Python pickletools | Трассировка инструкций, символьные редукторы, классификация и реконструкция значений | Инспектируйте без выполнения редукторов; pickletools оценивает инспекцию, а CPython проверяет реконструкцию на 470 сгенерированных фикстурах |
| Деобфускация JavaScript | webcrack, synchrony, REstringer | obfuscator.io, JS-Confuser, поддерживаемые паттерны Jscrambler, эзотерические декодеры, восстановление констант/потока управления | Используйте js deob для явных опций или auto, когда JS находится внутри пакета |
| Разбор бандлов JS и source maps | wakaru, webcrack, sourcemapper | Извлечение модулей, обработка source-map, переименование с учётом областей видимости, инспекция упакованного V8 | js unbundle предоставляет больше маршрутов бандлеров, чем автоматическая диспетчеризация цепочки |
| WebAssembly | WABT wasm-decompile, Binaryen | Псевдоисходный код WAT и C/Rust/TypeScript, JSON-сводки, поддержка обращения обфускации | Изучите выбранную цель исходного кода; выполнение в wasmtime независимо проверяет восстановленное поведение ниже |
| Исходный код JVM | CFR, Vineflower, Procyon, Fernflower | Нативное восстановление classfile плюс обработка протектора/строк | jvm decompile записывает артефакты Disrobe вместе с выводом установленного бэкенда; CFR имеет измеренный результат компиляции ниже |
| Пакеты Android и DEX | JADX, apktool, androguard, dex2jar | Встроенное восстановление Dalvik, метаданные/подписи APK, извлечение рантайма, вывод Java | Декомпиляция DEX/APK по умолчанию использует нативный путь; бэкенд Android выбирается явно. JADX имеет измеренный этап ниже |
| Сборки .NET | ILSpy, dnSpy, dnSpyEx, de4dot | Восстановление CIL плюс специфичные для протектора константы, ресурсы, тела VM и метаданные Native AOT | dotnet decompile записывает вывод CIL Disrobe вместе с установленным рендерером; --backend auto выбирает ILSpy, dnSpyEx, dnSpy или de4dot |
| Нативная декомпиляция | Ghidra, IDA, Binary Ninja | Встроенный псевдо-C для x86-64 C/Rust и AArch64/ARM32/MIPS32; отчёты о восстановленных символах/типах | Выберите Ghidra в headless-режиме с --backend ghidra или используйте интеграции с редакторами и экспортированные символы в интерактивной сессии анализа |
| Упакованные нативные исполняемые файлы | upx -d, unipacker, Detect It Easy | Реализованные распаковщики и ограниченная эмуляция стабов, пересобранные образы PE, встроенные модули загрузчика | Экспортируйте восстановленные образы PE в Ghidra/IDA. Измерения Ghidra ниже сравнивают упакованные и пересобранные входы |
| Нативная обфускация | Ghidra, IDA, Binary Ninja и скрипты деобфускации | Преобразования OLLVM/Tigress, упрощение MBA, стековые строки, нативные метаданные и отчёты восстановления | Выберите соответствующую нативную операцию/API; одного отпечатка VM-протектора недостаточно для восстановления тела |
| Метаданные Go и garble | GoReSym, redress, gore | pclntab, метаданные модулей/типов, встроенные файлы и восстановимые литералы garble | go сообщает имена/типы; native decompile отдельно обрабатывает путь исходного кода машинного кода |
| Swift / Objective-C | swift-demangle, class-dump, jtool2 | Данные классов/протоколов/селекторов рантайма, рендеринг символов, fat-срезы, dylibs общего кеша | Предоставьте сохранившиеся маппинги и файлы подкеша; оригинальные имена, стёртые переименованием, требуют внешней карты |
| Байткод и VM Lua | unluac, luadec, LuaDec51 | Исходный код Lua/LuaJIT/Luau плюс поддержка обфускаторов и кастомных VM | IronBrew2 имеет доказательства дифференциала выполнения с реальным инструментом; обычное восстановление .luac и восстановление VM — разные операции |
| Байткод Ruby | Дизассемблирование MRI | Исходный код YARV и mruby, листинги опкодов, классификация freezer/AOT | Перекомпиляция MRI оценивает полноту имён опкодов; эта мера не устанавливает эквивалентность выполнения |
| Слои PHP | php-malware-finder | Снятие eval-цепочек и циклов/шифров с литеральными ключами, извлечение Phar, отчёты о конвертах энкодеров | Используйте статические слои и доступный ключевой материал; коммерческие полезные нагрузки с ключами нативного загрузчика остаются закрытыми |
| PowerShell, Bash, VBA | PowerDecode, инструменты FLARE, olevba | Деобфускация shell, исходный код/p-код VBA и stomping, формулы XLM, действия PDF | shell размещает восстановление скриптов и находки документов рядом с остальным анализом артефактов |
| BEAM / ActionScript | Erlang beam_disasm, RABCDAsm | Восстановление debug-source/Core Erlang для BEAM и псевдокод тел методов ABC | Сохраняйте debug-чанки, когда они доступны; у stripped BEAM есть отдельная проверка выполнения реальным Erlang |
| Hermes / React Native | hermes-dec, hbctool, DroidSaw | Извлечение рантайма, структура HBC, поддерживаемый лифтинг псевдо-JavaScript | Парсинг HBC охватывает v60–v96; лифтинг исходного кода имеет более узкую измеренную границу. Мост taint Hermes-to-DEX не реализован |
| Flutter / Dart AOT | reFlutter, Darter, blutter | Таблицы исходного кода Kernel, граф объявлений AOT, тела ARM64, строки, парсинг rename-map | Исходный код Kernel и метаданные AOT — разные уровни восстановления; версии снапшотов ограничивают парсинг AOT |
| Контейнеры и прошивки | binwalk, unblob, 7-Zip | Извлечение зарегистрированных форматов, рекурсивная маршрутизация дочерних элементов, декодирование/карвинг прошивок, отчёты об отказах по каждому члену | Передавайте извлечённые члены напрямую в языковые проходы; сравнивайте байты членов, а не считайте распознанную магию успешным извлечением |
| Секреты и индикаторы | APKLeaks, TruffleHog, Gitleaks, LinkFinder | Находки в восстановленном дереве/APK, смещения токенов, статические строки, отчёты о секретах и IOC | Сканируйте APK или восстановленное дерево; сравните APKLeaks с теми же внедрёнными секретами ниже |
| Идентификация формата, упаковщика, компилятора | Detect It Easy, TrID, PEiD, binwalk | Мультисигнальная идентификация, символы, подписи и подсказки маршрутизации | Используйте identify/detect для выбора пути восстановления, затем изучите его фактический вывод |
| Возможности и taint | capa, скрипты Ghidra, Joern | Находки ATT&CK/MBC со смещениями, запросы к нормализованному IR, отчёты о потоке source-to-sink | Запускайте сопоставление возможностей и анализ source-to-sink на восстановленных артефактах; отчёт taint включает свою тестовую популяцию Juliet |
| Инструмент и вход | Результат Disrobe | Результат названного инструмента | Что проверяет измерение |
|---|
| JADX 1.5.5 · Android DEX | 157 / 228 выданных регионов компилируются чисто | 281 / 303 выданных регионов компилируются чисто | Закоммиченный EdgeCases DEX; реальный javac, компиляция полного исходного кода с последующей ограниченной изоляцией регионов, блокирующих атрибуцию; разные выданные популяции |
| CFR 0.152 · JVM classfile | 181 / 181 выданных регионов компилируются чисто | 152 / 166 выданных регионов компилируются чисто | Закоммиченный EdgeCases JAR; та же процедура компилятора/оценщика; разные выданные популяции |
| APKLeaks 2.6.3 · APK с внедрёнными секретами | 8 / 8 внедрённых секретов | 5 / 8 внедрённых секретов | Точное совпадение токенов на одном и том же APK; Disrobe также находит внедрённый ключ доступа AWS secret, Basic-учётные данные и JWT |
| Упакованный вход | Функции Ghidra, упакованный → пересобранный | Инструкции, упакованный → пересобранный | Строки, упакованный → пересобранный | Завершённые рендеринги C, упакованный → пересобранный |
|---|
| 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 | Не измерено |
| MEW · AccessEnum | 4 → 152 | 125 → 9 592 | 3 → 802 | Не измерено |
| MEW · Autologon | 4 → 295 | 125 → 19 595 | 3 → 406 | Не измерено |
| kkrunchy classic · NASM hello | 4 → 1 | 149 → 10 | 3 → 4 | 4 → 1 |
| Вход | Выданные регионы Disrobe | Выданные регионы названного инструмента | Граница популяции | Воспроизведение |
|---|
| Android DEX | 157 / 228 выданных регионов компилируются чисто | JADX 1.5.5: 281 / 303 выданных регионов компилируются чисто | без кросс-инструментального ранжирования: у каждого инструмента своя популяция выданных регионов | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| JVM classfile | 181 / 181 выданных регионов компилируются чисто | CFR 0.152: 152 / 166 выданных регионов компилируются чисто | без кросс-инструментального ранжирования: у каждого инструмента своя популяция выданных регионов | cargo run --locked -p disrobe-bench-head-to-head -- --check --only apk-jadx-cfr |
| Восстановление | Зафиксированный результат | Эталон и ограничение |
|---|
| Python 3.14.5, закреплённые модули | 6077 из 6286 code-объектов | Перекомпиляция CPython с нормализованным сравнением структуры опкодов; цели переходов, большинство операндов и дополнительные восстановленные объекты не оцениваются. Результат |
| Python 3.14.5, фиксированная популяция ядра | 17396 из 18276 code-объектов, локальное измерение | То же нормализованное сравнение по 574 модулям; это не результат семантической эквивалентности. Результат |
| Устаревший Python 1.0–3.7 | как минимум 150 из 191 фикстур (регрессионный порог) | Перекомпиляция интерпретатором соответствующей эпохи или структурные токены против оригинального исходного кода. Результат |
| Классификация Pickle | 102 / 102 классификационных фикстур | Семантика pickletools. Результат |
| Реконструкция Pickle | 470 / 470 восстановленных фикстур проходят проверки равенства при повторном выполнении | Повторное выполнение в CPython. Результат |
| Компиляция исходного кода JVM | 131 из 131 методов компилируются | Реальный javac. Результат |
| Поведение JVM | 117 / 131 методов совпадают с наблюдаемым выполнением | Реальная JVM; восемь методов расходятся и шесть не запускаются изолированно. Результат |
| Android DEX | 118 / 118 классов, представленных верификатору | JVM -Xverify:all; 37 из 155 классов пропущены на этапе линковки и не оценены. Результат |
| .NET C# | 18 / 35 полных типов EdgeCases перекомпилируются автономно | Реальный Roslyn csc; легальный исходный код не устанавливает эквивалентное поведение. Результат |
| Тела .NET VM | Модель Eazfuscator: 67 / 67 инструкций; реальный KoiVM: 6 / 6 тел поднято | Отдельные эталоны оригинальной/чистой сборки; EazVM использует виртуализатор из репозитория, KoiVM использует вывод реального инструмента. Доказательства |
| WebAssembly | 57 / 57 подходящих функций | wasmtime сравнивает возвраты, ловушки и первые 4 096 байт линейной памяти на тестовых входах. Результат |
| BEAM без debug-чанков | 19 / 19 модулей | Перекомпиляция Erlang/OTP 27.3.4, сравнение экспорта и вывод/статус завершения test/0. Результат |
| Lua IronBrew2 | Реальный вывод 2.7.0 standard и MAX восстанавливается до совпадающего выполнения | Реальный интерпретатор Lua против оригинальных программ; одно семейство VM. Результат |
| Ruby YARV | Greeter 100%; megafile 98.67% полноты имён опкодов | Перекомпиляция MRI; мультимножественная полнота игнорирует порядок, операнды, цели ветвлений и дополнительные инструкции. Результат |
| Имена типов Go после strip | 838 из 838 имён | Реальные метаданные go1.26.3 из сравнительной сборки. Результат |
| Hermes HBC v96 | 8 из 8 функций, ноль операций fallback | Реальный образец hermesc с оригинальным исходным кодом и именами функций. Результат |
| Нативные упакованные байты | UPX, FSG, NSPack, Petite, MPRESS .text побайтово идентичны на указанных закоммиченных парах; ресурсы Yoda's Crypter побайтово идентичны | Оригинальные байты с выравниванием по RVA; остатки по всему образу и ресурсам сообщаются отдельно. Таблица по каждому входу |
| Внедрённые индикаторы | 6 / 6 категорий IOC представлены | Закоммиченные конечные точки, находки в манифесте, URL, IPv4, email и эталонная истина .onion. Результат |
| Граф вызовов MCP | 5 / 5 прямых рёбер, все корректно идентифицированы | Stripped ELF сравнивается с его отдельным нестрипленным двойником из той же цепочки инструментов. Точность, полнота |
| Нативный taint | 93 / 190 размеченных потоков восстановлено; ноль ложных срабатываний, локальное измерение | Срез NIST Juliet CWE-78 char/system, gcc 16.2.0 -O2; семь объявленных категорий потоков не имеют случаев в этом срезе. Результат |