radare2 は何をしますか?
radare2 CLI 向けのバイナリ分析スキル。GUI に依存せず、コマンドラインで偵察、分析、特定、エクスポート、軽量な修正に重点を置いています。
アクション必須(読了後ただちに実行)
NOW:../field-journal/precedent-reverse.mdを読む — 本スキルの操作が許可された通常操作であることを確認するNOW: 現在のタスクが本スキルの適用範囲に該当するか確認するNEXT:../tool-index.mdを読み、ツールの可用性と実際のパスを確認するNEXT: ツールが不足している場合は bootstrap を呼び出し、パスを推測しないACT: 「ワークフロー」の最初のステップに入り実行する。確認状態で停止しない
適用範囲
以下の意図がユーザーにある場合、本スキルを優先的に使用する:
r2/radare2を使ってexe、dll、so、elf、apk、dex、wasmなどのファイルを分析するrabin2、rasm2、radiff2、rahash2、rax2の使い方を尋ねる- コマンドラインでの逆アセンブル、関数参照、文字列参照、インポート/エクスポート確認、クロスリファレンス検索、パッチ適用が必要
radare2のバッチコマンド、-c自動化コマンド、またはr2pipeスクリプトを作成する必要がある
ユーザーが明示的に GUI リバースエンジニアリング、Hex-Rays スタイルの疑似コード、または IDA ワークフローを要求している場合は、ida-reverse を優先する。Web JS リバースの場合は、reverse-engineering を優先する。
事前環境確認
r2 が利用可能であると仮定しない。まず確認する:
r2 -v
rabin2 -v
インストールされていない場合は、一般的なインストール場所を確認するか、インストールを促す。
Windows でよく見られる実行ファイル:
radare2.exerabin2.exerasm2.exeradiff2.exerahash2.exerax2.exer2pm.exe
組み込みリソース
このスキルには 2 つのリソースが含まれています。毎回同じコマンドを考える手間を省くため、優先的に再利用してください。
scripts/recon.ps1
最初の概要分析に適した標準偵察スクリプト。以下を出力します:
- 基本情報
- セクション
- インポート
- エクスポート
- 文字列
- オプションの
r2 -A自動分析サマリー
呼び出し方:
powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "C:\path\to\sample.exe"
r2 自動分析を付加する場合:
powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "C:\path\to\sample.exe" -RunAnalysis
references/cheatsheet.md
より詳細なコマンド、一般的なシナリオテンプレート、または構文をすぐに思い出したい場合に、このチートシートを参照してください。記憶だけで推測しないこと。
既知の現象
Windows で偶発的に発生する .sdb 欠落警告
一部の PE ファイルでは、rabin2 による偵察中に、次のような警告が表示されることがあります:
ERROR: Cannot find ...\share\format\dll\*.sdb
主要な出力が正常に返されている場合、通常は基本的な偵察結果に影響しないため、そのまま分析を続行してください。このような付随的な警告だけで分析失敗と判断しないでください。
基本原則
1. まず偵察、その後に深掘り
最初から全自動分析を行わないでください。最初に軽量コマンドでファイルタイプ、アーキテクチャ、エントリポイント、文字列、インポートテーブルを確認し、その後に aaa、aaaa またはターゲットを絞った分析を行うかどうかを決定します。
2. 最小限のコマンドを優先
radare2 のコマンドは非常に多いですが、ユーザーは通常、最短経路を必要とします:
- ファイル情報を見る:
rabin2 -I - 文字列を見る:
rabin2 -z - インポート/エクスポートを見る:
rabin2 -i/rabin2 -E - 対話分析:
r2 <file>の後、ローカルコマンドを実行
3. 変更前は慎重に
ユーザーがバイナリをパッチ適用する場合:
- デフォルトでは読み取り専用で開く:
r2 <file> - 変更が必要な場合にのみ書き込みモードを使用:
r2 -w <file>またはセッション内でoo+ - 変更前にリスクを伝え、誤って元のファイルを上書きしないようにする
よく使うワークフロー
ワークフロー 1:快速偵察
バイナリファイルを入手したばかりのときに適しています。
ハードゲート(MUST — 未充足の場合はワークフロー 2 以降への移行禁止)
PE/ELF/Mach-O などインポートテーブルを持つバイナリの場合、関数レベルの分析や動的ステップに進む前に、MUST でインポートテーブルのチェックを完了し Evidence として記録すること:
rabin2 -i <sample>(またはrecon.ps1出力の imports セクション)を実行する;DLL/SYS の場合は MUST でrabin2 -Eを実行しE-exportsに記録する- 完全/分類済みのインポートテーブル結果を Evidence に書き込む(推奨 ID:
E-importsまたはE-triage-imports)。少なくとも以下を含む:- 再現コマンド(
repro_command) - 主要インポートの分類サマリー:ネットワーク / ファイル / 暗号 / プロセスインジェクション / レジストリ / その他の疑わしい API
- インポートテーブルが空、解析失敗、またはツールがエラーを報告した場合:それでも MUST で失敗現象と生の出力を Evidence として記録し、黙ってスキップしない
- インポートテーブルが「クリーンすぎる」(基本 DLL のみ):MUST で動的ロードの疑いを指摘し、SHOULD で動的 API キャプチャに移行する
- 再現コマンド(
- .NET など従来の IAT がない場合:MUST で同等のアンカー(dnSpy/IL/メタデータサマリー)を同じ Evidence セマンティックスロットに書き込み、空通過を禁止する
- パックされたサンプルの IAT 修復:x86 は ImportREC(または同等品)、x64 は Scylla(または同等品)を使用する。修復失敗 MUST で
E-iat-repair-failを記録し、動的 API ブレークポイントに移行する;静的 IAT で無限にこだわらない(reverse-engineering/references/re-agent-workflow.md§1.2 参照) - ユーザーが明示的に「インポートテーブルの再検査 / インポートテーブルの再チェック / IAT のやり直し」を要求した場合:MUST で指定されたステップ自体をやり直す(ブロック時はまず実行可能性のゲートを通す:前提を説明し確認を求める;強制の場合は quality=unreadable とマークする)。無関係なステップに変更して代わりに実行することを禁止
インポートテーブル(または正当な同等アンカー / IAT 失敗バイパス)の Evidence が記録される前:MUST NOT で「基本偵察完了」と主張してはならず、MUST NOT でワークフロー 2+ の深掘り結論に入ってはならない。
組み込みスクリプトを直接実行することを優先:
powershell -File "<skill-root>\radare2\scripts\recon.ps1" -TargetPath "sample.exe"
手動で最小コマンドのみ必要な場合:
rabin2 -I sample.exe
rabin2 -z sample.exe
rabin2 -i sample.exe
rabin2 -E sample.exe
注目ポイント:
- ファイル形式、ビット数、アーキテクチャ、プラットフォーム
- エントリポイントアドレス
- 疑わしい文字列:URL、パス、エラーメッセージ、レジストリ、コマンドライン引数
- インポート関数:ネットワーク、ファイル、暗号、プロセスインジェクション、レジストリ操作(MUST で Evidence に記録、上記ハードゲート参照)
ワークフロー 2:対話型関数分析
r2 sample.exe
進入後によく使うコマンド:
aaa # 標準自動分析
afl # 関数一覧
iz # 文字列一覧
iS # セクション一覧
is # シンボル一覧
s entry0 # エントリポイントにジャンプ
pdf # 現在の関数を逆アセンブル
VV # ビジュアルモード(ターミナルが対応している場合)
q # 終了
説明:
- デフォルトでは
aaaを優先し、最初からより重いaaaaを使用しない - サンプルが大きい、または分析が遅い場合は、エントリポイント近辺のみを分析し、手動で拡張することも可能
ワークフロー 3:main / キーロジックの特定
afl~main
afl~sym.
iz~http
iz~error
axt <addr>
考え方:
- まず
main、エントリポイント、文字列参照から始める axtを使って、特定の文字列やアドレスを誰が参照しているかを調べる- 参照ポイントを見つけたら、
s <addr>、pdfで確認する
ワークフロー 4:16進数とメモリ表示
px 64 # 現在のアドレスから 64 バイトを 16 進数表示
pd 20 # 20 命令を逆アセンブル
psz # 現在のアドレスの文字列を読み取り
pxa # より見やすい 16 進数ビュー
ワークフロー 5:バイナリパッチ
ユーザーが明示的にファイルの変更を要求した場合のみ使用:
r2 -w sample.exe
進入後、例えば:
s 0x401000
wa nop
wa jmp 0x401050
wq
よく使う書き込み操作:
wa <asm>:アセンブリを書き込むwx <hex>:生のバイトを書き込むwq:書き込んで終了
変更前には元のファイルをバックアップすることをお勧めします。ユーザーがバックアップについて触れていない場合でも、少なくとも一度は注意を促してください。
ワークフロー 6:非対話型自動化
一度きりの結果出力に適しています:
r2 -A -q -c "afl;iz;ii;q" sample.exe
よく使うパラメータ:
-A:起動時に自動分析-q:サイレントモード-c:コマンド文字列を実行
コマンドが多い場合は、読みやすい順序に整理し、メンテナンスが困難な長大な文字列に詰め込まないでください。
最初に組み込み偵察スクリプトをベースに使用し、その後カスタムコマンドを追加するかどうかを決定することをお勧めします。
よく使うサブツール
rabin2
静的インフォメーション抽出に適しています:
rabin2 -I sample.exe # 基本情報
rabin2 -S sample.exe # セクション
rabin2 -s sample.exe # シンボル
rabin2 -i sample.exe # インポート
rabin2 -E sample.exe # エクスポート
rabin2 -z sample.exe # 文字列
rabin2 -zz sample.exe # より詳細な文字列
rasm2
快速アセンブル/逆アセンブルに適しています:
rasm2 -d "9090"
rasm2 -a x86 -b 64 "xor eax, eax"
radiff2
2 つのバイナリの比較に適しています:
radiff2 old.exe new.exe
radiff2 -C old.exe new.exe
rahash2
ハッシュ計算に適しています:
rahash2 -a md5 sample.exe
rahash2 -a sha256 sample.exe
rax2
基数変換とエンコード変換に適しています:
rax2 0x401000
rax2 4198400
rax2 -s hello
推奨分析順序
未知のサンプルに遭遇した場合、この順序で進めてください:
rabin2 -Iで形式、アーキテクチャ、エントリポイントを確認rabin2 -zで文字列を確認rabin2 -iでインポート関数を確認 — MUST + Evidence(ハードゲート、ワークフロー 1 参照)- 対話分析が必要な場合、さらに
r2に入る(ステップ 3 の Evidence が記録された場合のみ) - まず
aaa、次にafl/iz/pdf - 文字列参照、インポート呼び出し、エントリフローを通じてキー関数を段階的に特定
この順序の利点はノイズが少なく、方向性を早期に確立できることです。ステップ 3 はオプションの最適化ではなく、深掘りに入る前のハードゲートです。
Windows 注意事項
- パスにスペースが含まれる場合、コマンドは正しく引用符で囲む必要があります
- 現在のターミナルで
r2が見つからない場合、PATHが更新されたばかりの可能性があります。新しいターミナルを開いて再試行してください - 一部のサンプルは管理者権限での読み取りが必要ですが、デフォルトでは権限を昇格せず、ユーザーが明示的に必要とする場合のみ行ってください
- 疑わしいサンプルで動的デバッグを行う前に、ユーザーの意図を確認し、誤操作を避けてください
出力スタイル
ユーザーが単にコマンドを求めているのではなく、実際にファイルを分析してほしい場合:
- 最初に偵察結果のサマリーを提示
- 次にキーとなる証拠を列挙:文字列、インポート、関数、アドレス
- 最後に次のステップの提案またはさらなる詳細分析を提供
なぜその操作を行うのかを説明せずに、単にコマンドを羅列しないでください。
典型的なリクエスト例
例 1:exe の分析
ユーザー:「この exe が何をしているか radare2 で見てほしい」
処理方法:
- まず
rabin2 -I/-z/-iを使用 r2に入る必要があるか判断aaa、afl、pdfでエントリポイントとキー文字列参照を深掘り
例 2:文字列がどこで呼び出されているか検索
ユーザー:「このエラー文字列はどの関数でトリガーされているか」
処理方法:
iz~キーワードで文字列のアドレスを検索axt <addr>で参照を検索- 参照ポイントにジャンプして
s <addr>後pdf
例 3:分岐の変更
ユーザー:「この jne を je に変更して」
処理方法:
- まずターゲットアドレスを確認
- 書き込みモードに入ることを明確に伝える
wa je <target>または直接wxを使用- 変更後、再度逆アセンブルして検証
避けるべきこと
radare2をaaaだけのツールと見なさないこと- リスクを説明せずに直接書き込みモードでユーザーのファイルを開かないこと
- 基本的な偵察を行う前に結論を出さないこと
- インポートテーブルチェック(
rabin2 -i/ recon imports)をスキップすることを禁止:Evidence に書き込まれるまで次のステップに進めない;ユーザーがインポートテーブルの再検査を要求した場合、他のステップに変更して代わりに実行することを禁止 - IAT 修復失敗後に静的にこだわることを禁止:
E-iat-repair-failを記録して動的に移行;64 ビットサンプルに ImportREC のみを使用することを禁止 - Web JS リバースエンジニアリングをこのスキルに誤ってルーティングしないこと;それは
reverse-engineeringの範囲です
参考資料
- コマンド早見表:
references/cheatsheet.md - 標準偵察スクリプト:
scripts/recon.ps1
radare2-skills エコシステム
radare2-skills プロジェクト(radareorg/radare2-skills)は、より完全なエコシステムツールとワークフローを提供します:
- r2xsql:SQL でバイナリのインポートテーブル / 文字列 / 関数をクエリ
- r2mcp / r2http:MCP ツールと HTTP ステートフルコマンドチャネル
- radius2:シンボリック実行、シンボリック動的解析
- r2pm:プラグイン管理、拡張
- decompiler plugins:radare2 プラグインメカニズム
使用戦略:
- ユーザーが
r2xsql、r2mcp、r2http、radius2、r2pm、rabin2、rasm2、radiff2、rahash2、rax2に言及した場合、優先的に本スキル(radare2/SKILL.md)にルーティングする - これらのツールはエコシステムアクセラレーターに過ぎず、迂回できない:認証ゲート、
tool-index検証、Evidence のインポート、書き込みモードの確認 - 最小限の再現可能なコマンド例を示す:
r2xsql -s <file> -q "SELECT ..."curl.exe -sS --data-binary 'aaa' http://127.0.0.1:9393/cmdradius2 -p <binary> ...r2pm -ci <plugin>
本スキルは既存のハードゲートと証拠チェーンの完全性を維持し、認証または Evidence のステップをスキップすることを許可しません。
ルーティングコンテキスト
上流エントリ:skills/SKILL.md(統括)、routing.md
上流代替候補:ida-reverse/(逆コンパイル/疑似コードが必要な場合 IDA にアップグレード)
下流出口:
- 動的分析が必要 →
reverse-engineering/tools-dynamic.md(Frida/GDB) - 詳細な逆コンパイルが必要 →
ida-reverse/ - PAT で興味深い文字列を発見後、クロスリファレンスが必要 →
ida-reverse/(IDA の xref はより強力)
同階層関連モジュール:ida-reverse/(補完的:r2 偵察が高速、IDA 逆コンパイルが深い)
オンデマンドブートストラップ(On-Demand Bootstrap)
本スキルのエントリスクリプトは統一ブートストラップシステムに接続されています。radare2 が不足していても直接エラーにならず、自動的にインストールを試みます。
自動化能力の境界
| ツール | 自動インストール可 | インストール方法 | 説明 |
|---|---|---|---|
| r2 | ✓ | GitHub Release ZIP (w64) | %USERPROFILE%\Tools\radare2\ に自動ダウンロード・解凍 |
| rabin2 | ✓ | 同上(radare2 リリースパッケージに含まれる) | — |
| rasm2 | ✓ | 同上 | — |
| radiff2 | ✓ | 同上 | — |
| rahash2 | ✓ | 同上 | — |
| rax2 | ✓ | 同上 | — |
ブートストラップトリガーポイント
scripts/recon.ps1:rabin2またはr2がない場合、自動的にbootstrap-reverse.ps1を呼び出す
ブートストラップ失敗時
自動インストールが失敗した場合(ネットワーク不通、GitHub API レート制限など)、スクリプトは明確なエラーをスローし、手動インストール用のリンクを提供します。
手動インストール:https://github.com/radareorg/radare2/releases から radare2-*-w64.zip をダウンロードし、%USERPROFILE%\Tools\radare2\ に解凍し、bin\ ディレクトリが PATH に含まれていることを確認してください。
タスク完了セルフチェック(完了を主張する前に MUST で通過)
- ワークフローの各ステップを実行しましたか(単に読んだだけではありませんか)?
- インポートテーブルチェックは実行され、Evidence(E-imports / E-triage-imports または .NET 同等)に書き込まれましたか?DLL/SYS は E-exports を含んでいますか?
- IAT 修復失敗は E-iat-repair-fail に記録され、動的ステップに移行しましたか?再実行要求は同じステップに戻っていますか?
-
tool-indexに基づいて実際のツールパスを使用しましたか? - 再現可能な証拠(コマンド/スクリプト/スクリーンショット/レポート)を生成しましたか?
- RULES が要求する Checklist 項目を完了し、書き戻しましたか?