今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

rizinorg/cutter

rizinベースのオープンソースリバースエンジニアリングプラットフォーム

バイナリを1つ開いて、rizinエンジンが解析した関数やフロー、逆アセンブル結果をQtの画面上で触ってみると、マルウェアの静的解析や脆弱性調査がどれほど身近な作業か実感できます。Python・C++のプラグインで解析手順を自分なりに拡張できるので、難読化されたコードやプロトコルを追う自分専用の作業環境が組み上がっていきます。Ghidraやida Proのような商用ツールと違い、ソースコードもビルドスクリプトもすべて公開されているので、今日リリースバイナリを落として、まず1つの検体を触ってみることをおすすめします。

01 / 概要
何をするものか一文で言うと
ひとことでrizinベースのオープンソースリバースエンジニアリングプラットフォーム

Cutterは、rizinエンジンを基盤にしたQt/C++製のGUIリバースエンジニアリングプラットフォームです。逆アセンブル・逆コンパイル・デバッグをひとつのデスクトップアプリで扱えるように設計されています。Python/Native C++両方のプラグイン機構を備え、rz-ghidraなどのコミュニティ製デコンパイラも組み込めます。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

中核はsrc/core/Cutter.cpp(CutterCore)で、rizinのコア機能をC++/Qtから呼び出すラッパーになっています。CutterApplication.cppがアプリ起動時にrizinのバージョン一致確認、翻訳・フォント読み込み、Python初期化(PythonManager)、CutterCore::initializeとConfig読み込みを順に行います。widgets/以下に逆アセンブル表示・グラフ表示・16進ダンプ・関数一覧・レジスタなど多数のドックウィジェットが分かれて実装され、menus/のDisassemblyContextMenuなどからパッチ・コメント編集・型設定といった操作をrizinコマンドとして発行します。common/Decompiler.hとRzGhidraDecompiler(CUTTER_RZGHIDRA_STATIC時)により複数の逆コンパイラを差し替え可能にし、plugins/PluginManager.cppがPythonバインディング(src/bindings)とネイティブプラグインの読み込みを担っています。CMakeLists.txtとcmake/BundledRizin.cmakeがビルド時にrizinをバンドルするかシステムのものを使うかを制御します。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    Linuxなら AppImage をダウンロードして chmod +x のあと実行すると、ライブラリ解決の失敗やGLIBCバージョン不一致で起動しないケースに遭遇することがあります。

  2. STEP 02

    ソースからビルドする場合、cmake実行時にCUTTER_USE_BUNDLED_RIZINやCUTTER_ENABLE_PYTHONなどのオプション選択が必要で、依存関係の解決に scripts/fetch_deps.sh の実行が求められます。

  3. STEP 03

    起動直後にビルド時のrizinバージョンと動作環境のrizinバージョンが一致しないと、CutterApplication.cppの分岐により警告ダイアログが出て続行確認を求められます。

  4. STEP 04

    バイナリファイルを開くとInitialOptionsDialogが表示され、自動解析レベル(AAA等)を選ぶとrizinの解析コマンドが走り、Dashboard・FunctionsWidget・DisassemblyWidgetなどに結果が反映されます。

  5. STEP 05

    Pythonプラグインを試す場合はPreferencesのPluginsOptionsWidgetからパスを設定し、PluginManagerがロードに成功するかログで確認する必要があります。

  6. STEP 06

    Dockerで動かす場合はdocker/Dockerfileがソースからビルドする構成のため、初回起動までにビルド時間がかかることを想定しておく必要があります。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

実行に成功すれば、バイナリの逆アセンブル・逆コンパイル結果・関数一覧・文字列・インポート/エクスポート・デバッグ用レジスタやスタック表示などをGUI上でまとめて確認できるようになります。加えてPython/C++プラグインで機能拡張した状態のワークベンチが手に入ります。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

READMEやDockerfileはリリース時点のものと差異がある可能性があり、実際のビルドにはrizinのサブモジュールバージョンとの整合が要求されます。

02

バンドルされていないシステムrizinを使う構成では、ビルド時rizinバージョンと実行時バージョンの不一致で警告が出る作りになっており、環境依存のトラブルが起きやすいです。

03

本レビューはファイルツリーと抜粋ソースのみに基づくため、実際のGUI挙動や各ウィジェットの詳細な見た目は確認できていません。

04

docker/Dockerfileはalpine上でQt5・meson・cmakeなどをフルビルドする構成のため、初回イメージ作成に相応の時間とディスク容量が必要です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

rizinエンジンをGUIで使いたいリバースエンジニアや、逆コンパイラ・デバッガ機能を1つのアプリに統合したい人に向いています。CutterApplication.cppやCutterCore、widgets/menusの構成から見て、機能範囲は静的解析からデバッグ、プラグイン拡張まで実際に広く、READMEの主張と矛盾する記述は見当たりませんでした。ただしビルド手順やバージョン整合の複雑さは実際にソースを追って初めて分かる点であり、導入前にcutter.reのBuilding Docsを合わせて読むことを勧めます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する