背景
昨天,在剛剛舉辦的RSA大會上,NSA發布了一款功能強大、免費的開源逆向分析工具:Ghidra。該反匯編工具類似於我們常用的IDA,不過其基於JAVA開發,是一款適用於Windows、Mac和Linux的跨平台反匯編工具,用戶還可以使用Java或Python開發自己的Ghidra插件或者腳本。2017年維基解密在Vault 7中首次曝光了Ghidra,該信息來自於中央情報局(CIA)的內部文件,Ghidra在過去數年里一直被用於NSA相關的網絡安全任務當中。
360威脅情報中心第一時間對該工具進行了詳細分析,梳理了相關說明文檔、具體的安裝使用方法,以及該軟件的相關趣聞解讀,帶你詳細了解這款強大而神秘的安全工具。
Ghidra下載地址
可以通過Ghidra的項目主頁或者GitHub進行下載:
https://Ghidra-sre.org
https://github.com/NationalSecurityAgency/Ghidra
整理的一些官方說明
360威脅情報中心對Ghidra的官方說明文檔進行了梳理,將一些必要的安裝注意事項、文件目錄介紹、使用方法、相關插件的使用等等逐一進行介紹,方便讀者對照安裝使用。
支持平台
Windows 7/Windows 10(64位)
Linux(64位,最好是CentOS 7)
MacOS(10.8.3)
安裝條件
硬件條件:4GB內存;1GB硬盤空間
軟件條件:Java 11+
安裝方法
通過解壓縮工具解壓下載的壓縮包(7-zip,WinZIP,WinRAR)即可使用。
安裝注意事項
- Ghidra直接通過壓縮包解壓即可使用,這樣的好處就是可以不用修改各種系統配置,如Windows下的注冊表,便於刪除,壞處是不能直接在桌面上或開始菜單設置快捷方式。
- 特定盤符,如C:需要Administrator權限。
-
Java環境注意事項
1.解壓JDK
2.編輯~/.bahsrc
Vi ~/.bashrc
3.export PATH=/bin:$PATH
4.保存
當然用戶可能有使用特定版本java的需求,可以通過support/launch.properties中的JAVA_HOME_OVERRIDE來進行配置。不過如果該版本不符合Ghidra的需求,Ghidra是不會運行的。
運行Ghidra
GUI 模式
切換到GhidraInstallDir目錄,運行GhidraRun.bat(Windows)或GhidraRun(linus 或macOS),即可在GUI模式下啟動Ghidra:
啟動界面如下:
Ghidra Server
Ghidra支持多人協作完成一個逆向項目,各種研究人員在自己設備上進行相關的逆向任務,並將其修改提交到公共的存儲庫中,相關配置在Ghidra Server中有詳盡的說明。
命令行模式
有別於傳統的GUI模式,使用者可以通過命令行模式進行批量化的反編譯工作。
獨立的JAR包模式
Ghidra允許將其中的部分文件打包為JAR包並單獨運行,以便於更方便的通過命令行模式進行啟動,也方便於作為單獨的Java逆向工程庫。使用者可以通過/ support / buildGhidraJar創建單獨的Ghidra.jar文件並使用。
擴展
拓展是Ghidra的可選組件,可以執行以下操作:
其默認附加了以下的拓展項,可在/Extensions中找到:
插件注意
開發相關插件
用戶可以通過自定義的Ghidra腳本、插件、分析器來擴展其功能,Ghidra通過提供一個名為GhidraDev的自定義Eclipse插件來支持Eclipse中的開發,該插件可以在/ Extensions / Eclipse目錄中找到。
具體使用過程
項目創建
通過自帶BAT腳本啟動GUI模式:
進入之后,會有一個Tip提示,如下所示:
Ghidra是按項目進行管理的,使用者需要首先創建一個項目:
輸入項目名:
項目創建完畢之后生成一個具體的目錄,注意項目文件刪除的時候似乎不能直接通過GUI刪除,需要手動刪除:
創建好項目之后就可以導入需要反編譯的文件了:
如下所示我們反編譯測試了calc.exe計算器程序:
開始反編譯,速度相比於IDA還是慢了不少:
完成之后,項目文件下會創建對應的項目,雙擊進入:
進入之后會提示是否進行分析:
點擊確認后,可以控制相應的分析選項:
開始分析之后,右下角會有相關的進度條展示:
目前來看Ghidra是無法自動下載符號的,需要對PDB相關配置進行設置:
完成分析之后的整體界面如下所示,很有一股濃濃的JAVA風范:
由於是基於項目的,因此Ghidra中可以同時打開多個反編譯的項目,只需要直接往項目中導入文件即可:
主要功能介紹
360威脅情報中心整理了一些Ghidra反匯編界面中常見且有用的一些功能選項,並進行相關介紹:
該菜單下是一些主要操作選項:
該菜單下是其主要支持的功能窗口,類似於IDA中view->opensubview
其中的Python功能提供了類似IDAPython的功能,可以通過help()或直接按F1查看對應的功能說明:
腳本管理菜單下有大量的JAVA擴展腳本,這也是目前為止筆者覺得能帶來驚喜的一個地方:
這些腳本選中后是可以直接運行的,如下所示的是字符串搜索功能:
由於是以項目為單位的,因此支持對同一個項目中的反編譯項目進行對比:
具體選項如下:
不過目前看來其效果一般:
常用快捷鍵
Ghidra也支持快捷鍵功能,360威脅情報中心整理了一些Ghidra中常見且有用的快捷鍵進行介紹:
-
雙擊
和IDA一致,直接雙擊可以進入之后的地址函數:
該快捷鍵用於進行搜索,類似於IDA中的alt+t
效果如下,速度對比IDA還是要慢上不少:
該快捷鍵啟用書簽功能:
相當於IDA中的F5,展示反編譯后的代碼:
類似於IDA中的Ctrl+X:
更多操作
更多詳細的快捷鍵和操作可見解壓后docs文件夾中的CheatSheet.html文件:
一些趣聞:關於JDWP遠程代碼執行
在Ghidra發布后不久,HackerFantastic就在Twitter發布了Ghidra存在JDEWP的遠程代碼執行問題:
JDWP是指開放了一個調試端口,可以遠程訪問:
筆者默認的環境下可以看到這個JAVA的調試端口並沒有啟動:
筆者在對應的support下看到了對應的launch.sh腳本,這個腳本確實會開啟一個對應的端口,但需要通過debug和debug-supend參數啟動:
實際上我們使用的GhidraRun也是通過launch.bat進行啟動的:
只是GhidraRun使用的是bg參數,並不會激活對應的調試模式:
因此從目前來看正常的GUI啟動時不會激活該功能,但是由於launch本身是主要的啟動入口,在沒有詳細深入分析前,不排除有其他方式通過debug和debug-supend參數進行調用,因此建議手動patch代碼。
總結
目前來看Ghidra具有反編譯功能,查看、定位反編譯后的代碼相較於IDA有優勢。不過在使用過程中發現其處理某些混淆后代碼的能力還比較欠缺,在一些界面功能上也還有較大的差距,此外基於JAVA開發的原因也使得其在性能上有一些欠缺。
參考鏈接
https://Ghidra-sre.org/CheatSheet.html
https://Ghidra-sre.org/InstallationGuide.html
https://github.com/NationalSecurityAgency/Ghidra