題:
BinDiff如何工作?
perror
2013-04-02 14:35:57 UTC
view on stackexchange narkive permalink

我想知道 BinDiff軟件的基本原理(也許還有一些關於優化和啟發式的東西)。有人對它有很好的教學方法嗎?

@Nirlzr:我看不到將標籤'bindiff'更改為'tool-bindiff'的效果如何...但是,我可能有個主意,所以請告訴我更多...
也許您應該在http://meta.reverseengineering.stackexchange.com/questions/322/bindiff-verses-bin-diffing-tags中發聲
@kennytm:啊,我錯過了這個……很好,謝謝。
二 答案:
newgre
2013-04-03 02:01:48 UTC
view on stackexchange narkive permalink

通常,在撰寫本文時(4.x),BinDiff的當前版本通過匹配功能級別的屬性來工作。基本上,匹配分為兩個階段:首先生成初始匹配,然後在向下鑽取階段中對其進行完善。

初始匹配

首先,BinDiff將基於每個函數的以下屬性:

  • 基本塊的數量
  • 這些塊之間的邊數
  • 子函數的調用次數

此步驟為每個二進製文件提供了一組簽名,這些簽名又用於生成初始匹配集。遵循一對一的關係,BinDiff根據上述特徵選擇這些初始匹配項。

下一步嘗試在每個二進制的調用圖上找到匹配項:對於經過驗證的匹配項,一組為了找到事件更多匹配項,將檢查匹配函數中被調用的函數。只要找到新的匹配項,就會重複此過程。

向下鑽取

在實踐中,並非所有功能都將由初始匹配引起的一對一關係進行匹配策略,因此在確定了初始匹配之後,我們仍然有一系列不匹配的功能。向下鑽取階段的想法是應用多個不同的功能匹配策略,直到找到匹配項為止。應用這些策略的順序很重要:BinDiff首先嘗試假定其具有最高置信度的那些策略。只有找不到匹配項時,才繼續執行下一個策略。重複此操作,直到BinDiff用盡策略或匹配所有功能為止。示例包括MD索引,基於函數名稱(即導入)的匹配,調用圖邊緣MD索引等。

MD-Index紙

基於圖的可執行對像比較

可執行對象的結構比較

(免責聲明:正在@團隊zynamics / google上工作,希望我沒有弄亂任何東西,否則soeren會把我烤死;-))

所以你還在努力嗎?還是僅僅是每個星期五的項目?
我沒有在做它,也從未做過,但是BinDiff並沒有被取消,如果那是您的意思!
Zinamics,BinDiff背後的公司,被Google收購。您可以向坐在反向工程reddit上的一些員工發送消息。
fasmotol
2013-04-02 15:47:17 UTC
view on stackexchange narkive permalink

我只能說幾句關於控制流圖的構建,儘管我的回答絕對不是完整的。

BinDiff使用靜態類型的檢測執行流,我想是因為執行代碼並非總是可能的(例如,對於ring 0驅動程序)或合理的(惡意軟件)。實際上,給定的文件將被反彙編,然後應將其拆分為基本塊(這些代碼具有直接的執行方式,儘管在這種情況下這種定義是正確的)。很明顯(例如考慮x86架構),諸如 jxx 之類的指令會更改程序的控制流。因此,基本塊通常由它們終止。將代碼拆分為塊的過程並不是一項複雜的任務,更具挑戰性的部分是確定跳轉目標。

例如:

  ... jz eax  

因此,我們無法(輕鬆)理解指向此調用的自動靜態分析。瑣碎的情況可以被“模仿”,但總的來說,工作非常艱鉅而令人沮喪。另一種選擇是跟踪程序以查找代碼執行的路徑(可以手動執行)。找到這些塊後,剩下的唯一一件事就是建立人類可讀的圖形。

可以改變執行流程的方式(異常,其他線程的熱補丁,與系統有關的事件等)。

關於圖同態算法的[原創文章](http://www.zynamics.com/downloads/bindiffsstic05-1.pdf)是一個好的開始。最近,有人提出了一些[工具](https://github.com/MartialB/BinSlayer)(請參閱此[論文](http://dl.acm.org/citation.cfm?id=2430557)和[海報](http://royalsociety.org/uploadedFiles/Royal_Society_Content/grants/labs-to-riches/2012/Andy%20king.pdf))。但是,此[Reddit線程](http://www.reddit.com/r/ReverseEngineering/comments/16bc9t/binslayer_fast_comparison_of_binary_executables/)暗示對BinDiff進行了一些改進。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...