
Ghidra拡張機能で、関数マッチングのためにBinDiffを統合する
GhidraプロジェクトでBinDiffを使用して一致する関数を検索し、自動的に名前を変更するGhidra拡張機能です(BinDiff 6、7、8をサポート)。 BinDiffマニュアルを参照して、その仕組みと関数/基本ブロックのマッチング方法を確認してください。ただし、この拡張機能ではBinDiffがGhidra内から自動化されるため、自分でバイナリをdiffする必要はありません。
バグはgithubのissue機能で報告してください
Ghidraバージョンと互換性がある場合はreleaseから.zipファイルをダウンロードするか、そうでない場合は以下のビルド方法を参照してください。
これらがない場合、.BinDiffファイルのインポートのみ可能で、Ghidraプロジェクトからの自動エクスポートとdiffはできません
Ghidraでファイルを開いてプラグインがCode Explorerに読み込まれていることを確認し、Code ExplorerでFile->Configureに移動します
右上の小さなプラグアイコンをクリックします:

そしてBinDiffHelperPluginの隣のチェックボックスがチェックされていることを確認します。

対応する.BinExportファイルが同じフォルダにある必要があります。
名前をインポートしたいファイルをコードブラウザで開き、Window->BinDiffHelperに移動します

Open from BinDiffボタンまたはメニュー項目を使用し、.BinDiffファイルを選択します。

インポートしたいすべての関数名を選択し、右上のImport function namesボタンまたはメニュー項目をクリックします。
Window->BinDiffHelperに移動し、BinExportまたはBinDiffに関する警告がないことを確認してから、Open from projectボタンをクリックします。
ツリーからもう一方のファイルを選択し、OKをクリックします。

要件:
それぞれのprotocol buffer定義のためにBinExportに依存しているため、リポジトリを再帰的にクローンします。
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
GHIDRA_INSTALL_DIR環境変数をGhidraのインストールディレクトリに設定する必要があります。
異なるJDKがインストールされている場合は、環境変数JAVA_HOMEがGhidraのインストールで使用されているものを指していることを確認してください。
拡張機能はそのGhidraバージョン専用にビルドされます。
そしてシェルでBinDiffHelperフォルダに移動し、以下を実行します
gradle
これにより、それぞれのサブモジュール内のBinExportと、親ディレクトリ内のBinDiffHelperの両方がビルドされます。distディレクトリに.zipファイルが作成されているはずです。その.zipファイルを使用して、上記の手順に従ってインストールしてください。
Ghidraと一緒に拡張機能をデバッグできると便利なことがあります。以下にいくつかの注意点を示します:
GHIDRA_INSTALL_DIR環境変数を設定する必要があるかもしれませんgradle build eclipseでBinDiffHelperのeclipseプロジェクトを作成しますgradle build eclipseで生成されたクラスパスと、GhidraDevで行われたクラスパスの変更との間に、いくつかのクラスパスの衝突があるかもしれません。拡張機能プロジェクトからコアGhidraインストールのすべての.jarを削除し、GhidraDevに再追加させると役立つことがあります。その後eclipseのデバッグが失敗する場合は、eclipseで拡張機能プロジェクトを閉じて再度開くと役立つことがあります。
eclipseから拡張機能を使ってGhidraをデバッグする場合、拡張機能は自動的にGhidraに読み込まれます(通常の拡張機能インストールを経由しないでください)。ただし、プラグインはCode Explorerで有効にする必要があります。
アイコン提供: Fatcow free icons