reverse-engineering について
初心者向けのリバースエンジニアリングスキルです。未知のバイナリ、マルウェア、ファームウェア、難読化コードを段階的に分析し、読み取り専用の初期調査スクリプトと実行前の厳格な安全確認を備えています。
主な機能
- 01読み取り専用スクリプトによる初期調査
- 02静的・動的・挙動分析を網羅
- 03PE、ELF、マルウェア、ファームウェアの資料
- 04分析段階に応じたツール選択
- 05サンプル実行前の安全確認を必須化
- 06分析レポートのテンプレートと構成
活用シーン
- 01不審な実行ファイルを初期調査する
- 02ソースコードなしでプログラムを理解する
- 03ファームウェアイメージや組み込み機器を分析する
- 04マルウェアの指標と分析結果をまとめる
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ juank115/ reverse-engineerskill --skill reverse-engineeringインストール後、Claude Code で/reverse-engineeringを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/report-template.mdreferences/cheatsheet.mddynamic-analysis-example.mdfirmware-iot.mdlinux-elf.mdmalware-analysis.mdstatic-analysis-example.mdwindows-pe.mdscripts/triage.py詳細
初心者向けリバースエンジニアリングスキル
このスキルは、未知のバイナリ、実行ファイル、マルウェアのサンプル、ファームウェアイメージ、難読化されたコードを段階的に分析するのに役立ちます。初心者を想定し、安全性、明確さ、再現可能なワークフローを重視しています。
このスキルを使う場面
- ユーザーが不審なファイル、バイナリ、実行ファイルを提示し、「これは何をするものですか?」と尋ねた場合。
- ユーザーがソースコードなしでプログラムの仕組みを理解したい場合。
- ユーザーが逆アセンブル、逆コンパイル、デバッグ、マルウェア、ファームウェア、難読化、アンパックについて言及した場合。
- ユーザーがリバースエンジニアリングツールの選択や、ツールの出力の解釈について支援を必要としている場合。
クイックスタート:まずトリアージスクリプトを実行する
未知のファイルを扱うときは、まず同梱のトリアージスクリプトを実行してください(読み取り専用、純粋な Python で動作し、依存関係はありません)。
python "${CLAUDE_SKILL_DIR}/scripts/triage.py" <sample>
環境でCLAUDE_SKILL_DIRが設定されていない場合は、代わりにこのスキルのディレクトリから実行してください。ハッシュ、エントロピー、形式(PE/ELF/Mach-O)、セクション、パッカーの手がかり、解析回避の可能性がある指標、抽出した文字列を報告します。これらの情報をもとに次の手順を判断できます。ヒューリスティックの結果はすべて、悪意のある動作の証拠ではなく、検証すべき手がかりとして扱ってください。
同梱リソース
このスキルには、補助ファイルが含まれています。タスクの内容に合ったリファレンスのみ読み込んでください。
| リソース | 読み込む場面… |
|---|---|
references/windows-pe.md | Windows PE ファイル(.exe、.dll、.sys)を分析する場合:ヘッダー、インポート、パッカー、手動アンパック |
references/linux-elf.md | Linux/Unix ELF バイナリを分析する場合:ヘッダー、シンボル、GDB のワークフロー、解析回避 |
references/malware-analysis.md | サンプルが悪意のある可能性がある場合:ラボ環境の設定、アンパックの手法、MITRE に対応付けた振る舞い、YARA |
references/firmware-iot.md | ファームウェアイメージまたは組み込みデバイスを扱う場合:binwalk による抽出、エミュレーション、UART/JTAG |
references/cheatsheet.md | 特定のコマンドが必要な場合:x64dbg、GDB、radare2、Ghidra、WinDbg のショートカット |
references/static-analysis-example.md | 初心者向けの、静的解析の全手順を示す例が必要な場合 |
references/dynamic-analysis-example.md | 初心者向けの、隔離環境で行う動的解析の全手順を示す例が必要な場合 |
scripts/triage.py | 読み取り専用の初回トリアージを実行する場合 |
assets/report-template.md | 最終的な分析レポートを作成する場合 |
安全第一:必須の実行ゲート
リバースエンジニアリングでは、悪意のあるコードを扱う場合があります。**不明な実行ファイルをホストマシン上で実行したり、デバッグしたりしないでください。**使用するツールがサンプルを読み取るだけであれば、ホスト上での静的検査は許可されます。
サンプルを起動する、デバッガーを再開する、アンパッキングスタブをステップ実行する、ファームウェアをエミュレートする、または実機ハードウェアに接続するコマンドを提示または実行する前に、該当する項目をすべてユーザーに確認する必要があります。
- 実行はホスト上ではなく、分析専用の使い捨て VM またはサンドボックス内で行います。共有フォルダー、共有クリップボード、ドラッグ&ドロップ、ホストの認証情報との連携は無効になっています。
- クリーンなスナップショットがあり、分析後に復元できます。
- ネットワークは無効になっているか、隔離されたフェイクネットにのみ接続されています。家庭用、社内、または本番環境のネットワークにはブリッジ接続されていません。
- サンプルを実行する前に、監視ツールがインストールされ、起動されています。
- 環境には、本番環境の認証情報、個人データ、トークン、信頼済みデバイスが含まれていません。
- 実機ファームウェアを扱う場合、デバイスは所有物であるか、使用許可を得たものであり、信頼済みネットワークから隔離され、電圧が確認され、安全なハードウェアの取り扱い手順に従って接続されています。
これらの事実がすでに確認されていない場合は、明示的な確認を求めてください。該当する項目が1つでも未確認の場合は、フェーズ1~3で停止し、読み取り専用のトリアージ、静的解析、または逆アセンブルのみを提案してください。警告を出すだけでは、このゲートを満たしません。
実行前に、SHA-256 でファイルを特定してください。ハッシュの照会は読み取り専用です。サンプル自体を公開解析サービスにアップロードすると、ファイルが公開される可能性があるため、ユーザーの許可が必要です。
リバースエンジニアリング入門ワークフロー
一般的なバイナリ、マルウェアの疑いがあるファイル、ファームウェアのいずれにも、同じ6つのフェーズを使用します。該当しないフェーズを省略できるのは、その理由を明示する場合に限ります。
- トリアージ:ファイル形式、アーキテクチャ、パッキング、エントロピーを特定します。
- 静的解析:実行せずに、文字列、ヘッダー、インポート、メタデータを読み取ります。
- 逆アセンブル/逆コンパイル:機械語を読み取り可能な形式に変換します。
- 動的解析:実行ゲートを通過した後、制御された監視下で実行またはエミュレートします。
- 振る舞いの分析:ネットワーク、ファイルシステム、レジストリ、プロセス、またはデバイスの動作を記録します。
- 報告:IOC、MITRE ATT&CK マッピング、推奨事項を含めて調査結果をまとめます。
ファームウェア/IoT は条件に応じて適用するドメイン別のトラックであり、7番目のフェーズでも、フェーズ5の代替でもありません。入力がファームウェアまたは組み込みデバイスの場合は、references/firmware-iot.md を読み込み、取得、抽出、アーキテクチャ、エミュレーション、ハードウェアに関するガイダンスを上記6つのフェーズに適用してください。たとえば、抽出はフェーズ1~2、ネイティブコードの調査はフェーズ3、エミュレーションはフェーズ4、観察されたデバイスの動作はフェーズ5に該当します。
適切な深さのツールを選ぶ
質問に答えられる最も複雑でないツールから始め、証拠に応じてのみ、より高度なツールに進んでください。
| レベル | まず使用するツール | 次の段階に進む条件 |
|---|---|---|
| 初心者/初回調査 | 同梱の triage.py、file、strings、Detect It Easy、PE-bear | 形式、ハッシュ、文字列、セクション、パッカーの手掛かりを調べる必要がある場合 |
| 視覚的なガイド付き分析 | Ghidra、IDA Free、Cutter。実行ゲートを通過した後は Procmon/System Informer | クロスリファレンス、逆コンパイル、または観察可能な実行時の振る舞いを調べる必要がある場合 |
| 高度な手動作業 | radare2、gef/pwndbg を使用した GDB、WinDbg、x64dbg によるアンパッキング、Scylla/IAT の修復 | より簡単なツールでは制御フロー、解析対策、またはパックされたペイロードを説明できない場合 |
手動によるアンパッキングや IAT の修復を、初心者向けの標準手順にしないでください。高度なコマンドを使用する前に、それぞれの目的と、期待される観察結果を説明してください。
フェーズ1:トリアージ
どのサンプルでも、まずここから始めてください。
ファイルを特定する
ホストまたは安全な解析用 VM で実行します。
file <sample>— ファイルの種類とアーキテクチャを確認します。exiftool <sample>— メタデータ、コンパイラーの手掛かり、タイムスタンプを確認します。sha256sum <sample>— 照合用の暗号学的ハッシュを取得します。ssdeep <sample>— 類似サンプルを探すためのファジーハッシュを取得します。
パッキング/難読化を確認する
- エントロピーの高いセクションは、パッキングまたは暗号化されている可能性を示します。
- インポートが少なく、
.textや.dataセクションが大きい場合は、パッカーの使用が考えられます。 UPX0、UPX1、.vmp、.themida、.petiteなどのセクション名を探します。
同梱のスクリプトは、既知のパッカーのセクション名、エントロピーが高いセクションや書き込み可能かつ実行可能なセクション、アンチデバッグ、タイミング、仮想化に関する文字列の可能性を検出します。これらは正規のソフトウェアにも含まれることがあるため、後のフェーズで手掛かりを確認してください。
フェーズ 2:静的解析
サンプルを実行せずに、文字列、ヘッダー、インポート、エクスポート、メタデータ、リソース、署名を調べます。
便利な静的解析ツール
| ツール | 用途 |
|---|---|
file | ファイルの種類とアーキテクチャを特定 |
strings | 読み取り可能な文字列を抽出 |
exiftool | メタデータを抽出 |
binwalk | 署名の解析とデータの切り出し |
hexdump -C | 生のバイト列を調査 |
pefile (Python) | PE ヘッダーを解析 |
pyelftools (Python) | ELF ヘッダーを解析 |
capstone (Python) | 軽量な逆アセンブル |
yara | ルールベースのパターンマッチング |
フェーズ 3:逆アセンブルと逆コンパイル
予算やプラットフォームに応じて、以下のツールを使用します。
| ツール | 種類 | 主な用途 |
|---|---|---|
| Ghidra | 無料、オープンソース | 静的解析、逆コンパイル、クロスプラットフォーム |
| IDA Free | フリーミアム | 逆アセンブル、初心者にも使いやすいグラフ表示 |
| radare2 / Cutter | 無料、オープンソース | コマンドラインでのワークフロー、スクリプト作成 |
| Binary Ninja | 商用 | 高速な解析、優れた IL |
| x64dbg | 無料のデバッガー | Windows の動的解析 |
| GDB + gef/pwndbg | 無料のデバッガー | Linux の動的解析 |
初心者向けの逆コンパイルのヒント
- 関数や変数の役割が分かったら、名前を変更します。
- まず
main、WinMain、またはエントリーポイント関数を探します。 - ユーザー入力(ネットワーク、ファイル、レジストリ、コマンドライン)から危険な API までを追跡します。
- 不審な API 呼び出しを検索します。例:
CreateRemoteThread、VirtualAllocEx、InternetOpenUrl、RegSetValueEx、WriteProcessMemory。
フェーズ 4:動的解析とデバッグ
必須の実行ゲートをすべて確認するまで、このフェーズに進まないでください。
実行前(該当するすべての項目を必ず確認)
- 専用の使い捨て VM またはサンドボックスを確認済み。ホストとの統合機能は無効。
- クリーンなスナップショットを作成済み。
- ネットワークを無効にするか、隔離されたフェイクネット経由のみに設定済み。
- 以下の表から監視ツールを選択し、インストールして起動済み。
- 実際の認証情報、機密データ、信頼済みデバイスを公開していないことを確認済み。
監視ツール
| ツール | プラットフォーム | 記録内容 | 安全要件 |
|---|---|---|---|
| Procmon | Windows | レジストリ、ファイル、プロセスのイベント | サンプルの実行前に、確認済みの VM 内で起動する |
| Process Hacker / System Informer | Windows | プロセス、メモリ、ハンドル | 不明なサンプルには、確認済みの VM 内でのみ使用する |
| Wireshark | クロスプラットフォーム | ネットワークトラフィック | 隔離された VM/フェイクネットのインターフェイスのみをキャプチャし、信頼済み LAN は決してキャプチャしない |
| strace / ltrace | Linux | システムコールとライブラリ呼び出し | これらのツールはサンプルを実行するため、確認済みの VM が必須 |
| x64dbg / WinDbg | Windows | ライブデバッグ | 読み込み/実行再開によってコードが実行される可能性があるため、確認済みの VM が必須 |
| GDB | Linux | ライブデバッグ | 開始/実行再開によってコードが実行される可能性があるため、確認済みの VM が必須 |
デバッグのチェックリスト(ゲート確認後のみ)
- 不審な API にブレークポイントを設定します。
- パッキングされている場合は、確認済みの VM 内でのみアンパッキング用スタブをステップ実行します。
- 安全な場合は、メモリからアンパック済みのペイロードをダンプします。
- コマンドライン引数と環境変数をすべて記録します。
フェーズ 5:振る舞いの分析
観察した振る舞いを体系的に記録します。マルウェアが疑われる場合は references/malware-analysis.md を読み込み、ファームウェアの場合は references/firmware-iot.md を使用して、サービス、ファイルシステムの変更、デバイスインターフェース、ネットワークの振る舞いを記録します。
永続化の仕組み
- レジストリの Run キー(
HKCU\Software\Microsoft\Windows\CurrentVersion\Run)。 - スケジュールされたタスク(
schtasks)。 - スタートアップフォルダー。
- サービスとドライバー。
- WMI イベントサブスクリプション。
ネットワークインジケーター
- DNS クエリ。
- HTTP/HTTPS による C2 コールバック。
- IP アドレスとポート。
- User-Agent 文字列。
データ窃取/影響
- ファイルの列挙。
- スクリーンショットの取得。
- キーロギングフック。
- 認証情報のダンプ(
lsass、SAM ハイブ)。 - 暗号化/ランサムウェアのファイル拡張子。
収集する IOC
- SHA-256 ハッシュ。
- 作成されたファイルパス。
- 変更されたレジストリキー。
- ネットワークインジケーター。
- ミューテックス/イベント名。
- 作成されたファイル名。
フェーズ 6:レポート
各セッションの最後に、明確なレポートを作成します(成果物の構成には assets/report-template.md を使用します)。
- エグゼクティブサマリー:サンプルの内容と、その重要性。
- 侵害の痕跡(IOC):ハッシュ、IP、ドメイン、ファイルパス。
- 振る舞いの概要:実行時にサンプルが行うこと。
- MITRE ATT&CK へのマッピング(マルウェアの場合):観察された戦術とテクニック。
- 使用したツール:ツールとコマンドの一覧。
- 推奨事項:封じ込め、検出、防止の手順。
出力形式
ユーザーを支援する際は、次の形式で回答を構成します。
## TL;DR
One-paragraph summary of the finding or next step.
## Analysis
Step-by-step reasoning, tool output, and interpretation.
## Findings
- Bullet 1
- Bullet 2
## IOCs (if malware)
| Type | Value |
|------|-------|
| SHA-256 | ... |
| IP | ... |
## Next steps
1. Do this next.
2. Then do this.
## Safety reminders
- Reminder 1
- Reminder 2
プロンプトの例
- 「この実行ファイルを分析してください。悪意のあるものですか?」
- 「この関数を逆コンパイルして、何をするのか説明してください。」
- 「この UPX サンプルのアンパックを手伝ってください。」
- 「このメモリダンプから、どの IOC を抽出できますか?」
- 「このファームウェアイメージをリバースエンジニアリングする手順を教えてください。」
- 「このアセンブリのスニペットを1行ずつ説明してください。」