re-radare2 について
rizin/radare2 を使ったバイナリ解析のコマンドラインスキルです。リモート環境や GUI のない環境、メモリの少ない環境での対話分析、スクリプト、相互参照、デバッグ、rz-ghidra による逆コンパイルを扱います。
主な機能
- 01関数と相互参照の自動分析
- 02逆アセンブルと制御フローの可視化
- 03コマンドラインの一括処理とスクリプト
- 04内蔵デバッガーとメモリ検索
- 05プロジェクト保存と JSON 出力
活用シーン
- 01SSH や CI 環境でのバイナリ分析
- 02ファームウェアやサンプルの一括検査
- 03文字列参照と呼び出し関係の追跡
- 04プログラムのデバッグと注釈の保存
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dslsdzc/ rev-skills --skill re-radare2インストール後、Claude Code で/re-radare2を入力して読み込まれたか確認します。
同梱ファイルreferences/commands.mdreferences/gotchas.md
詳細
rizin/radare2 コマンドライン解析
使う場合/使わない場合
- 使う:コマンドライン/スクリプトによる解析;メモリが 4GB 未満、またはリモート環境(GUI 逆コンパイラーが動作しない);高速な逆アセンブルとクロスリファレンス;
pdf/Vモードでの探索;ファームウェア/サンプルの一括スクリプト解析 - 使う:GUI のない SSH/CI 環境(rz は純粋なターミナルツールで、
-q -cによる一括処理が可能) - 使わない:成熟した GUI 逆コンパイルと型伝播が必要な場合([[re-ghidra]] を使用)
- 使わない:初期調査の結果だけが必要な場合([[re-triage]])
- 使わない:Windows ユーザーモードのデバッグが中心の場合([[re-x64dbg]]/[[re-windbg]] のほうが使いやすい;rz デバッガーは Windows 上では機能が限られます)
ツールの準備
[[re-analyze/platform-tips]] を参照してください——コマンドラインツールはリモート/低メモリ環境に適しています;プラットフォーム別の Wine/QEMU ユーザーモードエミュレーションのノウハウも同様に活用できます。
rizin(radare2 の活発なフォーク)
- macOS:
brew install rizin - Arch:
pacman -S rizin - Fedora/RHEL(EPEL 8+):
dnf install rizin(Fedora の現在サポート中のバージョンと EPEL 8/9/10 にはパッケージがあります);EOL になった Fedora では、まずディストリビューションのリポジトリを確認し、パッケージがなければ公式 release またはrz-pmを使います - Debian/Ubuntu: リポジトリに rizin パッケージはなく、
apt install rizinは失敗します——公式 release のバイナリ(GitHub rizinorg/rizin releases:static tar.xz / Windows zip / macOS pkg)またはrz-pmを使います - Kali:
apt install rizin(Kali 独自のリポジトリにパッケージがあります。Kali 公式ソースを使っていることが前提です) - Windows: 公式 release zip を解凍すれば使用できます(
rz-bin.exe) - 確認:
rizin -v、rz-bin -V - 注:ディストリビューションのパッケージ状況は時間とともに変わるため、インストール前に対象ディストリビューションのリポジトリを確認してください。成功したかどうかは常に
rizin -vで判断します。他のスキルで rizin のインストール手順が必要な場合は、ディストリビューションごとのコマンドを個別に複製せず、ここにある一覧を参照してください。
radare2 互換レイヤー(旧コマンド体系)
- Linux:
apt install radare2/dnf install radare2/pacman -S radare2 - macOS:
brew install radare2 - Windows:
choco install radare2 - 確認:
r2 -v - 注意:rz と r2 のコマンドには基本的に互換性があります(
pdf/axt/Vは同じ)が、プラグイン名と一部のコマンドには違いがあります(以下で注記)
rz-ghidra 逆コンパイルプラグイン
- 全プラットフォーム:
rz-pm -ci rz-ghidra(rizin のパッケージマネージャー。ネットワークとコンパイルツールチェーンが必要) - 確認: rizin 内で
pdg @ mainを実行し、疑似 C を出力できること
操作手順
-
rizin -Aで全自動解析:rizin -A sample解析完了の表示を待ちます(大きなファイルでは
pでページ送りして確認します)。-Aはaaa(関数/クロスリファレンス/文字列参照の全自動解析)と同等です。浅い解析だけを行う場合は、-a x86など必要に応じたパラメーターを使います。終了:q。- 引数なしで対話モードに入った後で解析を追加する場合:
aaa;軽量版はaa(関数+文字列参照。大きなファイルではこちらを推奨) - 関数一覧:
afl;単一関数の情報:afi @ main;関数を手動で定義:af @ 0x401000
- 引数なしで対話モードに入った後で解析を追加する場合:
-
pdfで関数を逆アセンブル:[0x00001040]> pdf @ sym.main- シンボルがない(stripped)場合は、まずエントリーポイントを探します:
izz~entryまたはaf @ 0x401000で関数を手動定義してからpdf @ 0x401000 pdf= 関数の逆アセンブルを表示;pd 20= 20 個の命令を表示;pdrは参照を含めて表示- 解析ノイズが混在する場合は
pdf @ <addr> | grep callで呼び出しを絞り込みます - 名前変更:
afn 新しい名前 @ アドレス;コメント:CCu コメント @ アドレス
- シンボルがない(stripped)場合は、まずエントリーポイントを探します:
-
axtでクロスリファレンスを確認:[0x00001040]> axt @ 0x403000 # 谁引用 0x403000 [0x00001040]> axf @ sym.main # main 引用了谁文字列参照:
izzですべての文字列を一覧表示し、axt @ str.<名称>で参照箇所を探します(文字列には自動的に名前が付けられています)。- 参照をたどる手順:
izzで重要な文字列を探す →axt @ str.xxx→ 参照元の関数へ移動s <アドレス>→pdf——[[re-ida]] の Alt+T→x→F5 と同じ考え方です
- 参照をたどる手順:
-
ビジュアル
Vモード:[0x00001040]> Vpでビューを切り替えます(逆アセンブル/16 進数/グラフ)sの後にアドレス/シンボルを指定して移動します(s sym.main);fで関数を定義;dで逆アセンブル表示を切り替えます- グラフビュー(関数フロー):
V内でpを押して graph ビューに切り替え、方向キーで移動します——制御フローの把握に使います - V を終了:
q;rizin を終了:もう一度q
-
スクリプトと rz-ghidra による逆コンパイル:
# 一行命令批处理 rizin -q -c 'aaa; pdf @ sym.main; axt @ 0x403000; quit' sample# 反编译 rz-pm -ci rz-ghidra rizin -c 'aaa; pdg @ sym.check' samplepdg= Ghidra 形式の疑似 C 出力;プラグインがない場合はpdfと手作業による復元で代替します。- スクリプトファイル:
rizin -i script.r2 sample(または対話モード内で. script.r2);スクリプトでは各コマンドを 1 行ずつ記述し、末尾にquitを置きます
- スクリプトファイル:
-
デバッグモード(rz 内蔵デバッガー):
rizin -d ./sample # 以调试模式启动 rizin -d -p 1234 # attach pid[0x7f...]> db 0x401000 # 断点(db = debugger breakpoint,与 r2 相同) [0x7f...]> dc # 继续(continue) [0x7f...]> ds / dso # 单步 / 步过 [0x7f...]> dr eax=0 # 改寄存器(绕过校验常用) [0x7f...]> px @ rsp # 看栈内容 [0x7f...]> drr # 全部寄存器- ブレークポイント一覧:
db(引数なしで一覧表示);ブレークポイントを削除:db- アドレス;条件付きブレークポイント:db アドレス:条件(例:db 0x401000:eax==1) - デバッグと gdb の違いについては [[gotchas]] を参照してください;gdb 系の手順は [[re-gdb]] を参照してください
- ブレークポイント一覧:
-
検索とメモリ操作:
[0x00001040]> /x 5548 # 十六进制搜索 [0x00001040]> /v 0xdeadbeef # 32 位值搜索(小端) [0x00001040]> /w "password" # 字符串搜索 [0x00001040]> /r sym.check # 引用搜索(找谁引用了符号) [0x00001040]> wx 9090 @ 0x401000 # 写字节(NOP 补丁) [0x00001040]> px 32 @ 0x401000 # 读 32 字节- ファイル情報:
rz-bin -I sample(アーキテクチャ/エントリーポイント/セクション)、rz-bin -z sample(文字列)、rz-bin -i sample(インポート)——r2 のrabin2 -I/-z/-iと同等です
- ファイル情報:
-
プロジェクトとエクスポート:
[0x00001040]> Ps project_name # 保存项目(含分析结果与标注) [0x00001040]> Po project_name # 打开项目 [0x00001040]> Pj > out.json # 导出 JSON 项目(供脚本二次处理)- 解析時の注釈(名前変更/コメント)はプロジェクトに保存されます——次回は
Poでそのまま続きから作業できます
- 解析時の注釈(名前変更/コメント)はプロジェクトに保存されます——次回は
分野をまたいだ連携
- [[re-binary-core]]:ワークフローのステップ 5 における、低メモリ/コマンドラインの代替手段(
RE_DECOMPILER=radare2) - [[re-firmware]]:ファームウェア ELF の一括スクリプト解析(GUI のない環境)
- [[re-ctf]]:CTF 問題のコマンドラインによる迅速な攻略
- [[re-format-elf]] と連携して構造を読み取ります;GUI での逆コンパイルが必要な場合は [[re-ghidra]] に移ります
- 動的デバッグでは [[re-gdb]] と相互補完します(gdb はエコシステム/プラグインがより充実しており、rz 内蔵デバッガーは軽量です)
よくある問題と落とし穴
-Aを実行する前は情報が少ない:解析を行わないと関数の境界もクロスリファレンスもありません——まず-A(またはaaa)を実行してからシンボルを確認します- 大きなファイルの解析は遅い:非常に大きなファームウェアでは全量
aaaの処理に極めて時間がかかります——aa(軽量版)またはaa~で対象を絞るか、対象セクションだけをaf @ addrで手動解析します - r2/rz のコマンド体系の違い:オンラインのチュートリアルは radare2(r2)向けのものが多く、rizin(rz)とはおおむね互換性がありますが、プラグインのインストール方法(
r2pm→rz-pm)や一部のコマンド名は異なります——実行前にrz?でヘルプを確認してください pdfは関数境界に依存します——シンボルがない場合は、まずafで定義しないと、出力が空になったり位置がずれたりします- パイプ出力に色やページ送りの制御文字が含まれると、スクリプトの解析を妨げることがあります——一括処理では
e scr.color=0で色を無効にします(-2は stderr の警告を無効にするだけで、色は無効になりません) - バージョンの違い、デバッガー、PIE アドレスの落とし穴については [[gotchas]] を参照してください
コメント
Markdown 対応