
Rust製CLIスイート。15以上のエコシステムにまたがるネイティブコード、バイトコード、スクリプト、ファームウェア、アプリパッケージを、単一の自動パイプラインで静的に逆コンパイル、難読化解除、アンパックします。
はじめに · 対応入力 · 自動復元 · ツール比較 · 証拠 · ドキュメント
Disrobe は、ソフトウェアの逆コンパイル、難読化解除、アンパックを行うための Rust 製コマンドラインスイートです。未知のファイルのトリアージ、リバースエンジニアリングのためのコード復元、調査のためのインジケーター抽出、逆アセンブラ用のアーティファクト準備に使用できます。
バイトコードやフリーズされたアプリケーションから Python を、クラスファイルや DEX から Java を、CIL から C# を、バンドルから JavaScript を、カスタム仮想マシンから Lua を、ネイティブコードから C や Rust を復元します。インストーラー、ファームウェア、モバイルパッケージ、および Electron、Tauri、Wails アプリケーションからファイルを抽出します。復元されたソース、シンボル、文字列、型、来歴をまとめて保持し、さらなる分析に役立てます。
完全なビルドは 170 ファミリーを 15 エコシステムにわたってカタログ化し、103 のコンテナ形式を検出します。disrobe auto は各レイヤーを識別し、一致するパスを実行し、復元された子をそれぞれの復元パスへと追跡します。専用コマンドは、より細かい制御、分析レポート、およびオプションのバックエンドを公開します。復元はデフォルトで静的に実行され、ソース、構造、部分的な出力、および欠落キーの境界は結果内で区別可能なままです。
Disrobe が役に立つと思ったら、リポジトリにスターを付けることを検討してください。
2 分 12 秒で 20 の CLI コマンド: ネイティブ実行ファイルのアンパック、Python と Lua の復元、JavaScript モジュールの分割、ソースマップの復元、WebAssembly と Android リソースの検査、インジケーターの抽出、レポートとアーティファクトハッシュの保存。最終章では、プロジェクト設定、IDE セットアップ、アナリスト注釈、シェル補完を紹介します。トランスクリプトには、記録されたビルドの完全なコマンド一覧が含まれています。ケイパビリティマップでは、そのサポート範囲について説明しています。
GitHub Releases からお使いのプラットフォーム用のアーカイブをダウンロードし、リリースの SHA256SUMS と照合して、disrobe を PATH に配置してください。リリースアーカイブには署名バンドルが含まれています。検証ガイドでは、その検査方法について説明しています。
| プラットフォーム | リリースターゲット |
|---|---|
| Windows | x86-64, ARM64 |
| macOS | x86-64, ARM64 |
| Linux | glibc の x86-64 および ARM64、musl の x86-64 |
インストールしたバイナリを確認します:```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、Windows では target/release/disrobe.exe です。フィーチャーフラグとスリムビルドについてはインストールガイドを参照してください。
アプリケーション、ライブラリ、またはパッケージから始めます。それを識別し、認識されたレイヤーを復元し、復元サマリーを確認します:```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/
ネイティブデコンパイラは x86-64 ではデフォルトで C を出力し、--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` を書き出し、2番目のコマンドは 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 | ソースの難読化解除、圧縮解除、モジュール分割、ソースマップ、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 イディオム、マニフェストおよび署名情報、プロテクタレポートおよびマッピングサイドカー | `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 の検査。単一ファイルバンドルの抽出 | `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-code の識別または解析。上記のアーキテクチャ固有パスでのソース出力 | `native`、`macho`、`semdiff` · [Native](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native.md)、[decompile](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/native-decompile.md) |
| Go | PE/ELF/Mach-O ランタイムメタデータ、除去された関数名および型名、`embed.FS` ファイル、garble レポートおよび復元可能なリテラル | `go` · [Go](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/go.md) |
| Swift / Objective-C | Mach-O クラス、プロトコル、フィールド、セレクタ、デマングルされたシンボル。ユニバーサルスライス。dyld 共有キャッシュ dylib | `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 | ソース/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` ブロックおよび raw ABC バイトコードから逆アセンブルおよび AS3 疑似コードへ | `as3` · [ActionScript](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/as3.md) |
| モバイルランタイム | Hermes v60 から v96 のヘッダ解析、v62/v71/v74/v76/v83/v84/v89/v96 の疑似 JavaScript リフト。Flutter Dart カーネルのソース本体。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。VBA3/5/6/7 p-code および stomping。Office マクロソース、BIFF8/BIFF12 XLM 数式、PDF 埋め込みスクリプト/アクション | `shell` · [Shell とドキュメント](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/shell.md) |
| その他の言語成果物 | Perl op-tree/バイトコード、R RDS および Rcpp メタデータ、Tcl starkit、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 埋め込みマップ、Wails v2 `embed.FS` ツリー | `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、protector、およびソース難読化ツール</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 (レガシー DES)、PyArmor v4 (レガシー混合)、PyArmor v5 (レガシー AES) | Detect-only: RSA ラップ鍵の境界 |
| PyArmor v6、PyArmor v7 | 部分的な静的復元。super モードおよび利用できない鍵が出力を制限 |
| PyArmor v8、PyArmor v9 / 9-Pro | 鍵素材が利用可能な場合の静的ラッパー復元。公開されている <!-- m:pyarmor_frac -->72 / 72<!-- /m --> の結果は、名前付き v8/v9 デフォルトトライアルラッパーについて完全なルート `CodeObject` デコードのみをカウントしており、ソースの等価性を確立するものではなく、登録ライセンス/pro、BCC、または super モードをカバーするものでもない |
| Kramer / Specter、Berserker、BlankOBF、PlusOBF、Wodx、pyobfuscate.com、pyobfuscate.com (2026 XOR/lambda)、PyObfuscator (mauricelambert)、Manglify、Oxyry、pyminifier、オンライン難読化ツールファミリ、Xindex、Patchwork、pyc-zipper | AST エバリュエータによる静的ソース/ローダー復元。個々のレイヤおよび残存物が報告される |
| Jawbreaker、ObfuXtreme | 成果物内に存在する本体を復元。実行時に取得されるペイロードは存在しないまま |
| python-obfuscator (PyPI)、pyobfus、Pypacker | 部分的なラッパー剥離および分類 |
PyArmor はラッパーの隣に対応するランタイムファイルを必要とする場合があります。専用の BCC パスは `--allow-bcc` を必要とし、モデル化された本体に対して静的なネイティブリフトと Python スケルトンを出力します。パス認識の自動リカバリも同じ BCC 成果物を公開できます。PyArmor v6/v7 の動的フックのみがサンプルコードを実行し、`--allow-dynamic` の背後でウォッチドッグ付きで動作します。`--allow-bcc` はツリー内の静的解析のみを許可し、サンプルを実行したり外部ツールを呼び出したりしません。[バージョンとモードの詳細](https://github.com/1-3-7/disrobe/blob/main/docs/src/languages/python.md#pyarmor)。
</details>
<details>
<summary><strong>JavaScript、WebAssembly、およびパッケージ化された Web アプリケーション</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` は 3 つすべてを処理 |
| 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 | サポートされたシェルコードローダーレイアウトから埋め込みモジュールを復元 |
| 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 ヘルパーがオリジナル支援カービングまたは保護セクション復元を公開。それらはプログラム全体の devirtualization を確立するものではない |
| PE-Protector、PELock、Enigma Protector、Armadillo、Obsidium、WinLicense | Detect-only |
| DotNetPatcher、NetCryptor | マネージドレイヤを .NET パスに委譲 |
| OLLVM フラット化、bogus control flow、命令置換。Tigress CFF | ネイティブ Rust API によるサポートされた静的難読化解除変換およびレポート。該当する解析はネイティブリカバリレポートに現れる |
| Alcatraz、Emotet CFF、Mirai、Dridex、Trickbot、obfus.h、Cryptify (rust-obfuscator)、guardian-rs、obfusheader.h、obfuscxx、Amice | 名前付きネイティブ難読化シグネチャ。個々の文字列/制御フローヘルパーは、検出された完全なファミリよりも狭い復元範囲を持つ |
ネイティブ解析はまた、Rust/C++ シンボル、C++ RTTI および vtable、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 | 名前復元サイドカーへのマッピングリプレイ。元の名前には `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 は 22 エントリの .NET チェーンカタログを超えたプロテクタ検出器にある |
| Themida (.NET ラッパー)、ILProtector、MaxToCode | ネイティブローダー鍵付き本体に対して detect-only |
| React Native APK、React Native IPA。React Native Hermes バイトコード | JS/Hermes ペイロードを抽出し、サポートされたバイトコードを Hermes リフトにルーティング |
| Flutter Dart カーネル。Flutter AOT スナップショット (`libapp.so`) | カーネルソーステーブル復元。AOT 宣言、メタデータ、および ARM64 逆アセンブル。スナップショットバージョンおよび利用可能な名前が復元を制約 |
| Xamarin / .NET MAUI APK、Apache Cordova APK、Capacitor APK、NativeScript APK | ランタイム識別およびサポートされたパッケージ/メンバー抽出 |
| Android APK (`classes.dex`)、Android app bundle (AAB / APKM / XAPK)、IPA | パッケージ検査および子抽出。下流の復元は埋め込みランタイムに依存 |
SmartAssembly、Spices.Net、Skater、.NET Reactor、Eazfuscator.NET、および CryptoObfuscator の .NET 文字列デコーダは、コミットされたベンダー製アセンブリではなく、モデル化されたアルゴリズムで評価されています。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 復元。MoonSec 形状の VM 証拠は合成ブートストラップを使用 |
| Luraph | Detect-only |
| Luau バイトコード、Garry's Mod Lua (GLua) | 方言認識。Luau リフトおよび部分的な GLua 復元 |
| ionCube、SourceGuardian、Zend Guard | 商用 PHP エンベロープ検出。ローダー常駐鍵は境界として残る。レガシー静的鍵のケースでは部分的な `op_array` 構造が得られる場合がある |
| FOPO、Better PHP Obfuscator | 静的 PHP eval チェーンの剥離。暗号化レイヤにはリテラル鍵が必要 |
| 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 間接参照 (IFS/eval)。node-bash-obfuscate (chunk-table eval) | 静的 Bash 復元 |
| Batch 難読化 (`%random%`)、Batch 難読化 (set 間接参照)。VBA マクロ (p-code 逆コンパイル + stomping) | Batch 剥離および VBA ソース/p-code 復元 |
| YARV InstructionSequence (コンパイル済み `.rb`)、mruby RITE バイトコード | Ruby ソース復元 |
| OCRA 自己解凍実行ファイル、RubyScript2Exe パッケージ | 部分的な freezer 分類/復元 |
| JRuby コンパイル済みクラス、TruffleRuby ネイティブイメージ | Ruby カタログを通じた detect-only |
| BEAM ファイル (Erlang / Elixir コンパイル済みモジュール)、EZ アーカイブ (ZIP ラップされた `.beam` モジュール) | モジュール抽出、ソース/デバッグチャンク復元、または Core Erlang フォールバック |
| garble | Go メタデータおよびサポートされたリテラル。元の名前ハッシュは欠落したシードなしには逆算できない |
| Mach-O Swift / Objective-C メタデータ、Mach-O fat (ユニバーサル) バイナリ、dyld 共有キャッシュ | ランタイムメタデータ、スライスおよび dylib 復元 |
| SwiftShield | マッピングパーサ。元の名前を復元するにはマッピングを提供する必要がある |
| SWF (Flash、FWS/CWS/ZWS) DoABC、raw 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 イメージ、VHD、VHDX、WIM、GPT、MBR、FAT12/16/32 |
| 圧縮ストリーム | XZ、gzip、bzip2、zstd、LZMA、lzip、LZ4、zlib、Unix compress (`.Z`) |
| 埋め込みアプリケーションデータ | Bun standalone、UnityFS、.NET 単一ファイルバンドル |
| ファームウェア | D-Link SHRS、ENCRPTED_IMG、alpha v1、alpha v2、DEAFBEAD、FPKG。EnGenius。Autel ECC。QNAP。Netgear CHK、TRX v1、TRX v2。Xiaomi HDR1、HDR2。Tesla SBFH。HP BDL、IPKG。Moxa FRM。INSTAR BNEG、HD。Airoha。UEFI firmware volume |
| メモリおよび暗号化ボリューム | Windows minidump、LUKS1 |
このロスターはすべてのエントリについて検出を宣言しています。これらのルートのうち、102 は汎用エクストラクタを使用し、<!-- roster-breadth:containers-exercised -->42<!-- /roster-breadth --> はメンバーバイトに到達するコミット済み入力を持ち、DMG は検出のみのコミット済み証拠を持ち、59 はコミット済み入力を持ちません。LUKS1 は平文に対して別途評価され、復号には `aes-cbc-plain` の raw ボリューム鍵が必要です。鍵がない場合は鍵の境界を報告します。個々の圧縮方式、暗号化メンバー、分割ボリューム、およびファイルシステム機能には、より狭い制限があります。StuffIt 5 は現在、フォークデコーダが存在するにもかかわらず、抽出を通じてアーカイブブロブを返します。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` はコンパイル済みレジストリからパスを選択して実行し、その後その出力と抽出された子要素を再識別します。信頼度しきい値、コンテンツハッシュの重複、または深さ制限(デフォルトでは8)で停止します。ターミナルとしてタグ付けされたレポートとソースファイルは、検出にフィードバックされるのではなく、出力のままとなります。以下の表は、フルビルドで登録されるすべてのパスを網羅しています。スリムビルドでは、フィーチャーゲートされた行が省略される場合があります。
| 入力レイヤー | 登録済みパスID | 自動出力 | 専用コントロールまたは前提条件 |
|---|---|---|---|
| アーカイブ、インストーラー、ファームウェア、ボリューム | `binfmt.container` | 抽出された子要素。言語/ネイティブパスへ再帰的に追跡される | メンバーレポート用の `extract` と明示的な LUKS1 raw-key オプション |
| PyInstaller | `pyinstaller.extract` | 埋め込まれたメンバーと `.pyc` 子要素 | アーカイブ固有のオプション用の `pyinstaller extract` |
| Python フリーザー | `pyfreeze.extract`、`nuitka.extract` | 抽出されたペイロードまたはサポートされているコンパイル済みパッケージ構造 | 実験的な `pyfreeze`。Nuitka のフレーバーが何が残るかを決定する |
| 保護された Python | `pyarmor.unpack`、`sourcedefender.decrypt` | 利用可能なプレーンテキスト/バイトコード、メタデータ、またはキー境界レポート | 一致するランタイム/キーマテリアル。専用の 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` はより広範なバンドラーセットを公開する。ソースマップとリネームオプションは直接的なコントロール |
| WebAssembly | `wasm.deob` | 復元またはリフトされた WAT と検出、サマリー、復元サイドカー | `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` | ランタイム/メンバー抽出、Hermes リフト、Dart カーネルソースまたは AOT レポート | 形式固有のコントロールには `hermes`、`flutter`、`mobile` |
| Lua | `lua.deob` | 復元された Lua と方言/忠実度サイドカー | 明示的なファミリーと出力コントロールには `lua` |
| Shell / Office / PDF | `shell.deob` | ピールされたスクリプト、マクロソース/p-code、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 分析、埋め込まれたファイルシステムメンバー | DWARF、BuildInfo、その他の専用レポートには `go` |
| 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シークレットの再現率は同じ8トークンのグラウンドトゥルースを使用します。
同じGhidra 12.1.2分析は、Disrobeがパックされた実行ファイルを再構築されたPEとしてエクスポートした後、異なるコードを見ます。これらのローカルスナップショットは実際の良性パックフィクスチャを使用し、増加と減少の両方を記録します。関数/命令/文字列の列は9入力の分析スナップショットから来ており、完了したCレンダリングは別の6入力のデコンパイラスナップショットから来ています。完了したレンダリングとは非空の出力であり、ソースの正確性の評価ではありません。
kkrunchyのカウントは減少します。より多くの発見された関数は必ずしもより正確な関数ではなく、これらの分析カウントはバイト比較に代わるものではありません。分析スナップショット、デコンパイラスナップショット、および別のネイティブバイト復元測定をお読みください。
証拠インデックスは、復元測定をそのフィクスチャ、比較方法、コマンド、結果にリンクしています。
結果はバイト復元、コンパイラ受け入れ、動作チェックを区別します。コンパイラ受け入れとカバレッジカウントは等価性スコアではありません。
これらのチェックは、元のアーティファクト、コンパイラ、インタプリタ、またはラベル付きコーパスに対してDisrobeを測定します。これらは2つのデコンパイラを比較することとは別です。各リンクされた結果は、入力母集団、前提条件、再現コマンドを記録しています。
完全な証拠記録は、各集団と評価ルールを記述しています。
チャートのラベルは、独立した正しさの参照には strong、コンパイラの受理には recompile-only、Disrobe自身のカバレッジカウンタには coverage-self-reported を使用します。比較方法と集団が各結果の範囲を定義します。
個々の測定値については、結果、ツール比較、再現の前提条件を参照してください。
--backend auto を通じてインストール済みツールを選択できます。バックエンドを選ぶ前に、コマンドのヘルプとインストールガイドを確認してください。
チェーンランナーは、単一目的のパスを共有アーティファクトと中間表現を通じて接続します。各パスは正当化できる出力を提供し、下流のコンシューマは来歴を保持してサポートされない境界を報告します。アーキテクチャ、パスモデル、IRラダー、チェーンランナーを参照してください。
まずドキュメント、クイックスタート、結果ガイドから始めてください。診断を調べるには disrobe explain <code> を使用します。プロジェクトへの変更については、コントリビューションガイドと、該当機能のテストおよび証拠を読んでください。
脅威モデルは、信頼境界と入力処理を記述しています。セキュリティ上の懸念はSECURITY.mdを通じて報告してください。LEGAL.mdはプロジェクトの法的考慮事項を記述しています。アーティファクトを解析する許可は、あなたの状況に依存します。
Disrobeのすべてのバージョンはプロプライエタリかつソース公開であり、Disrobe Source-Available License, Version 1.1の下にあります。これはすべてのバージョンについてElastic License 2.0およびVersion 1.0に取って代わり、再ライセンス通知に記載のとおり、以前のすべての許諾を取り消します。
個人の趣味プロジェクト、個人の学習、個人による無報酬の独立セキュリティ研究、非営利の教育および研究、および真正なジャーナリズムは、ライセンスに定義されるとおり無償です。
企業による、または企業のためのいかなる使用にも有償ライセンスが必要です。 商用ライセンスを参照してください。
必要なクレジット: この作品は、1-3-7が作成したDisrobeを使用しました: https://github.com/1-3-7/disrobe
コントリビューション用フォーク以外のフォーク、再投稿、リブランディング、再販、ホスティング、および競合する開発は禁止されています。本ソフトウェアは現状のまま提供され、ユーザー自身の責任で使用されます。
帰属、コントリビュータ条件、概要、第三者通知を参照してください。
Copyright (c) 2025-2026 1-3-7. All rights reserved.
以前の開発コミットは、ドキュメントとビジュアルの刷新の一環として単一のベースラインに統合されました。
| タスク | コマンド | 出力または次のステップ |
|---|
| インジケーター、シークレット、静的検出結果を探す | scan、frisk、strings、ioc、indicators、behavior | 検出結果とオフセット |
| 関数、フロー、動作を検査する | query、capabilities、taint、vulnmatch | クエリ可能なIR、ATT&CK/MBCマッピング、ソースからシンクへのレポート |
| アノテーションと構造化アーティファクトを保持する | 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 | メタデータサイドカー |
| 復元タスク | 名前付きツール | Disrobeのパス | 選択または組み合わせの方法 |
|---|
| Pythonバイトコードからソースへ | pycdc、PyLingual、uncompyle6、decompyle3 | インプロセスCPython 1.0〜3.15デコンパイラ、ネストされたコードオブジェクトの復元、ソース/逆アセンブリ/AST出力 | 組み込みPythonデコンパイラから復元されたソース、逆アセンブリ、ASTを検査する |
| フリーズされたPythonの抽出 | pyinstxtractor-ng、pydecipher | PyInstaller、Nuitka、フリーザー抽出に続くバイトコード復元 | 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を、JSがパッケージ内にある場合はautoを使用する |
| JSアンバンドルとソースマップ | wakaru、webcrack、sourcemapper | モジュール抽出、ソースマップ処理、スコープ対応リネーム、パッケージ化されたV8検査 | js unbundleは自動チェーンディスパッチよりも多くのバンドラールートを公開する |
| WebAssembly | WABT wasm-decompile、Binaryen | WATおよびC/Rust/TypeScript疑似ソース、JSONサマリー、サポートされる難読化の逆変換 | 選択したソースターゲットを検査する。wasmtime実行チェックは以下で復元された動作を独立に評価する |
| JVMソース | CFR、Vineflower、Procyon、Fernflower | ネイティブクラスファイル復元とプロテクター/文字列処理 | 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はインストール済みレンダラーと並べてDisrobe CIL出力を書き出す。--backend autoはILSpy、dnSpyEx、dnSpy、またはde4dotを選択する |
| ネイティブデコンパイル | Ghidra、IDA、Binary Ninja | インプロセスx86-64 C/RustおよびAArch64/ARM32/MIPS32疑似C、復元されたシンボル/型レポート | --backend ghidraで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スライス、共有キャッシュdylib | 残存するマッピングとサブキャッシュファイルを提供する。リネームで消去された元の名前には外部マップが必要 |
| LuaバイトコードとVM | unluac、luadec、LuaDec51 | Lua/LuaJIT/Luauソースとサポートされる難読化ツールおよびカスタムVM復元 | IronBrew2には実ツール実行差分の証拠がある。通常の.luac復元とVM復元は別の操作である |
| Rubyバイトコード | MRI逆アセンブリ | YARVおよびmrubyソース、オペコード一覧、フリーザー/AOT分類 | MRI再コンパイルはオペコード名の再現率を評価する。その測定は実行等価性を確立しない |
| PHPレイヤー | php-malware-finder | Evalチェーンとリテラルキーのループ/暗号剥離、Phar抽出、エンコーダーエンベロープレポート | 静的レイヤーと利用可能な鍵素材を使用する。ネイティブローダーを鍵とする商用ペイロードは封印されたままである |
| PowerShell、Bash、VBA | PowerDecode、FLAREツール、olevba | シェル難読化解除、VBAソース/pコードとスタンピング、XLM数式、PDFアクション | shellはスクリプト復元とドキュメント検出結果を他のアーティファクト分析と並べて配置する |
| BEAM / ActionScript | Erlang beam_disasm、RABCDAsm | BEAMデバッグソース/Core Erlang復元とABCメソッドボディ疑似コード | 利用可能な場合はデバッグチャンクを保持する。ストリップされたBEAMには別の実Erlang実行チェックがある |
| Hermes / React Native | hermes-dec、hbctool、DroidSaw | ランタイム抽出、HBC構造、サポートされる疑似JavaScriptリフト | HBC解析はv60〜v96をカバーする。ソースリフティングにはより狭い測定境界がある。HermesからDEXへのブリッジテイントは実装されていない |
| Flutter / Dart AOT | reFlutter、Darter、blutter | Kernelソーステーブル、AOT宣言グラフ、ARM64ボディ、文字列、リネームマップ解析 | KernelソースとAOTメタデータは異なる復元レベルである。スナップショットバージョンがAOT解析を制約する |
| コンテナとファームウェア | binwalk、unblob、7-Zip | 登録されたフォーマット抽出、再帰的な子ルーティング、ファームウェアデコード/カービング、メンバーごとの拒否レポート | 抽出されたメンバーを直接言語パスに投入する。認識されたマジックを抽出成功と見なさず、メンバーバイトを比較する |
| シークレットとインジケーター | APKLeaks、TruffleHog、Gitleaks、LinkFinder | 復元ツリー/APKの検出結果、トークンオフセット、静的文字列、シークレットとIOCレポート | APKまたは復元ツリーをスキャンする。APKLeaksを以下で同じ植え付けられたシークレットと比較する |
| フォーマット、パッカー、コンパイラの識別 | Detect It Easy、TrID、PEiD、binwalk | マルチシグナル識別、シンボル、署名、ルーティングヒント | identify/detectを使用して復元パスを選択し、その実際の出力を検査する |
| ケイパビリティとテイント | capa、Ghidraスクリプト、Joern | オフセット付きATT&CK/MBC検出結果、正規化IRクエリ、ソースからシンクへのフローレポート | 復元されたアーティファクトに対してケイパビリティマッチングとソースからシンクへの分析を実行する。テイントレポートにはそのJulietテスト母集団が含まれる |
| ツールと入力 | Disrobeの結果 | 名前付きツールの結果 | 測定がチェックする内容 |
|---|
| JADX 1.5.5 · Android DEX | 157 / 228 出力領域がクリーンにコンパイル | 281 / 303 出力領域がクリーンにコンパイル | コミットされたEdgeCases DEX。実際のjavac、完全ソースコンパイルに続く帰属を妨げる領域の境界付き分離。異なる出力母集団 |
| CFR 0.152 · JVMクラスファイル | 181 / 181 出力領域がクリーンにコンパイル | 152 / 166 出力領域がクリーンにコンパイル | コミットされたEdgeCases JAR。同じコンパイラ/スコアラー手順。異なる出力母集団 |
| APKLeaks 2.6.3 · 植え付けられたシークレットAPK | 8 / 8 植え付けられたシークレット | 5 / 8 植え付けられたシークレット | 同じAPKでの正確なトークン再現率。Disrobeは植え付けられたAWSシークレットアクセスキー、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クラスファイル | 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 コードオブジェクト | 正規化されたオペコード構造比較によるCPython再コンパイル。ジャンプターゲット、ほとんどのオペランド、追加で復元されたオブジェクトは評価されない。結果 |
| Python 3.14.5、固定コア母集団 | 17396 / 18276 コードオブジェクト、ローカル測定 | 574 モジュールにわたる同じ正規化比較。これは意味的等価性の結果ではない。結果 |
| レガシーPython 1.0〜3.7 | 少なくとも150 / 191 フィクスチャ(回帰フロア) | 当時のインタプリタによる再コンパイル、または元のソースに対する構造トークン。結果 |
| Pickle分類 | 102 / 102 分類フィクスチャ | pickletoolsセマンティクス。結果 |
| Pickle再構築 | 470 / 470 再構築されたフィクスチャが再実行等価性チェックに合格 | CPython再実行。結果 |
| JVMソースコンパイル | 131 / 131 メソッドがコンパイル | 実際のjavac。結果 |
| JVM動作 | 117 / 131 メソッドが観測された実行と一致 | 実際のJVM。8つのメソッドが分岐し、6つは単独で駆動されない。結果 |
| 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 | 19 / 19 モジュール | Erlang/OTP 27.3.4再コンパイル、エクスポート比較、test/0出力/終了ステータス。結果 |
| Lua IronBrew2 | 実際の2.7.0 standardおよびMAX出力が一致する実行に復元 | 元のプログラムに対する実際のLuaインタプリタ。1つのVMファミリー。結果 |
| Ruby YARV | Greeter 100%、megafile 98.67% オペコード名再現率 | MRI再コンパイル。マルチセット再現率は順序、オペランド、分岐ターゲット、追加命令を無視する。結果 |
| Goストリップされた型名 | 838 / 838 名前 | 比較ビルドからの実際のgo1.26.3メタデータ。結果 |
| Hermes HBC v96 | 8 / 8 関数、フォールバック操作ゼロ | 元のソースと関数名を持つ実際のhermescサンプル。結果 |
| ネイティブパックバイト | UPX、FSG、NSPack、Petite、MPRESSの.textが名前付きコミットペアでバイト一致。Yoda's Crypterリソースがバイト一致 | RVA整列された元のバイト。イメージ全体とリソースの残差は別途報告される。入力ごとの表 |
| 植え付けられたインジケーター | 6 / 6 IOCカテゴリが表現 | コミットされたエンドポイント、マニフェスト検出結果、URL、IPv4、email、.onionグラウンドトゥルース。結果 |
| MCPコールグラフ | 5 / 5 直接エッジ、すべて正しく識別 | ストリップされたELFをその別個のストリップされていないツールチェーンツインと比較。精度、再現率 |
| ネイティブテイント | 93 / 190 ラベル付きフローを再現。偽陽性ゼロ、ローカル測定 | NIST Juliet CWE-78 char/systemスライス、gcc 16.2.0 -O2。7つの宣言されたフローカテゴリにはこのスライスにケースがない。結果 |