著作権 2011-2024 Google LLC。
このリポジトリには、BinDiff ソース コードが含まれています。 BinDiff は、逆アセンブルされたコード内の相違点と類似点を迅速に見つけるためのバイナリ ファイル用のオープンソース比較ツールです。
BinDiff は、バイナリ ファイル用のオープンソース比較ツールで、脆弱性の研究者やエンジニアが逆アセンブルされたコードの相違点や類似点を迅速に見つけるのに役立ちます。
BinDiff を使用すると、研究者はベンダーが提供するパッチの脆弱性の修正を特定して分離できます。また、同じバイナリの複数のバージョンの逆アセンブリ間でシンボルやコメントを移植するために使用することもできます。これにより、時間の経過に伴う変化の追跡が容易になり、組織が分析結果を保持できるようになり、バイナリ アナリスト間の知識の伝達が可能になります。
BinDiff の使用を開始したい場合は、リリース ページから事前構築済みのインストール パッケージをダウンロードしてください。
注: BinDiff は別の逆アセンブラに依存します。すぐに使える状態で、IDA Pro、Binary Ninja、Ghidra のサポートが付属しています。逆アセンブラ ページには、サポートされている構成がリストされます。
既存のマニュアルのサブセットはdocs/
ディレクトリで入手できます。
BinDiff には次のコンポーネントが含まれています。
cmake
- 外部依存関係を宣言する CMake ビルド ファイルfixtures
- BinDiff コア エンジンを実行するためのテスト ファイルのコレクションida
- IDA Pro 逆アセンブラとの統合java
- Java ソース コード。これには、BinDiff 視覚差分ユーザー インターフェイスと、それに対応するユーティリティ ライブラリが含まれています。match
- BinDiff コア エンジンのマッチング アルゴリズムpackaging
- インストール パッケージのパッケージ ソースtools
- 製品に同梱されるヘルパー実行可能ファイル以下の手順は、ネイティブ コードと Java ベースのコンポーネントの両方を構築するのに十分です。
より詳細なビルド手順は後日追加されます。これには、インストール パッケージを構築するための既製のDockerfile
とスクリプトが含まれます。
BinDiff は CMake を使用して、ネイティブ C++ コードで構成されるコンポーネントのビルド ファイルを生成します。
次のビルド依存関係が必要です。
次のビルド依存関係はオプションです。
deps/idasdk
に解凍)一般的なビルド手順は、Windows、Linux、macOS で同じです。 Linuxの場合のコマンドを以下に示します。
自動的にダウンロードされない依存関係をダウンロードします。
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
次に、ビルド ディレクトリを構成し、ビルド ファイルを生成します。
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
" -DIdaSdk_ROOT_DIR= ${PWD} build/idasdk "
最後に、実際のビルドを呼び出します。バイナリはbuild/out/bindiff-prefix
に配置されます。
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
IDA を使用せずにビルドするには、上記の構成ステップを次のように変更するだけです。
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
-DBINEXPORT_ENABLE_IDAPRO=OFF
Java ベースの GUI を構築するには、グラフの表示とレイアウト用に商用のサードパーティ製グラフ視覚化ライブラリ yFiles が必要です。このライブラリは非常に強力ですが、簡単に置き換えることはできません。
ビルドには、BinDiff は Gradle 6.x と Java 11 LTS を使用します。インストール方法については、インストール ガイドを参照してください。
yFiles ライセンス所有者であると仮定して、 YFILES_DIR
環境変数を yFiles y.jar
およびysvg.jar
含むディレクトリに設定します。
注: BinDiff は、yFiles の古い 2.x ブランチを引き続き使用します。
次に、Gradle を呼び出して外部依存関係をダウンロードし、ビルドします。
Windows:
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
Linux または macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
その後、 java
サブディレクトリのui/build/libs
ディレクトリに、標準のjava -jar
コマンドを使用して実行できる自己完結型のbindiff-ui-all.jar
アーティファクトが含まれるはずです。
BinDiff の背後にある一般的なアイデアを概説した元の論文:
同じ問題領域内の他のツール:
BinDiff を使用するプロジェクト:
BinDiff は、Apache ライセンスの条項に基づいてライセンスされています。詳細については、「ライセンス」を参照してください。
貢献したい場合は、プル リクエストを送信する前に CONTRIBUTING.md をお読みください。バグを報告したり、機能リクエストをファイルしたりすることもできます。