BindiffHelper
Ghidra擴展程序在您的Ghidra項目上使用Bindiff來查找匹配功能並自動重命名它們(Bindiff 6、7、8支持)。查看Bindiff手冊,以了解其工作原理以及如何匹配功能 /基本塊。但是,通過此擴展,Bindiff是從Ghidra內部自動化的,因此您不必自己分散二進製文件。
請通過GitHub上的問題功能報告錯誤
它的作用 /更改
v0.6
- 更新sqlite驅動程序庫,現在應該在蘋果矽上運行
- 支持分解功能之間的外部文本差異(請參閱#24)
- UI更新
v0.5
- 支持Bindiff 8
- Ghidra 11.1發布
V0.4.3
v0.4.2
- 添加功能以導入所有功能(不僅是在表中選中的功能)
- 添加函數以切換錶中多個元素的複選框
- 更新以支持Ghidra 10.3
v0.4.1
- 更新以支持Gradle 7.5和Ghidra 10.1
v0.4.0
v0.3.2
- 修復了一個錯誤,與同一項目不同的文件差異不起作用
- 修復了一個錯誤的錯誤,其中短名稱(<3字符>)無法擴散
v0.3.1
v0.3
- 列表中的著色匹配功能
- 在鏈接到其他二進制的列表中添加註釋
- 修復了在某些構建中缺少Protobuf庫的錯誤
- 新文件加載菜單
v0.2
- 修復一個錯誤,其中要導入需要檢查的文件。
- 增加項目文件選擇對話框的大小
v0.1
- BINDIFF二進製文件在Ghidra開放了同一Ghidra項目的另一個二進製文件,顯示結果和進口功能名稱
- 從兩個.binexport文件中打開一個用bindiff 6創建的bindiff文件,並在ghidra中導入匹配函數名稱
接下來發布
- 導入功能名稱和功能參數(類型和名稱)
- 將Ghidra打開的二進制與外部.binexport進行比較(例如,來自IDA)
- 與BINDIFF 6 GUI通信以顯示不同功能的圖形
如何安裝
要么從發行版中下載.zip-file,如果它與Ghidra版本兼容,否則請參閱下面的構建。
- 開放吉德拉
- 在主窗口中:轉到file->安裝擴展...
- 單擊右上角的 +-button,然後選擇BindiffHelper zip文件
- 關閉插件管理器。重新啟動Ghidra以加載新插件
- 請參閱下面的用法
推薦其他工具
- Binexport插件二進製文件或從特定ghidra版本的來源編譯
- bindiff(https://zynamics.com/software.html)
沒有這些,您將只能導入.bindiff文件,而不會自動導出並脫離您的Ghidra項目
用法
確保通過在Ghidra中打開文件和代碼Explorer中的文件來確保將插件加載到代碼資源管理器中
單擊右上角的小插件:
並確保檢查bindiffhelperplugin旁邊的複選框。
導入外部.bindiff
相應的.binexport文件需要在同一文件夾中。
打開要在代碼瀏覽器中導入名稱的文件,然後轉到window-> bindiffhelper
使用BINDIFF按鈕或菜單項的打開,然後選擇.bindiff文件。
選擇要導入的所有功能名稱,然後單擊右上角或菜單項中的導入功能名稱按鈕。
比較Ghidra項目中的文件
轉到Window-> BindiffHelper ,請確保沒有有關Binexport或Bindiff的警告,然後單擊“從項目”按鈕中單擊“打開”。
從樹中選擇其他文件,然後單擊“確定”。
如何構建
要求:
- Ghidra安裝(https://ghidra-sre.org)或從源
- 一些JDK。可能會有某些限制,具體取決於您的吉德拉(Ghidra)的構建方式以及您使用的其他插件。我建議使用Temurin 21 LTS,因為目前似乎與Binexport和BindiffHelper一起使用。
- Gradle(用7.5,8.10測試)
克隆存儲庫
遞歸克隆存儲庫,因為它取決於binexport的各個協議緩衝區定義。
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
構建它
您需要將GHIDRA_INSTALL_DIR環境變量設置為Ghidra安裝DIR。如果您安裝了不同的JDK,請確保環境變量JAVA_HOME指向Ghidra安裝使用的指標。
該擴展名將專門為該Ghidra版本構建。
然後轉到外殼中的BindiffHelper文件夾,然後
這將在相應的子模塊中構建binexport,又在父目錄中構建BindiffHelper。應該在DIST目錄中創建一個.zip文件。使用該.zip文件根據上述說明安裝。
開發 /調試設置
有時能夠與Ghidra一起調試擴展名很有用,這裡有一些註釋:
- 克隆並建立吉德拉,讓gradle根據Devguide創建Eclipse項目
- 將項目導入Eclipse(確保其具有相關的插件以進行擴展開發)
- 構建和安裝Ghidradev
- 解開Ghidra的構建並將Ghidradev與它聯繫起來。也許必須設置
GHIDRA_INSTALL_DIR環境變量 - 從Eclipse運行Ghidra並安裝Binexport擴展
- 使用
gradle build eclipse創建BindiffHelper Eclipse項目 - 將其導入Eclipse並使用Ghidradev將其鏈接到Ghidra build
- Debug as-> Ghidra
當將ghidra與Eclipse的擴展程序一起調試時,將擴展名自動加載到Ghidra中(不要通過通常的擴展安裝)。但是,必須在代碼資源管理器中啟用插件。
參考
- https://github.com/google/bindiff/releases
- https://www.zynamics.com/bindiff/manual/
- https://github.com/google/binexport/
圖標來自:FATCOW免費圖標