版權所有 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 視覺diff 使用者介面及其對應的實用程式庫。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 下載外部依賴並建置:
視窗:
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
目錄應包含自包含的bindiff-ui-all.jar
工件,可以使用標準java -jar
指令執行該工件。
原始論文概述了 BinDiff 背後的一般想法:
同一問題空間中的其他工具:
使用 BinDiff 的專案:
BinDiff 根據 Apache 授權條款取得授權。請參閱許可證以了解更多資訊。
如果您想做出貢獻,請在發送拉取請求之前閱讀 CONTRIBUTING.md。您也可以報告錯誤或提交功能請求。