reverse-engineering について
Reverse Engineeringは、コンパイル済みバイナリやファームウェア、未知のプロトコルを調査するセキュリティ分析向けスキルです。トリアージ、静的・動的解析、難読化解除、パッチ差分分析の手順を、スクリプトや詳細資料とともに扱います。
主な機能
- 01バイナリのトリアージと逆コンパイル
- 02動的デバッグと計装
- 03アンチデバッグ・アンチVM解析
- 04難読化解除とアンパック
- 05ファームウェアとUEFIの解析
- 06パッチ差分分析とプロトコル推定
活用シーン
- 01未知のバイナリの調査
- 02保護・難読化されたサンプルの分析
- 03ファームウェアとUEFIイメージの調査
- 04パッチから脆弱性の原因を追跡
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hypnguyen1209/ offensive-claude --skill reverse-engineeringインストール後、Claude Code で/reverse-engineeringを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/anti-reversing-bypass.mdcoverage-reachability.mddeobfuscation.mddynamic-instrumentation.mdfirmware-uefi.mdpatch-diffing-protocol.mdrr-time-travel.mdstatic-triage-decompilation.mdscripts/antidebug_unhook.pycve_diff.pydeflatten_triton.pyfrida_universal.jspatchdiff_fetch.pyproto_infer.pyrr_root_cause.shstring_decrypt_emu.pytriage.pyuefi_triage.pyscripts/ghidra/DecompileToC.java詳細
リバースエンジニアリング
有効化するタイミング
- 脆弱性や機能を調査するため、不明なコンパイル済みバイナリ(ELF/PE/Mach-O)や、シンボルが削除されたサンプル、難読化されたサンプルをトリアージする場合。
- プロプライエタリなコードを逆コンパイルし、構造や型を復元する場合(Ghidra/Binary Ninja での AI/MCP 支援を含みます)。
- 保護されたバイナリ(VMProtect 3.x、Themida、OLLVM の制御フロー平坦化)をアンパックして、仮想化を解除する場合。
- 動的解析を進めるために、アンチデバッグ/アンチ VM/アンチ Frida を無効化する場合。
- ファームウェアの抽出や UEFI/BIOS のリバースエンジニアリング、Secure Boot バイパスの調査、OS 起動前に常駐するインプラントの解析を行う場合。
- Patch Tuesday/CVE の修正をパッチ差分解析し、根本原因を特定して n-day のトリガーを作成する場合。
- ファジングや解析のために、不明なワイヤープロトコルやプロプライエタリなファイル形式をリバースエンジニアリングする場合。
テクニック一覧
| テクニック | ATT&CK | CWE | リファレンス | スクリプト |
|---|---|---|---|---|
| バイナリのトリアージ(形式/アーキテクチャ/緩和策/文字列/インポート) | T1592.002, T1518.001 | CWE-1395 | references/static-triage-decompilation.md | scripts/triage.py |
| ヘッドレス逆コンパイル(Ghidra 11.4 / r2 / IDA) | T1592.002 | CWE-noinfo | references/static-triage-decompilation.md | scripts/triage.py |
| AI/MCP 支援によるリバースエンジニアリング(Sidekick / GhidrAssistMCP / LLM4Decompile) | T1592.002 | CWE-noinfo | references/static-triage-decompilation.md | - |
| 動的デバッグ(GDB/GEF、x64dbg、条件付きブレークポイント) | T1622 | CWE-noinfo | references/dynamic-instrumentation.md | - |
| Frida 17 によるインストルメンテーションと SSL ピンニング/JNI フック | T1622, T1562.001 | CWE-noinfo | references/dynamic-instrumentation.md | scripts/frida_universal.js |
| シンボリック/コンコリック実行(angr、Triton) | T1480.001 | CWE-noinfo | references/dynamic-instrumentation.md | scripts/deflatten_triton.py |
| アンチデバッグの検出と回避(PEB/ptrace/HW-bp/タイミング) | T1622, T1497.001 | CWE-noinfo | references/anti-reversing-bypass.md | scripts/antidebug_unhook.py |
| アンチ VM/サンドボックス回避の無効化 | T1497, T1497.003 | CWE-noinfo | references/anti-reversing-bypass.md | scripts/antidebug_unhook.py |
| パッカーのアンパック → OEP ダンプ(UPX/ランタイムパッカー) | T1027.002, T1620 | CWE-noinfo | references/anti-reversing-bypass.md | scripts/antidebug_unhook.py |
| 文字列/API ハッシュの難読化解除(Unicorn エミュレーション) | T1027.013, T1140, T1027.007 | CWE-noinfo | references/deobfuscation.md | scripts/string_decrypt_emu.py |
| OLLVM の制御フロー平坦化の解除 | T1027.009, T1027 | CWE-noinfo | references/deobfuscation.md | scripts/deflatten_triton.py |
| VM プロテクターの仮想化解除(VMProtect 3.x / Themida) | T1027.009 | CWE-noinfo | references/deobfuscation.md | scripts/deflatten_triton.py |
| ファームウェアの抽出(binwalk/squashfs/QEMU エミュレーション) | T1542.001 | CWE-1263 | references/firmware-uefi.md | scripts/uefi_triage.py |
| UEFI/BIOS のリバースエンジニアリングと Secure Boot バイパスの調査 | T1542.001, T1542.003 | CWE-347 | references/firmware-uefi.md | scripts/uefi_triage.py |
| パッチ差分解析 → n-day の根本原因(BinDiff/Diaphora/ghidriff) | T1203, T1592.002 | CWE-noinfo | references/patch-diffing-protocol.md | scripts/patchdiff_fetch.py |
| プロトコル/ファイル形式の推定(Netzob/Kaitai) | T1592.002 | CWE-noinfo | references/patch-diffing-protocol.md | scripts/proto_infer.py |
クイックスタート
# 0. Triage: format, arch, mitigations, packer entropy, strings, imports, capabilities → JSON
python3 scripts/triage.py ./sample -o out/triage.json
# 1. Headless decompile to C (Ghidra 11.4 analyzeHeadless wrapper inside triage.py --decompile)
python3 scripts/triage.py ./sample --decompile --ghidra "$GHIDRA_HOME" -o out/
# 2. If packed/protected → defeat anti-debug, dump OEP (run under x64dbg+ScyllaHide on Windows)
python3 scripts/antidebug_unhook.py --scan ./sample # enumerate anti-debug primitives first
# 3. Dynamic: attach Frida (Android/Linux/Win), universal SSL-unpin + native trace
frida -U -f com.target.app -l scripts/frida_universal.js --no-pause
# 4. Deobfuscate: emulate string decryptor over all xrefs; de-flatten OLLVM with Triton
python3 scripts/string_decrypt_emu.py ./sample --func 0x401500 --auto-xref -o out/strings.txt
python3 scripts/deflatten_triton.py ./sample --func 0x401abc -o out/cfg.dot
# 5. Firmware: carve + identify + map UEFI DXE/PEI attack surface, scan for PKfail/known hashes
python3 scripts/uefi_triage.py firmware.bin -o out/fw/
# 6. n-day: fetch pre/post-patch Windows binary from winbindex and diff
python3 scripts/patchdiff_fetch.py --pe afd.sys --kb-after KB5050000 -o out/diff/
# 7. Unknown protocol: infer fields/state machine from a pcap, emit Kaitai + Wireshark dissector
python3 scripts/proto_infer.py capture.pcap --port 4444 -o out/proto/
OPSEC と検知(概要)
| 手法 | テレメトリ/IOC | 検知(Sigma/EDR) | OPSEC に関する注意 |
|---|---|---|---|
| 静的トリアージ/逆コンパイル | なし(アナリスト用端末でオフライン実行) | 該当なし — ラボ内で実行 | コピーを分離され、スナップショットを取得した VM で解析してください。対象上では絶対に実行しないでください |
| Frida/動的フック | /proc/self/maps 内の frida-agent.so、ポート 27042、gum-js-loop/gmain スレッド、対象への ptrace | アプリ側の RASP(Talsec/DeepID)、Frida 文字列スキャン、EDR のユーザーランドフック用トリップワイヤー | エージェントの名前を変更し、gadget と -l スクリプトモードを使用するか、ポートチェックを回避するため gadget を APK に埋め込みます |
| アンチデバッグの回避 | 設定されたデバッグレジスター DR0-7、反転する PEB.BeingDebugged、フックされた Nt* プロローグ | 自己整合性チェック、KiUserExceptionDispatcher チェック、TitanHide とマルウェア間のいたちごっこ | 保護が強化されたパッカーにはカーネル版の TitanHide/HyperHide を優先してください。実行のたびにスナップショットを取得してください |
| パッカー/OEP のダンプ | 新しい RWX 領域、IAT の再構築、ディスク上に書き込まれた dump.exe | EDR の RWX 割り当て+末尾ジャンプのヒューリスティック(ラボ内のみ) | すべてラボ内で行ってください。ダンプしたサンプルは解析用であり、再展開用ではありません |
| 文字列/API ハッシュの復号(Unicorn) | 対象上にはなし(オフラインエミュレーション) | 該当なし | 完全にオフラインで安全です — サンプルがネットワーク/ファイルシステムのコードを実行することはありません |
| ファームウェア/SPI フラッシュのダンプ | ハードウェア:SPI 用チップクリップ。ソフトウェア:chipsec/flashrom による読み取り | Boot Guard/メジャードブート(TPM PCR)、Binarly/CHIPSEC 検証ツール | 物理的なアクセスまたは許可を得た場合に限ります。改変したイメージを書き戻すと破壊的で、痕跡も明らかに残ります |
| セキュアブート回避の調査 | ESP 内の新しい未署名ブートローダー、MokList/dbx の異常、予期しない bootmgfw ハッシュ | メジャードブート PCR[0/2/4/7] の変動、dbx の失効チェック、ESET/Binarly スキャナー | ラボ VM/使い捨てハードウェアを使用してください。記録を残し、実際のインプラントを永続化しないでください |
| パッチ差分の分析 | 対象上にはなし(公開バイナリーを取得) | 該当なし | Microsoft/ディストリビューションの公開バイナリーを使用してください。n-day PoC は開示/ROE までラボ内に留めてください |
| プロトコルの推定 | キャプチャまたは作成したパケットをサービスに再送 | 不正形式/再送フレームに対する IDS、レートの異常 | 能動的なプローブは速度を抑えてください。稼働中の対象が調査範囲に含まれる場合は、パッシブな pcap を優先してください |
詳細な解説
- references/static-triage-decompilation.md — ファイル/アーキテクチャ/緩和策のトリアージ、エントロピーとパッカーの識別、機能検出(capa)、Ghidra 11.4
analyzeHeadless+ PyGhidra、r2/rizin と IDA のデコンパイル手順、そして検証を重視する 2025 年の AI/MCP 支援レイヤー(Binary Ninja Sidekick、GhidrAssistMCP、LLM4Decompile / SK²Decompile)。 - references/dynamic-instrumentation.md — GDB/GEF と x64dbg のワークフロー、条件付きブレークポイント/コマンドブレークポイント、Frida 17 の内部機構(Interceptor/Stalker/Java)、汎用 SSL ピンニング解除 + JNI トレース、ならびにパス/値の復元に向けた後方スライシングを用いる angr/Triton のシンボリック実行 + コンコリック実行。
- references/anti-reversing-bypass.md — アンチデバッグの分類(PEB フラグ、NtSetInformationThread/ThreadHideFromDebugger、DR0-7 / GetThreadContext、KiUserExceptionDispatcher、NtClose、INT 2D、rdtsc のタイミング計測、Linux ptrace/TracerPid)、アンチ VM/al-khaser、ScyllaHide/TitanHide、ランタイムパッカーの OEP ダンプ。
- references/deobfuscation.md — Unicorn エミュレーションによる文字列と API ハッシュの復号、OLLVM の制御フロー平坦化解除(ディスパッチャーの復元、LummaC2 に倣った Triton の後方スライシング)、MBA の簡略化、ならびに VMProtect 3.x / Themida 向け VM プロテクターの仮想化解除(NoVmp/VTIL、Titan、Triton リフティング)。
- references/firmware-uefi.md — binwalk/unblob による切り出し、squashfs/JFFS2 の抽出、QEMU+afl によるエミュレーション、UEFI ボリューム/DXE/PEI の解析(UEFITool/chipsec)、SMM コールアウトと NVRAM 変数の攻撃対象領域、ならびに検証済みの 2024-2025 年の連鎖を用いた Secure Boot バイパスの調査:LogoFAIL(CVE-2023-40238)、PKfail(CVE-2024-8105)、CVE-2024-7344、BlackLotus/Bootkitty の背景。
- references/patch-diffing-protocol.md — winbindex によるバイナリ取得、MSU/CAB の抽出、BinDiff/Diaphora/ghidriff による関数レベルの差分解析、幻覚に関する注意点を踏まえた LLM 支援トリアージ(PatchWatch/DiffRays)、2025 年後半のカーネル対象(cldflt.sys、win32k、CLFS)、さらにネットワーク/ファイル形式プロトコルのリバースエンジニアリング(Netzob、Kaitai Struct、BinPRE 方式のフィールド推定)。
- references/rr-time-travel.md — 決定論的な記録/再生による根本原因の特定:rr record/replay、reverse-continue/stepi + ハードウェアウォッチポイントによる破損を引き起こした書き込みの特定、スコープを限定したワークスペース内で監査可能なトレースを作成します。
trace_proofアーティファクトを出力します。scripts/rr_root_cause.shを使用します(rr がない環境では適切に機能を縮退します)。.devcontainer/で実行します。 - references/coverage-reachability.md — 脆弱な行/関数が実際に実行されたことを証明します:gcov による行ヒット(
--coverageを付けてビルドし、証拠となる入力を実行して、その行が#####ではないことを確認)と、-finstrument-functions/rr/uftrace による関数トレース。ネイティブバグを[CONFIRMED]とする前に、validate_findings.pyがcoverage_proof/trace_proofを必須とします。 - references/patch-diffing-protocol.md は
scripts/cve_diff.pyの入力元です。複数ソースから正規の修正コミットを検出(OSV/NVD/GitHub Advisories)し、(repo, sha) で重複を排除し、OSV GIT-range のfixedイベントを処理した後、スコープで制限しgit_safeで強化したクローンを作成し、git diff fix^..fixを実行します。BinDiff/ghidriff の前にパッチを特定するために使用し、根本原因と悪用可能性の調査へ進むには/engage.crashに接続します。
コメント
Markdown 対応