reverse-engineer について
reverse-engineer は、逆アセンブルや解析のワークフローを案内するスキルです。セキュリティ研究者、CTF 参加者、ソフトウェア分析者向けに、初期調査から静的・動的解析、記録までの手順を示します。
主な機能
- 01一般的なリバースエンジニアリング用スクリプト環境を網羅
- 02ファイル調査と初期トリアージの手順
- 03静的解析とクロスリファレンスの案内
- 04動的解析と実行トレースの構成
- 05許可された解析と検証を重視
活用シーン
- 01許可されたテストでのバイナリ解析
- 02CTF 課題プログラムの調査
- 03防御目的でのマルウェア検査
- 04クローズドソースライブラリの動作記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rmyndharis/ antigravity-skills --skill reverse-engineerインストール後、Claude Code で/reverse-engineerを入力して読み込まれたか確認します。
詳細
一般的なリバースエンジニアリング用スクリプト環境
- IDAPython(IDA Pro スクリプト)
- Ghidra スクリプト(Jython 経由の Java/Python)
- r2pipe(radare2 Python API)
- pwntools(CTF/エクスプロイト用ツールキット)
- capstone(逆アセンブリ用フレームワーク)
- keystone(アセンブリ用フレームワーク)
- unicorn(CPU エミュレーターフレームワーク)
- angr(シンボリック実行)
- Triton(動的バイナリ解析)
このスキルを使用する場面
- 一般的なリバースエンジニアリング用スクリプト環境に関するタスクやワークフローに取り組む場合
- 一般的なリバースエンジニアリング用スクリプト環境について、ガイダンス、ベストプラクティス、チェックリストが必要な場合
このスキルを使用しない場面
- タスクが一般的なリバースエンジニアリング用スクリプト環境に関係しない場合
- この範囲外の異なる分野やツールが必要な場合
手順
- 目標、制約、必要な入力を明確にします。
- 関連するベストプラクティスを適用し、結果を検証します。
- 実行可能な手順と検証方法を提示します。
分析手法
フェーズ 1:初期調査
- ファイルの特定:ファイルの種類、アーキテクチャ、コンパイラを特定します
- メタデータの抽出:文字列、インポート、エクスポート、リソースを確認します
- パッカーの検出:パッカー、保護ツール、難読化ツールを特定します
- 初期トリアージ:複雑さを評価し、注目すべき領域を特定します
フェーズ 2:静的解析
- 逆アセンブラに読み込む:適切な分析オプションを設定します
- エントリーポイントを特定する:メイン関数、エクスポート関数、コールバックを確認します
- プログラム構造を把握する:関数、基本ブロック、制御フローを確認します
- コードに注釈を付ける:関数名を変更し、構造体を定義し、コメントを追加します
- 相互参照を分析する:データとコードの参照を追跡します
フェーズ 3:動的解析
- 環境を設定する:分離された VM、ネットワーク監視、API フックを用意します
- ブレークポイント戦略:エントリーポイント、API 呼び出し、注目すべきアドレスを対象にします
- 実行をトレースする:プログラムの動作、API 呼び出し、メモリアクセスを記録します
- 入力を操作する:異なる入力をテストし、動作の変化を観察します
フェーズ 4:ドキュメント作成
- 関数のドキュメント:目的、パラメーター、戻り値を記載します
- データ構造のドキュメント:レイアウト、フィールドの意味を記載します
- アルゴリズムのドキュメント:疑似コード、フローチャートを記載します
- 調査結果の要約:主な発見、脆弱性、動作をまとめます
対応方針
リバースエンジニアリングのタスクを支援する際は、次の手順に従います。
- 範囲を明確にする:分析が許可された目的のために行われることを確認します
- 目標を把握する:具体的にどの情報が必要かを確認します
- ツールを提案する:タスクに適したツールを提案します
- 手法を示す:段階的な分析方法を提示します
- 調査結果を説明する:裏付けとなる証拠とともに、わかりやすく説明します
- パターンを記録する:注目すべきコードパターンや手法を記録します
コードパターンの認識
一般的なパターン
// String obfuscation (XOR)
for (int i = 0; i < len; i++)
str[i] ^= key;
// Anti-debugging (IsDebuggerPresent)
if (IsDebuggerPresent())
exit(1);
// API hashing (common in malware)
hash = 0;
while (*name)
hash = ror(hash, 13) + *name++;
// Stack string construction
char s[8];
*(DWORD*)s = 0x6C6C6548; // "Hell"
*(DWORD*)(s+4) = 0x6F; // "o\0"
呼び出し規約
- x86 cdecl:引数はスタックに置かれ、呼び出し側がクリーンアップします
- x86 stdcall:引数はスタックに置かれ、呼び出された側がクリーンアップします
- x64 Windows:RCX、RDX、R8、R9、その後にスタック
- x64 System V:RDI、RSI、RDX、RCX、R8、R9、その後にスタック
- ARM:R0-R3、その後にスタック
セキュリティと倫理
許可された用途のみ
- 適切な許可を得たセキュリティ研究
- CTF コンテストや教育目的のチャレンジ
- 防御目的のマルウェア分析
- 責任ある窓口を通じた脆弱性の開示
- 相互運用性を目的としたソフトウェアの理解
支援できない内容
- システムへの不正アクセス
- 悪意ある目的でのマルウェア作成
- ソフトウェアライセンスの不正な回避
- 知的財産の窃盗
- あらゆる違法行為
対話例
CTF バイナリチャレンジ
User: "I have a CTF binary that asks for a password. How do I approach this?"
Response: Let me guide you through the analysis:
1. First, identify the binary type:
$ file challenge
$ checksec --file=challenge
2. Load in Ghidra/IDA and find main()
3. Look for:
- String comparisons (strcmp, memcmp)
- Crypto functions (xor loops, constants like 0x5A827999)
- Input validation logic
4. Set breakpoints on comparison functions in GDB:
$ gdb ./challenge
(gdb) break strcmp
(gdb) run
5. Examine memory at comparison point to see expected value
ライブラリの分析
User: "I need to understand how this closed-source DLL handles authentication"
Response: For authorized analysis of the DLL:
1. Static analysis:
- List exports: dumpbin /exports library.dll
- Find auth-related functions by name patterns
- Load in IDA/Ghidra, analyze exported functions
2. Dynamic analysis:
- Hook API calls with Frida
- Monitor network traffic
- Trace function parameters
3. Documentation:
- Document function signatures
- Map data structures
- Note any security considerations
コメント
Markdown 対応