deobf-all について
リバースエンジニアリングやマルウェア分析向けの難読化解除スキル集です。対象と保護方式を先に分類し、全項目を読み込まずに関連するサブスキルへ振り分けます。
主な機能
- 01対象形式と難読化方式の判定
- 02必要なサブスキルのみ段階的に読み込み
- 03ネイティブバイナリと JavaScript の分析
- 04Android、Java、PowerShell の手順
- 05静的解析を優先し結果を検証
活用シーン
- 01保護されたネイティブプログラムの分析
- 02難読化 JavaScript や悪意あるスクリプトの解析
- 03Android APK の分析手順の選択
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ zeij-drive/ deobf --skill deobf-allインストール後、Claude Code で/deobf-allを入力して読み込まれたか確認します。
詳細
Deobf-All — 統合型難読化解除ディスパッチャー
あらゆる難読化または保護されたコードに遭遇した場合、このスキルはまず対象をトリアージし、その後、関連するサブスキルのみを読み込みます。26 個すべてを一度に読み込むことはありません。これにより、ツール呼び出しとコンテキストの使用量を最小限に抑えます。
0. 実行契約(最初に読む)
DO NOT read_skill all 26 sub-skills blindly.
Instead: triage → load P0 → route → load P1/P2 only if needed.
| フェーズ | アクション | ツール呼び出し |
|---|---|---|
| トリアージ | 対象ファイルを調査し、種類を特定します | 0–1(read_file / file コマンド) |
| P0 の読み込み | コアスキル 1~2 個に対して read_skill を実行します | 1–2 |
| ルーティング | P1/P2 が必要かどうかを判断します | 0 |
| P1/P2 の読み込み | ルートで必要とされるスキルに対してのみ read_skill を実行します | 0–3 |
目標:対象が本当に不明な場合を除き、1 回の呼び出しで read_skill を 5 回以上実行しないでください。
1. サブスキル一覧
| # | スキル | 目的 | レイヤー |
|---|---|---|---|
| 1 | code-obfuscation-deobfuscation | ネイティブバイナリの難読化解除:CFF、オペーク述語、文字列暗号化、インポートの隠蔽、逆アセンブル対策 | P0 |
| 2 | ast-deobfuscation | JavaScript AST の難読化解除:パターン検出、パイプライン、サイト固有アダプター | P0(JS のみ) |
| 3 | vm-and-bytecode-reverse | VM プロテクター(VMProtect/Themida)、カスタム VM ディスパッチャー、オペコードの対応付け | P1 |
| 4 | anti-debugging-techniques | デバッグ対策の検出と回避(ptrace、PEB、タイミング、TLS、VEH) | P1 |
| 5 | symbolic-execution-tools | angr/Z3/Triton:自動制約解決、エミュレーションによるアンパック | P1 |
| 6 | binary-protection-bypass | ASLR/NX/PIE/Canary/RELRO の回避 | P2 |
| 7 | ctf-reverse | CTF のリバースエンジニアリング手法 | P2 |
| 8 | anti-reversing-techniques | リバースエンジニアリング対策の特定と回避 | P2 |
| 9 | deep-analysis | 詳細なリバースエンジニアリングのトリアージ(包括的な分析) | P2 |
| 10 | java-decompile | Java バイトコードの逆コンパイル:CFR/Procyon/Fernflower | P2 |
| 11 | jadx | Android APK の逆コンパイル:DEX → Java ソース | P2 |
| 12 | apktool | APK の展開、smali の逆アセンブル、リソースの抽出 | P3 |
| 13 | reverse-engineering-android-malware-with-jadx | JADX を使用した Android マルウェアのリバースエンジニアリングのワークフロー | P3 |
| 14 | firebase-apk-scanner | Firebase APK の設定セキュリティスキャン | P3 |
| 15 | deobf-string | パターン分析と自動復号による難読化文字列の復号・復元 | P3 |
| 16 | deobf-indirect | シンボリック実行と BFS による間接分岐(CSEL+BR)の難読化解除 | P3 |
| 17 | llvm-obfuscation | LLVM ベースの難読化:OLLVM、CFF、文字列暗号化、偽の制御フロー | P3 |
| 18 | binary-lifting | 分析、逆コンパイル、再コンパイルのためのマシンコード → LLVM IR リフティング | P3 |
| 19 | deobfuscating-javascript-malware | JS マルウェアの難読化解除:ウェブ攻撃、フィッシングページ、ドロッパースクリプト | P3 |
| 20 | deobfuscating-powershell-obfuscated-malware | AST と動的解析による多層 PowerShell 難読化解除 | P3 |
| 21 | binary-analysis-patterns | バイナリ分析:逆アセンブル、逆コンパイル、CFG 分析、コードのパッチ適用 | P3 |
| 22 | yara-rule-authoring | マルウェアの分類と脅威ハンティングのための YARA ルール作成 | P3 |
| 23 | ghidra-headless | Ghidra ヘッドレスアナライザー:自動逆コンパイル、スクリプト分析 | P3 |
| 24 | frida-17 | Frida 17 の JS API 互換性:フック、トレース、動的インストルメンテーション | P3 |
| 25 | reverse-engineering-malware-with-ghidra | Ghidra を使用したマルウェアのリバースエンジニアリングのワークフロー:インポート、文字列、復号、アンパック | P3 |
| 26 | radare2 | radare2 によるリバースエンジニアリング:逆アセンブル、デバッグ、スクリプト作成 | P3 |
2. トリアージ — まず最初に行うこと(read_skill の前)
対象を調査し、次の項目を特定します。
- 対象の種類:ネイティブバイナリ(ELF/PE/Mach-O)/JavaScript/バイトコード(DotNet/Java/Python)/Android APK/その他
- 難読化の種類(特定できる場合):CFF、VM 保護、文字列暗号化、パッキング、JS 難読化(obfuscator.io、JSFuck など)
- アンチデバッグ/アンチリバースのレイヤーの有無
- コンテキスト:CTF チャレンジ? 本番環境の解析? 手早いクリーンアップ?
出力:次のようなトリアージ行を出力します。TRIAGE: native PE, VMProtect, has anti-debug → P0:code-obfuscation-deobfuscation P1:vm-and-bytecode-reverse,anti-debugging-techniques
3. ルーティングマトリクス — 必要なものだけを読み込む
トリアージに基づき、✓ が付いたスキルについてのみ read_skill を実行します。
3a. コアルーティング — P0 / P1 / P2
| 対象 | P0 core-deobf | P0 ast-deobf | P1 vm-reverse | P1 anti-debug | P1 symbolic | P2 bin-bypass | P2 ctf-rev | P2 anti-rev | P2 deep | P2 java-decompile | P2 jadx |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ネイティブバイナリ、一般 | ✓ | ||||||||||
| ネイティブ + VM 保護 | ✓ | ✓ | |||||||||
| ネイティブ + VM + アンチデバッグ | ✓ | ✓ | ✓ | ||||||||
| ネイティブ + CFF(OLLVM) | ✓ | ✓ | |||||||||
| ネイティブ + パッキング + アンチリバース | ✓ | ✓ | ✓ | ||||||||
| JavaScript(すべて) | ✓ | ||||||||||
| JavaScript + 強力な難読化 | ✓ | ✓ | |||||||||
| JavaScript マルウェア/フィッシング | ✓ | ✓ | |||||||||
| DotNet/Java/Python バイトコード | ✓ | ✓ | ✓ | ||||||||
| Java バイトコード(JAR/class) | ✓ | ||||||||||
| Android APK | ✓ | ||||||||||
| Android マルウェア解析 | ✓ | ✓ | |||||||||
| PowerShell 難読化 | |||||||||||
| CTF リバースチャレンジ | ✓ | ✓ | ✓ | ||||||||
| 不明/不明瞭 | ✓ |
ルール:セルが空の場合、そのスキルを読み込まないでください。これにより、ツール呼び出しを最小限に抑えられます。
3b. P3 ツール選択 — 詳細な解析で必要になった場合に読み込む
コアマトリクスに従って P0〜P2 を読み込んだ後、難読化解除で特定のボトルネックが発生した場合は、該当する P3 ツールを読み込みます。
| シナリオ | 読み込む P3 スキル |
|---|---|
| 文字列暗号化を検出(実行時の復号ループ、.rdata 内のエンコードされた文字列) | deobf-string |
| 間接分岐(CSEL/BR パターン)が CFG の復元を妨げている | deobf-indirect |
| LLVM で難読化されたバイナリ(OLLVM、偽の CF、CFF) | llvm-obfuscation |
| 再コンパイルや高度な解析のためにバイナリを LLVM IR に変換する必要がある | binary-lifting |
| JavaScript マルウェア(フィッシング、ドロッパー、ウェブ攻撃) | deobfuscating-javascript-malware |
| 多層 PowerShell ペイロード | deobfuscating-powershell-obfuscated-malware |
| 逆アセンブル/CFG/コードパッチ解析が必要 | binary-analysis-patterns |
| 解析後のシグネチャ生成(脅威ハンティング、分類) | yara-rule-authoring |
| Ghidra のヘッドレス逆コンパイルを大規模に自動化する | ghidra-headless |
| 動的インストルメンテーション/実行時フックが必要 | frida-17 |
| Ghidra を使ったマルウェア解析ワークフロー(インポート、復号、アンパック) | reverse-engineering-malware-with-ghidra |
| radare2 での逆アセンブル、デバッグ、またはスクリプト作成が望ましい | radare2 |
ルール:一度に読み込む P3 スキルは 1 つだけとし、P0〜P2 のワークフローで、P3 ツールが解決できる特定のボトルネックが発生した場合にのみ読み込みます。
4. ワークフロー
ステップ 1:トリアージ(ツール呼び出し 0〜1 回)
対象を調査します。ソースコードには read_file を、バイナリには file/DIE/PEiD の出力を使用します。トリアージ行を出力します。
ステップ 2:P0 を読み込む(ツール呼び出し 1〜2 回)
ルートで必要とされる P0 スキルについて read_skill を実行します。ネイティブバイナリの場合は code-obfuscation-deobfuscation、JavaScript の場合は ast-deobfuscation です。
ステップ 3:ルートに該当する場合のみ P1/P2 を読み込む(ツール呼び出し 0〜3 回)
ルーティングマトリクスで対象の種類に ✓ が付いている P1/P2 スキルについてのみ read_skill を実行します。
Step 4: 難読化を解除する
- まずは静的解析:パターンマッチング、CFF の削減、文字列の復号、ディスパッチャーのインライン化
- 行き詰まった場合は動的解析:デバッガースクリプト、エミュレーション、シンボリック実行
- JS の場合:まず ast-deobfuscation の
scripts/detect-patterns.jsを実行し、その後、該当するパイプラインを適用します - JS マルウェア/フィッシングの場合:Web 固有の難読化解除パターンには
deobfuscating-javascript-malware(P3) を読み込みます - PowerShell の場合:階層化された AST/動的解析には
deobfuscating-powershell-obfuscated-malware(P3) を読み込みます - ネイティブコードの場合:戦略を選ぶ前に、保護ツール(VMProtect/Themida/OLLVM/custom)を特定します
- 文字列暗号化されたネイティブコードの場合:実行時の復号ループを自動復号するには
deobf-string(P3) を読み込みます - 間接分岐が難読化されたネイティブコード(CSEL+BR)の場合:CFG の復元には
deobf-indirect(P3) を読み込みます - LLVM で難読化されたターゲットの場合:OLLVM/CFF/偽の制御フローを削減するには
llvm-obfuscation(P3) を読み込みます - バイナリリフティング/再コンパイルの場合:マシンコードを LLVM IR に変換するには
binary-lifting(P3) を読み込みます - 逆アセンブル/CFG/コードパッチの場合:一般的な解析支援として
binary-analysis-patterns(P3) を読み込みます - 解析後に YARA シグネチャを作成する場合:
yara-rule-authoring(P3) を読み込みます - Ghidra の自動ヘッドレス解析の場合:
ghidra-headless(P3) を読み込みます - Ghidra でマルウェアを解析するワークフローの場合:
reverse-engineering-malware-with-ghidra(P3) を読み込みます - 動的計装/実行時フックの場合:
frida-17(P3) を読み込みます - radare2 で逆アセンブル/デバッグ/スクリプトを行う場合:
radare2(P3) を読み込みます - Java バイトコードの場合:
java-decompile(CFR/Procyon/Fernflower) で逆コンパイルします - 文字列が難読化された Java バイトコードの場合:
deobf-string(P3) も読み込みます - Android APK の場合:
apktoolで展開し、その後jadxで DEX を逆コンパイルします - Android マルウェアの場合:
reverse-engineering-android-malware-with-jadxも読み込み、必要に応じてfirebase-apk-scannerで Firebase 設定をスキャンします
Step 5: 検証する
- 難読化解除後の出力を元の症状と比較します
- 機能的に同等であることを確認します
- 残存する/入れ子になった難読化レイヤーがないか確認します
5. フォールバック — トリアージで判断できない場合
検査後もターゲットの種類を特定できない場合:
deep-analysis(P2) に対してread_skillを実行します- deep-analysis の手法に従ってターゲットを分類します
- 分類結果をもとにルーティングマトリックスに戻ります
- 適切な P0/P1 スキルを読み込みます
P0 より前に P2 スキルを読み込むのは、この場合に限ります。
6. クイックリファレンスチェックリスト
ネイティブバイナリ
- トリアージ:保護ツール/パッカーを特定する(file、DIE、PEiD)
- P0 を読み込む:
code-obfuscation-deobfuscation - アンチデバッグがあるか? →
anti-debugging-techniquesを読み込む - VM で保護されているか? →
vm-and-bytecode-reverseを読み込む - CFF で行き詰まったか? →
symbolic-execution-toolsを読み込む - パック/保護されているか? →
binary-protection-bypassを読み込む - アンチリバーシングがあるか? →
anti-reversing-techniquesを読み込む - 文字列暗号化があるか? →
deobf-stringを読み込む - 間接分岐の難読化があるか? →
deobf-indirectを読み込む - LLVM で難読化されている(OLLVM)か? →
llvm-obfuscationを読み込む - バイナリリフティング/再コンパイルが必要か? →
binary-liftingを読み込む - 逆アセンブル/CFG/パッチが必要か? →
binary-analysis-patternsを読み込む - 動的計装/フックが必要か? →
frida-17を読み込む - Ghidra のヘッドレス解析を大規模に行うか? →
ghidra-headlessを読み込む - Ghidra でのマルウェア解析ワークフローが必要か? →
reverse-engineering-malware-with-ghidraを読み込む - radare2 を使うか? →
radare2を読み込む - 解析後に YARA シグネチャが必要か? →
yara-rule-authoringを読み込む - 難読化を解除する → 検証する
JavaScript
- トリアージ:難読化ツールを特定します(obfuscator.io、JSFuck、カスタム)
- P0 を読み込みます:
ast-deobfuscation -
scripts/detect-patterns.jsを実行してサイト/フレームワークを特定します - 該当するパイプラインを適用します(CFF の削減、文字列の復号、ディスパッチャーのインライン化)
- 高度な難読化が施されていますか? →
code-obfuscation-deobfuscationも読み込みます - JavaScript マルウェア/フィッシング/ドロッパーですか? →
deobfuscating-javascript-malwareを読み込みます - PowerShell のペイロードが混在していますか? →
deobfuscating-powershell-obfuscated-malwareを読み込みます - 各段階の後に再解析し、検証します
CTF
- P2 を読み込みます:
ctf-reverse+deep-analysis - チャレンジの種類を特定します(VM、パッキング、暗号、カスタム)
- ルーティングマトリックスに従って P0/P1 を読み込みます
- チャレンジで文字列が暗号化されていますか? →
deobf-stringを読み込みます - VM ベースのチャレンジですか? →
deobf-indirectも検討します - OLLVM/CFF のチャレンジですか? →
llvm-obfuscationも検討します - 動的解析が必要ですか? →
frida-17またはradare2を読み込みます - 解決し、フラグを検証します
Java / Android
- トリアージ:JAR/class ファイルですか? Android APK ですか?
- Java バイトコード → P2 を読み込みます:
java-decompile - Android APK → P2 を読み込みます:
jadx(必要に応じて展開用にapktoolも読み込みます) - Android マルウェア解析 →
reverse-engineering-android-malware-with-jadxも読み込みます - Firebase 設定のスキャン → P3 を読み込みます:
firebase-apk-scanner - 文字列が難読化されていますか? →
deobf-stringも読み込みます - 動的インストルメンテーションが必要ですか? →
frida-17を読み込みます - 逆コンパイルし、解析して、検証します
PowerShell / JS マルウェア
- トリアージ:難読化レイヤーを特定します(base64、XOR、圧縮、eval チェーン)
- PowerShell → P3 を読み込みます:
deobfuscating-powershell-obfuscated-malware - JavaScript マルウェア → P0 を読み込みます:
ast-deobfuscation+deobfuscating-javascript-malwareも読み込みます - レイヤーごとに難読化を解除します(Unicode → デコード → AST のクリーンアップ)
- 解析後に YARA シグネチャが必要ですか? →
yara-rule-authoringを読み込みます - 動作の同等性を検証します
汎用 P3 ツール — ボトルネックが発生したら読み込む
- 文字列が暗号化されていますか? →
deobf-string - 間接分岐/CFG が妨げになっていますか? →
deobf-indirect - LLVM の難読化ですか? →
llvm-obfuscation - バイナリリフティングが必要ですか? →
binary-lifting - 一般的なバイナリ解析ですか? →
binary-analysis-patterns - Ghidra の自動化ですか? →
ghidra-headless - Ghidra を使ったマルウェア解析ワークフローですか? →
reverse-engineering-malware-with-ghidra - ライブフック/トレースですか? →
frida-17 - radare2 のスクリプト作成ですか? →
radare2 - YARA シグネチャですか? →
yara-rule-authoring