mcpField
R
re-radare2

re-radare2

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

re-radare2 について

rizin/radare2 を使ったバイナリ解析のコマンドラインスキルです。リモート環境や GUI のない環境、メモリの少ない環境での対話分析、スクリプト、相互参照、デバッグ、rz-ghidra による逆コンパイルを扱います。

主な機能

  1. 01関数と相互参照の自動分析
  2. 02逆アセンブルと制御フローの可視化
  3. 03コマンドラインの一括処理とスクリプト
  4. 04内蔵デバッガーとメモリ検索
  5. 05プロジェクト保存と JSON 出力

活用シーン

  1. 01SSH や CI 環境でのバイナリ分析
  2. 02ファームウェアやサンプルの一括検査
  3. 03文字列参照と呼び出し関係の追跡
  4. 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 を出力できること

操作手順

  1. rizin -A で全自動解析:

    rizin -A sample
    

    解析完了の表示を待ちます(大きなファイルでは p でページ送りして確認します)。-A は aaa(関数/クロスリファレンス/文字列参照の全自動解析)と同等です。浅い解析だけを行う場合は、-a x86 など必要に応じたパラメーターを使います。終了:q。

    • 引数なしで対話モードに入った後で解析を追加する場合:aaa;軽量版は aa(関数+文字列参照。大きなファイルではこちらを推奨)
    • 関数一覧:afl;単一関数の情報:afi @ main;関数を手動で定義:af @ 0x401000
  2. pdf で関数を逆アセンブル:

    [0x00001040]> pdf @ sym.main
    
    • シンボルがない(stripped)場合は、まずエントリーポイントを探します:izz~entry または af @ 0x401000 で関数を手動定義してから pdf @ 0x401000
    • pdf = 関数の逆アセンブルを表示;pd 20 = 20 個の命令を表示;pdr は参照を含めて表示
    • 解析ノイズが混在する場合は pdf @ <addr> | grep call で呼び出しを絞り込みます
    • 名前変更:afn 新しい名前 @ アドレス;コメント:CCu コメント @ アドレス
  3. 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 と同じ考え方です
  4. ビジュアル V モード:

    [0x00001040]> V
    
    • p でビューを切り替えます(逆アセンブル/16 進数/グラフ)
    • s の後にアドレス/シンボルを指定して移動します(s sym.main);f で関数を定義;d で逆アセンブル表示を切り替えます
    • グラフビュー(関数フロー):V 内で p を押して graph ビューに切り替え、方向キーで移動します——制御フローの把握に使います
    • V を終了:q;rizin を終了:もう一度 q
  5. スクリプトと rz-ghidra による逆コンパイル:

    # 一行命令批处理
    rizin -q -c 'aaa; pdf @ sym.main; axt @ 0x403000; quit' sample
    
    # 反编译
    rz-pm -ci rz-ghidra
    rizin -c 'aaa; pdg @ sym.check' sample
    

    pdg = Ghidra 形式の疑似 C 出力;プラグインがない場合は pdf と手作業による復元で代替します。

    • スクリプトファイル:rizin -i script.r2 sample(または対話モード内で . script.r2);スクリプトでは各コマンドを 1 行ずつ記述し、末尾に quit を置きます
  6. デバッグモード(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]] を参照してください
  7. 検索とメモリ操作:

    [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 と同等です
  8. プロジェクトとエクスポート:

    [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]] を参照してください

コメント