Kate Li (Taiwan)的部落格

首頁

google/binnavi:binnavi是一個二進位分析ide,允許檢查、導航、編輯和注釋控制流圖和反彙編程式碼的調用圖。

作者 urbin 時間 2020-03-12
all

版權所有2011-2020 Google LLC

介紹

BinNavi是一個二進位分析IDE環境,它允許用戶檢查、導航、編輯和注釋反彙編程式碼的控制流圖,對可執行文件的調用圖執行相同的操作,收集和組合執行跟踪,並且通常在一組分析人員中跟踪分析結果。

協力廠商依賴的複雜性

BinNavi使用商業協力廠商圖形視覺化庫(yFiles)來顯示和佈局圖形。這個庫非常强大,而且不可替換。

為了使用yFiles執行直接開發,您需要一個developerlicense。同時,我們希望社區能够在不需要商業yFiles許可證的情况下貢獻toBinNavi。為了做到這一點並符合yFiles許可證,所有到yFiles的介面都需要正確地使用。

為了實現這一目標,我們做了以下工作:

com.google.security.zynamics.binnavi com.google.security.zynamics.binnavi.yfileswrap com.google.security.zynamics.zylib com.google.security.zynamics.zylib.yfileswrap com.google.security.zynamics.reil com.google.security.zynamics.reil.yfileswrap

我們正在分發一個預構建的JAR檔案,其中包含yfileswrappsubpackages中的所有程式碼—針對yFiles進行預連結和模糊處理。如果您希望在BinNavi中更改或添加程式碼,並且沒有yFiles許可證,那麼您可以在非yfileswrap包中自由地選擇所需的任何內容—您可以簡單地將lib/yfileswrap-obfuscated.jar輸出到類路徑中以測試並查看結果。

yfileswrap lib/yfileswrap-obfuscated.jar

如果您希望更改yfileswrap子目錄,請注意您需要有效的yFiles許可證,並且您對BinNavi項目所做的任何貢獻都必須遵守他們的授權合約。這意味著您不能簡單地以不同的名稱公開它們的內部api等等。

yfileswrap

我們將強制執行這一點-我們非常高興找到了一種方法來打開帶有yFiles依賴項的sourceBinNavi,並且我們將確保我們所使用的任何程式碼都符合yFiles許可證。

維護者/y檔案許可證持有者注意事項

要重建yFiles包裝庫,首先將y.jar和ysvg.jar複製到協力廠商/java/yFiles。然後重建:

y.jar ysvg.jar third_party/java/yfiles mvn dependency:copy-dependencies ant build-yfiles-wrapper-jar mvn install:install-file \ -Dfile=target/yfileswrap-obfuscated.jar \ -DgroupId=com.google.security.zynamics.binnavi \ -DartifactId=yfileswrap-obfuscated \ -Dversion=6.1 \ -Dpackaging=jar \ -DlocalRepositoryPath=lib

從頭開始構建BinNavi

BinNavi使用Maven進行依賴管理,但不用於實際的構建。Java 11是受支持的最低版本。

要從頭開始構建,請使用以下命令:

mvn dependency:copy-dependencies ant build-binnavi-fat-jar

首次運行BinNavi

請注意,BinNavi使用了一個PostgreSQL中央資料庫來存儲解組/注釋/跟踪,囙此您需要在您可以訪問的地方有這樣一個instancerunning。您可以啟動BinNavi,如下所示:

java -jar target/binnavi-all.jar

將項目導入Eclipse

將程式碼加載到Eclipse中進行進一步的開發需要進行一些配寘。

build.xml PROJECT_LOC/src/main/java java **/yfileswrap/** CMain

你應該準備好從這裡出發。

從IDA匯出解組

作為這個項目的一部分,我們正在分發一個IDA Pro挿件,它將IDA中的組件匯出為binnavi所需的PostgreSQL資料庫格式。運行BinNavi時,只需為IDA配寘正確的路徑,如有必要,按一下“install plugin”按鈕——您現在應該可以導入解部件了。

使用除IDA以外的其他反組譯工具

現在,我們只有IDA匯出挿件,但我們希望有人能在不久的將來幫助我們為其他反組譯工具構建匯出功能。

用Gradle構建BinNavi

請注意,現時Maven構建是BinNavi的權威構建系統,Gradle是純實驗性的,可能會改變。

通過運行以下命令,可以使用gradle構建BinNavi:

在Linux/OS X上:

$ ./gradlew clean jar

在Windows上:

/gradlew.bat clean jar

這將在build/libs/下的項目路徑中生成jar。

build/libs/

用Gradle將項目加載到Eclipse中

在Linux/OS X上:

$ ./gradlew eclipse

在Windows上:

./gradlew.bat eclipse

作為項目創建過程的一部分,它將下載依賴項。完成以下操作後加載到Eclipse中:

現在已經為BinNavi設定並完成了Eclipse工作區。

用Gradle將項目加載到IntelliJ中

在Linux/OS X上:

$ ./gradlew idea

在Windows上:

./gradlew.bat idea

作為項目創建過程的一部分,它將下載依賴項。完成以下操作後加載到IntelliJ:

您的IntelliJ環境現在已為IntelliJ設定並完成。