mcpField
R
reverse-engineering

reverse-engineering

github.com/hypnguyen1209セキュリティ40366 回インストール1 週間前に更新
リポジトリ

reverse-engineering について

Reverse Engineeringは、コンパイル済みバイナリやファームウェア、未知のプロトコルを調査するセキュリティ分析向けスキルです。トリアージ、静的・動的解析、難読化解除、パッチ差分分析の手順を、スクリプトや詳細資料とともに扱います。

主な機能

  1. 01バイナリのトリアージと逆コンパイル
  2. 02動的デバッグと計装
  3. 03アンチデバッグ・アンチVM解析
  4. 04難読化解除とアンパック
  5. 05ファームウェアとUEFIの解析
  6. 06パッチ差分分析とプロトコル推定

活用シーン

  1. 01未知のバイナリの調査
  2. 02保護・難読化されたサンプルの分析
  3. 03ファームウェアとUEFIイメージの調査
  4. 04パッチから脆弱性の原因を追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hypnguyen1209/offensive-claude --skill reverse-engineering

インストール後、Claude Code で/reverse-engineeringを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
anti-reversing-bypass.md
coverage-reachability.md
deobfuscation.md
dynamic-instrumentation.md
firmware-uefi.md
patch-diffing-protocol.md
rr-time-travel.md
static-triage-decompilation.md
scripts/
antidebug_unhook.py
cve_diff.py
deflatten_triton.py
frida_universal.js
patchdiff_fetch.py
proto_infer.py
rr_root_cause.sh
string_decrypt_emu.py
triage.py
uefi_triage.py
scripts/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&CKCWEリファレンススクリプト
バイナリのトリアージ(形式/アーキテクチャ/緩和策/文字列/インポート)T1592.002, T1518.001CWE-1395references/static-triage-decompilation.mdscripts/triage.py
ヘッドレス逆コンパイル(Ghidra 11.4 / r2 / IDA)T1592.002CWE-noinforeferences/static-triage-decompilation.mdscripts/triage.py
AI/MCP 支援によるリバースエンジニアリング(Sidekick / GhidrAssistMCP / LLM4Decompile)T1592.002CWE-noinforeferences/static-triage-decompilation.md-
動的デバッグ(GDB/GEF、x64dbg、条件付きブレークポイント)T1622CWE-noinforeferences/dynamic-instrumentation.md-
Frida 17 によるインストルメンテーションと SSL ピンニング/JNI フックT1622, T1562.001CWE-noinforeferences/dynamic-instrumentation.mdscripts/frida_universal.js
シンボリック/コンコリック実行(angr、Triton)T1480.001CWE-noinforeferences/dynamic-instrumentation.mdscripts/deflatten_triton.py
アンチデバッグの検出と回避(PEB/ptrace/HW-bp/タイミング)T1622, T1497.001CWE-noinforeferences/anti-reversing-bypass.mdscripts/antidebug_unhook.py
アンチ VM/サンドボックス回避の無効化T1497, T1497.003CWE-noinforeferences/anti-reversing-bypass.mdscripts/antidebug_unhook.py
パッカーのアンパック → OEP ダンプ(UPX/ランタイムパッカー)T1027.002, T1620CWE-noinforeferences/anti-reversing-bypass.mdscripts/antidebug_unhook.py
文字列/API ハッシュの難読化解除(Unicorn エミュレーション)T1027.013, T1140, T1027.007CWE-noinforeferences/deobfuscation.mdscripts/string_decrypt_emu.py
OLLVM の制御フロー平坦化の解除T1027.009, T1027CWE-noinforeferences/deobfuscation.mdscripts/deflatten_triton.py
VM プロテクターの仮想化解除(VMProtect 3.x / Themida)T1027.009CWE-noinforeferences/deobfuscation.mdscripts/deflatten_triton.py
ファームウェアの抽出(binwalk/squashfs/QEMU エミュレーション)T1542.001CWE-1263references/firmware-uefi.mdscripts/uefi_triage.py
UEFI/BIOS のリバースエンジニアリングと Secure Boot バイパスの調査T1542.001, T1542.003CWE-347references/firmware-uefi.mdscripts/uefi_triage.py
パッチ差分解析 → n-day の根本原因(BinDiff/Diaphora/ghidriff)T1203, T1592.002CWE-noinforeferences/patch-diffing-protocol.mdscripts/patchdiff_fetch.py
プロトコル/ファイル形式の推定(Netzob/Kaitai)T1592.002CWE-noinforeferences/patch-diffing-protocol.mdscripts/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.exeEDR の 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 に接続します。

コメント