
Rust CLI-набор, который статически декомпилирует, деобфусцирует и распаковывает нативный код, байт-код, скрипты, прошивки и пакеты приложений в более чем 15 экосистемах через единый автоматический конвейер.
Disrobe — это статический декомпилятор, деобфускатор и распаковщик. Он снимает упаковку и обфускацию со скомпилированного ПО слой за слоем и восстанавливает исходный код или исходные байты под ними.
Передайте disrobe auto исполняемый файл, пакет приложения, скрипт или образ прошивки. Он определяет имя каждого слоя (установщик, архив, упаковщик, заморозчик, протектор, обфускатор, байт-код), удаляет его с помощью соответствующего прохода восстановления и снова запускается на том, что этот проход создал, пока ни один проход не перестанет распознавать оставшееся. Один бинарник на Rust охватывает Python, JavaScript и WebAssembly, Java и Android, .NET, нативный код PE, ELF и Mach-O, Go, Lua, PHP, Ruby, Erlang и Elixir, ActionScript, shell-скрипты и макросы Office, приложения React Native и Flutter, установщики и прошивки. disrobe catalog перечисляет 169 семейств упаковщиков, протекторов, обфускаторов и байт-кода, которые он распознаёт в 15 экосистемах.
Движки встроены. Байт-код Python декомпилируется без установленного Python, для восстановления JavaScript не нужен Node.js, а декомпиляторы Java, Android и .NET не требуют JVM или .NET SDK; jvm decompile и dotnet decompile запускают установленный внешний декомпилятор только если он указан в --backend. Disrobe не запускает анализируемую программу, если вы не передадите --allow-dynamic, что применимо только к PyArmor v6 и v7. Модель безопасности перечисляет ограниченные интерпретаторы, которые вычисляют код, взятый из входных данных, и хостовые инструменты, которые запускает Disrobe.
Он создан для аналитиков вредоносного ПО, реверс-инженеров, специалистов по реагированию на инциденты, игроков CTF и исследователей безопасности.
Лицензия: Disrobe Source-Available License 1.1. Личные хобби-проекты и обучение, неоплачиваемые независимые исследования в области безопасности, некоммерческое образование и исследования, а также журналистика бесплатны в том смысле, в каком это определяет лицензия. Любое использование компанией или для компании требует платной лицензии.
Быстрый старт · Что он восстанавливает · Измеренные результаты · Как это работает · Модель безопасности · Документация
Скачайте архив для вашей платформы со страницы GitHub Releases, сверьте его с SHA256SUMS и поместите disrobe (disrobe.exe в Windows) в ваш PATH. Затем выполните:
disrobe identify suspect.exe # compiler, packer, and protector, with evidence
disrobe auto suspect.exe --out recovered/ # remove the layers Disrobe can recover
disrobe context --out recovered/ # what each pass recovered, and at what confidence
Записанный вывод identify и шага распаковки, выполненного для Rust-программы, упакованной UPX и закоммиченной в этот репозиторий (corpus/native/packers/upx/hello.packed.nrv2b.exe):
$ disrobe identify hello.packed.exe
format: pe64 (64-bit) subsystem=windows-cui
packer UPX (96%) -> disrobe native unpack
- [section UPX0] UPX characteristic section
- [section UPX1] UPX characteristic section
- [section UPX2] UPX characteristic section
- [byte scan] UPX packer magic
...
$ disrobe native unpack hello.packed.exe --out recovered/hello.bin
native unpack: OK
input: hello.packed.exe
packer: upx
status: Implemented
packed_size: 53248
recovered: 116810 bytes
wrote: recovered/hello.bin
Бенчмарк распаковки восстанавливает тот же файл и сравнивает его с оригинальной сборкой: секция .text побайтово идентична, 73 160 байт без различий (измерения распаковки).
Релизные архивы охватывают Windows (x86-64, ARM64), macOS (x86-64, ARM64) и Linux (x86-64 и ARM64 с glibc, статический x86-64 с musl). Каждый архив имеет отдельный пакет подписи cosign, и SECURITY.md объясняет проверку. Сборка из исходного кода требует набора инструментов Rust, закреплённого в rust-toolchain.toml (1.96.1; минимальная поддерживаемая версия — 1.95), и набора инструментов C для нативных зависимостей:
git clone https://github.com/1-3-7/disrobe
cd disrobe
cargo build --locked --release -p disrobe-cli --bin disrobe
Руководство по установке описывает флаги функций и дополнительные внешние бэкенды. Запустите disrobe doctor, чтобы проверить от 46 до 51 внешних инструментов в зависимости от платформы и увидеть, какие дополнительные бэкенды установлены.
Каждая строка указывает форматы, которые читает Disrobe, и защиту, которую он снимает. Там, где disrobe catalog перечисляет семейство, показанный уровень — это уровень каталога. Семейства, указанные первыми, восстанавливаются. Частичные семейства снимаются настолько, насколько позволяет вход, и результат указывает, что осталось. Только обнаружение — семейства идентифицируются, и результат сообщает, почему остальное не может быть восстановлено, обычно потому что ключ существует только во время выполнения. Имя, выделенное жирным, оценивается по выводу реального инструмента, зафиксированному в этом репозитории; остальные имена оцениваются по образцам, написанным для тестов, или только обнаруживаются. Каждая экосистема ссылается на своё руководство. Столбец Evidence помечает каждую строку: real ссылается на результат или тест, который оценивает вывод реального компилятора или инструмента, synthetic указывает на то, что оценивается только на входных данных, созданных для тестов, а claimed указывает на то, что не проверяется ни одним тестом.