NSA開源逆向工具Ghidra入門使用教程


背景

昨天,在剛剛舉辦的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)即可使用。

安裝注意事項

  1. Ghidra直接通過壓縮包解壓即可使用,這樣的好處就是可以不用修改各種系統配置,如Windows下的注冊表,便於刪除,壞處是不能直接在桌面上或開始菜單設置快捷方式。
  2. 特定盤符,如C:需要Administrator權限。
  3.  

    Ghidra會使用系統標准的TEMP目錄來存儲相關數據,用戶也可以通過修改support/launch.properties來進行修改。

     

Java環境注意事項

  •  

    Ghidra會通過path自動定位相關的java runtime和development kit版本

     

  •  

    設置Windows下相關JDK path配置

     

 

 

  1.  

    解壓JDK

     

  2.  

    打開系統環境變量設置選項

     

  3.  

    在path中增加in

     

 

 

 

 

 

 

 

 

  •  

    Linux下下相關JDK path配置

     

 

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的可選組件,可以執行以下操作:

 

  •  

    用於編寫拓展Ghidra相關的功能

     

  •  

    將其它的工具和Ghidra集成,如eclipse或IDA

     

 

 

其默認附加了以下的拓展項,可在/Extensions中找到:

 

  •  

    Eclipse:用於在eclipse中安裝GhidraDev eclipse插件

     

  •  

    Ghidra:Ghidra擴展

     

  •  

    IDAPro:和IDA互動的插件

     

 

插件注意

  1.  

    可以通過前端的GUI進行安裝卸載

     

     

    l  文件->安裝拓展

     

     

    l  選擇需要安裝/卸載的拓展程序

     

     

    l  重啟生效

     

  2.  

    需要對GhidraInstallDir具備寫入權限

     

  3.  

    也可以不使用GUI前端目錄,直接將擴展解壓到/ Ghidra / Extensions即可

     

 

開發相關插件

用戶可以通過自定義的Ghidra腳本、插件、分析器來擴展其功能,Ghidra通過提供一個名為GhidraDev的自定義Eclipse插件來支持Eclipse中的開發,該插件可以在/ Extensions / Eclipse目錄中找到。

 

 

具體使用過程

項目創建

通過自帶BAT腳本啟動GUI模式:

 

 

進入之后,會有一個Tip提示,如下所示:

 

 

Ghidra是按項目進行管理的,使用者需要首先創建一個項目:

 

 

輸入項目名:

 

 

項目創建完畢之后生成一個具體的目錄,注意項目文件刪除的時候似乎不能直接通過GUI刪除,需要手動刪除:

 

 

創建好項目之后就可以導入需要反編譯的文件了:

 

 

如下所示我們反編譯測試了calc.exe計算器程序:

 

 

開始反編譯,速度相比於IDA還是慢了不少:

 

 

完成之后,項目文件下會創建對應的項目,雙擊進入:

 

 

進入之后會提示是否進行分析:

 

 

點擊確認后,可以控制相應的分析選項:

 

 

開始分析之后,右下角會有相關的進度條展示:

 

 

目前來看Ghidra是無法自動下載符號的,需要對PDB相關配置進行設置:

 

 

完成分析之后的整體界面如下所示,很有一股濃濃的JAVA風范:

 

 

由於是基於項目的,因此Ghidra中可以同時打開多個反編譯的項目,只需要直接往項目中導入文件即可:

 

 

 

主要功能介紹

360威脅情報中心整理了一些Ghidra反匯編界面中常見且有用的一些功能選項,並進行相關介紹:

 

    •  

      Navigation菜單

       

 

該菜單下是一些主要操作選項:

 

 

  •  

    Window菜單

     

該菜單下是其主要支持的功能窗口,類似於IDA中view->opensubview

 

 

其中的Python功能提供了類似IDAPython的功能,可以通過help()或直接按F1查看對應的功能說明:

 

 

  •  

    腳本管理菜單

     

腳本管理菜單下有大量的JAVA擴展腳本,這也是目前為止筆者覺得能帶來驚喜的一個地方:

 

 

這些腳本選中后是可以直接運行的,如下所示的是字符串搜索功能:

 

 

  •  

    反編譯項目對比功能

     

由於是以項目為單位的,因此支持對同一個項目中的反編譯項目進行對比:

 

 

具體選項如下:

 

 

不過目前看來其效果一般:

 

 

 

常用快捷鍵

Ghidra也支持快捷鍵功能,360威脅情報中心整理了一些Ghidra中常見且有用的快捷鍵進行介紹:

 

    • 雙擊

       

       

 

和IDA一致,直接雙擊可以進入之后的地址函數:

 

 

 

 

  •  

    搜索(Ctrl+SHIFT+E)

     

該快捷鍵用於進行搜索,類似於IDA中的alt+t

 

 

效果如下,速度對比IDA還是要慢上不少:

 

 

 

 

  •  

    書簽(Ctrl+D)

     

該快捷鍵啟用書簽功能:

 

 

 

 

  •  

    反編譯(Ctrl+E)

     

相當於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM