逆向分析神器BinNavi開源了
得益于IDA pro十分開放的架構,Gergely Erdelyi和Ero Carrera在2004年基于IDA pro發(fā)布了IDAPython,逆向工程師能夠以Python腳本的形式訪問IDC腳本引擎核心、完整的IDA插件API,以及所有與Python捆綁在一起的常見模塊。IDAPython無論是在商業(yè)產品中(例如Zynamics的BinNavi),還是在一些開源項目中(例如Paimei和PyEmu)均有所應用。
今天,商業(yè)版本的BinNavi終于開源了!下載地址。
功能簡介
1)開放式數(shù)據(jù)庫格式:zynamics BinNavi現(xiàn)在所有的數(shù)據(jù)存儲在MySQL數(shù)據(jù)庫中方便,靈活的格式。這有利于減輕解體分配結果導致的多重用戶,數(shù)據(jù)管理和備份。
2)集成的Python解釋程序:zynamics BinNavi允許訪問整個解體,所有callgraph和flowgraph的結構,更方便的從一個綜合的Python命令行調試內存和寄存器。
3)可用性zynamics BinNavi GDB允許在任何平臺上調試:支持調試串行協(xié)議。這包括大多數(shù)的Unix和網(wǎng)絡的嵌入式設備,如思科路由器和防火墻VPN設備。
4)zynamics BinNavi目前支持的平臺(用于調試)是Win32/x86和Linux/x86 (ptrace ),可以在WinCE/ARM中調試和實驗。圖形用戶界面是純Java的,以在windows,MacOS和Liunx測試成功。
復雜的第三方依賴
BinNavi使用一個第三方的商業(yè)圖形可視化庫 (yFiles) ,這個庫十分強大而且難以替換。為了使用yFiles直接進行開發(fā),你需要獲取開發(fā)人員許可。與此同時我們希望你能夠為BinNavi社區(qū)做出貢獻,而不必拘于yFiles商業(yè)許可。為了在不破壞yFiles許可的前提下做到這一點,所有連接到y(tǒng)Files的接口都需要經(jīng)過混淆處理。
為了實現(xiàn)這個目標,我們做了如下這些事:
BinNavi以及所有的庫都拆分成兩部分:項目一部直接依賴于yFiles,我們把這一部分叫做"yfileswrap":
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文件到"yfileswrap" 分包中的代碼中(預先鏈接并混淆yFiles)。如果你想在BinNavi中添加或者刪除代碼但沒有yFiles的許可,這時你就可以自由的在non-yfileswrap分包中充分發(fā)揮你的想象力,你可以將lib/yfileswrap-obfuscated.jar放入類路徑中進行測試并查驗結果。
如果你想改變yfileswrap分包,請注意你得需要一個yFiles許可!
搭建Binnavi
BinNavi使用Maven進行依賴關系管理,但實際上沒有進行構建。從頭開始構建使用這些命令:
mvn dependency:copy-dependencies ant -f src/main/java/com/google/security/zynamics/build.xml \ build-binnavi-fat-jar
初次運行Binnavi
請注意Binnavi主要使用PostgreSQL數(shù)據(jù)庫存儲disassemblies/comments/traces,所以你需要一個你能夠訪問到的實例。
你可以使用下面方法構建/打開Binnavi
ant -f src/main/java/com/google/security/zynamics/build.xml \ build-binnavi-fat-jar java -jar target/binnavi-all.jar
把項目加載到Eclipse
將代碼加載到Eclipse之后,我們還需要進行一些配置。
1)下載依賴性組件(如上所述)并確定你有正確安裝Java SDK 1.8
2)創(chuàng)建一個“從現(xiàn)有Ant構建文件中創(chuàng)建一個Java項目”并使src/main/java/com/google/security/zynamics/build.xml文件
3)在目標"build-binnavi-jar"中選擇'"javac" 任務
4)打開項目屬性對話框
5)編輯源文件夾:
1.有關文件夾位置:$SRCDIR/src/main/java
2.文件名:java
3.點擊下一步
6)將binnavi/yfileswrap, zylib/yfileswrap,和reil/yfileswrap添加到排除的目錄列表中
7)點擊運行>調試配置,選擇Java應用程序,然后搜索"CMain".
從IDA輸出反匯編
作為項目的一部分,我們只分配了一個只讀二進制(sorry!)IDA pro插件從IDA輸出的反匯編轉換成Binnavi所需要的Postgresql數(shù)據(jù)庫格式。當運行Binnavi,只需簡單的配置正確的IDA路徑,如果有必要的話還需要單擊“安裝插件”按鈕。
使用其他反匯編程序
沒錯,我們現(xiàn)在僅支持IDA導出插件。未來我們非常希望有朋友能夠幫助我們構建其他的插件!