Ghidra教學:入門及充分利用Ghidra的完整指南

最後更新: 28/02/2026
作者: 艾薩克
  • Ghidra 是由美國國家安全局 (NSA) 開發的一款功能強大的免費開源逆向工程套件,用於分析多個平台上的二進位。
  • 該工具需要 64 位元系統和 JDK 11,並且可以在 Windows、Linux 和 macOS 上使用 Gradle 進行編譯,以確保始終使用最新版本。
  • 正確的專案配置、程式碼瀏覽器使用者介面、捷徑和外部資料類型是最大限度地發揮分析能力的關鍵。
  • Java 和 Python 腳本、類型資料庫以及其他簽章使 Ghidra 成為惡意軟體分析和進階逆向工程的非常可靠的選擇。

吉德拉教程

如果您有興趣 逆向工程和二進位分析你幾乎不可能沒聽過 Ghidra。這款工具由美國國家安全局 (NSA) 在內部使用十多年後發布,已成為 IDA Pro 和其他商業反彙編軟體的有力替代品,尤其因為它免費、開源且功能極其強大。

接下來您將找到非常完整的指南。 從零開始創建 Ghidra本文將介紹 Ghidra 是什麼,使用 Ghidra 需要哪些工具,如何在不同的作業系統上安裝或編譯 Ghidra,如何創建你的第一個項目,如果你之前使用過 IDA,如何調整 Ghidra 的介面以方便使用,以及如何對可執行檔進行初步的基本分析。本文的目標是讓你讀完後能夠自信地使用 Ghidra 開啟二進位檔案並輕鬆瀏覽其環境。

我打開一個網站時,收到一條訊息說我的電腦感染了病毒。
相關文章:
進入網站時收到「我感染了病毒」的提示:這是什麼病毒?該如何處理?

什麼是吉德拉?它為何成為一個轉捩點?

吉德拉是 用 Java 開發的逆向工程套件 由美國國家安全局 (NSA) 開發。十多年來,它一直是用於分析惡意軟體、韌體、不同平台的可執行檔案以及任何需要反彙編或反編譯以了解其行為的二進位檔案的內部工具。

Ghidra 於 2019 年上市,打破了先前存在的模式:近二十年來,如果你想認真地投身於… 專業逆向工程在此之前,IDA Pro(通常會搭配付費反編譯器)是主流選擇,這是一款價格昂貴且生態系統非常成熟的軟體。雖然也有其他工具,但鮮有能與之匹敵的。 Ghidra 的出現,作為一款免費開源軟體,徹底改變了社群的格局。

最初最令人驚訝的是,Ghidra 與許多分析師接受培訓時使用的傳統工具並不完全相同。它基於 Java 的介面、模組化方法以及… 略有不同的窗戶佈局這導致許多人一開始嘗試使用,但感到有些迷茫,於是又回到使用 IDA 或其他程式的傳統工作流程。

然而,隨著專案的成熟,透過新版本的發布、漏洞修復和持續改進,Ghidra 已成為一款完全有效的逆向工程工具。 良好的初始介面設定透過自訂快捷方式和一些類型的資料庫,許多分析師發現他們可以舒適且有效率地工作,而不會太懷念以前的工作環境。

Ghidra的基本要求和功能

在你開始瘋狂剖析二進位檔案之前,了解 Ghidra 正常運作所需的條件以及它開箱即用的功能至關重要。從技術上講,它是一個 應用程式是用 Java 編寫的這使得它具有跨平台(Linux、macOS 和 Windows)的優勢,但缺點是依賴相對較新的 Java 虛擬機器。

該工具本身推薦的最低要求相當合理: 64位元作業系統 (任何當前版本的 Linux、macOS 或 Windows),至少 4 GB 內存,以及大約 1 GB 的磁碟空間用於基本安裝和初始專案。顯然,二進位檔案越大越複雜,您就越需要更多的記憶體和 CPU 資源。

必須有一個 Java 開發工具包 (JDK) 11 或更高版本。 Ghidra 的執行並非完全依賴虛擬機,因為許多元件和腳本都依賴此開發環境。如果您使用從 GitHub 下載的預編譯套件,該套件本身通常已準備好與適當的 JDK 配合使用;但如果您從原始程式碼編譯,則需要正確安裝 JDK。

吉德拉的優勢之一是其龐大的 可擴展性您可以使用 Java 或 Python(透過 Jython)開發自己的模組、腳本和擴充程序,以實現分析自動化、產生報告、建立模式偵測器或整合其他工作流程。此外,Ghidra 還支援與 Eclipse 等環境集成,並提供與 IDA Pro 等參考工具互通的機制。

值得澄清的是,雖然該專案現在是開源的,程式碼也已發佈在 GitHub 上,但在發布後的最初幾個月裡,情況略有不同:最初,發布過程較為緩慢,並非所有程式碼庫都已開源。截至目前, 官方 Ghidra 儲存庫 它記錄了社區的積極發展、事件和貢獻。

工具的安全和信任警告

儘管 Ghidra 已被廣泛使用,並且是由一家知名的政府機構發布的,但不應忘記它仍然是一種… 龐大而複雜的程式碼庫它依賴眾多第三方函式庫。其中一些庫過去曾出現過漏洞,因此可以合理地推斷,未來可能會出現新的安全漏洞。

無法絕對保證 Ghidra 的當前程式碼完全沒有漏洞,也無法保證不會有人利用依賴項中的漏洞執行惡意程式碼。明智的做法是… 將 Ghidra 視為任何其他複雜的工具。保持更新,從官方來源下載版本,在受控環境中運行應用程序,除非絕對必要,否則不要將其與關鍵系統混用。

在專業環境中,通常最好在…中運行它。 專用虛擬機 或者在隔離環境中,尤其是在分析來源不明的惡意軟體或二進位時。請記住,在載入惡意樣本時,分析引擎或外掛程式的任何故障都可能被視為攻擊途徑,儘管這種情況相對罕見。

如何取得 Ghidra:預編譯二進位檔還是從程式碼編譯

使用 Ghidra 最快的方法是下載 穩定版本已在 GitHub 上發布。 以 ZIP 壓縮包的形式提供。這些預編譯的二進位檔案通常比主開發分支落後幾個月,但作為回報,它們為大多數用戶提供了更高的穩定性和更可控的體驗。

  7 個最佳資料庫程序

如果你想始終擁有 最新功能和最新修復或者,您可以直接克隆官方程式碼庫並自行編譯 Ghidra。雖然這種方法並不適合所有人,但它為那些想要修改程式碼、提交修補程式或測試尚未發佈到穩定版本的功能的用戶提供了極大的靈活性。

在很多情況下,這正是建議的做法:下載 原始碼以 ZIP 檔案格式提供 或者,您可以複製 Git 倉庫並在本地產生二進位文件,利用 Gradle 的自動化建置流程。完成首次建置(通常由於依賴項下載而最消耗資源)後,保持工具更新就相對容易了。

無論選擇哪種方法,驗證都至關重要。 簽名和哈希 從 GitHub 或其他官方來源下載的軟體包中取得 Ghidra 的安裝包。這降低了惡意檔案偽裝成合法 Ghidra 版本的風險。

如何在 Windows 上逐步編譯 Ghidra

在 Windows 系統上,除了 Java 和 Gradle 之外,您還需要… Visual Studio 提供的本機編譯器現代版本,例如 Visual Studio 2017 或更高版本,都能很好地工作,而 Community 2022 版本通常足以滿足此目的。

典型的建置工作流程始於開啟一個視窗 CMD(命令提示字元) 然後使用以下命令導航到 Ghidra 原始碼所在的目錄:
cd %directory_of_ghidra_source_code%

進入專案目錄後,可以使用專案樹中提供的 Gradle 腳本來初始化專案結構、下載所有相依性並準備環境。通常的命令類似於:
gradle.bat -I .\gradle\support\fetchDependencies.gradle init
這個過程可能需要 5 到 10 分鐘,具體時間取決於您的網路連線和 Gradle 快取的狀態,因為它必須… 下載所有必要的庫.

如果一切順利,流程結束後,您會在控制台上看到一則訊息,內容如下: 建立成功此外,還需要確認已正確偵測到 Visual Studio 安裝,這是繼續編譯本機模組的必要條件。

初始化階段結束後,剩下的就是啟動主工具建置:
gradle.bat buildGhidra
這一步驟可能也需要一些時間,出現警告也是正常的,但只要最終結果是“建置成功”,就可以認為編譯成功。

該過程完成後,整個 Ghidra 軟體包將被打包成一個 ZIP 文件,並放置在該目錄中。 建構/分發使用方法很簡單,只需將 ZIP 檔案解壓縮到你喜歡的資料夾,然後執行腳本即可。 ghidraRun.bat它負責使用適當的配置啟動應用程式。

在 Linux 上編譯 Ghidra

在 GNU/Linux 系統上,基本想法相同,但需要的不是 Visual Studio,而是… GCC 的現代版本例如,Series 9 或 12 通常都能達到不錯的效果。此外,當然,Java 和 Gradle 必須正確安裝在系統上,如果您需要的話。 執行 Windows 軟體 Linux 系統下有像 Bottles 這樣的解決方案。

第一步是開啟終端,並使用以下命令切換到 Ghidra 程式碼所在的目錄:
cd <directorio_del_codigo_de_ghidra>
接下來,啟動初始 Gradle 進程,下載依賴項並配置項目,使用的命令如下:
gradle -I ./gradle/support/fetchDependencies.gradle init

就像在 Windows 系統中一樣,這個初始化階段需要 活躍的互聯網連接 這通常需要幾分鐘。 Linux 系統中需要特別注意一點:如果您的區域設定不是英文(例如,如果您使用俄語或西班牙語),GCC 的本地化訊息可能會導致一些解析輸出的腳本無法正常運作。

為避免在地化問題,建議在執行 Gradle 時強制環境語言為英語,例如使用以下命令:
LANG=C gradle -I ./gradle/support/fetchDependencies.gradle init
這樣,GCC 輸出就會產生英文版本,而依賴該輸出的腳本也能正常執行,不會出現意外情況。

當初始化過程成功完成後(您將看到以下訊息), 建立成功現在是時候建造吉德拉以及與之相關的其他部件了:
gradle buildGhidra
編譯完成後,您將在該目錄中找到一個已準備好的 ZIP 檔案。 建構/分發只需解壓縮並運行 shell 腳本即可。 ghidraRun 位於提取的樹的根目錄以啟動應用程式。

在許多發行版中,開發版本(例如,本文所述時的 10.3-DEV)使用預設值 “Nimbus”介面主題如果您仍有疑慮,可以從工具的選項中輕鬆更改,我們稍後會看到。

在 macOS 上編譯 Ghidra

在 macOS 上,該過程與 Linux 非常相似,區別在於您需要安裝… Xcode 命令列工具這些工具可以取代 GCC 和 Make 等 Gradle 在建置過程中使用的其他實用程式。

若要檢查是否已安裝這些命令,您可以開啟終端機並執行以下命令。 gcc如果系統偵測到工具缺失,macOS 將顯示一個對話方塊。 下載並安裝命令列工具您接受後,等待下載完成,就完成了。

利用現有工具,在 macOS 上編譯 Ghidra 的方法與在 Linux 上相同:使用以下命令導航到原始碼目錄:
cd <directorio_del_codigo_de_ghidra>
然後執行 Gradle 初始化命令來取得相依性並配置專案:
gradle -I ./gradle/support/fetchDependencies.gradle init

初始化完成後,主建置過程開始:
gradle buildGhidra
當它完成並顯示訊息時 建立成功您的 ZIP 檔案將準備就緒。 build/dist剩下的就是將軟體包解壓縮到你選擇的資料夾,然後用腳本啟動 Ghidra。 ghidraRun 根據您的設置,可以透過終端或雙擊來操作。

在 macOS 上,Ghidra 的圖形介面通常採用預設設定 原生外觀 它與系統非常契合,這有助於在視覺上將其整合起來,因為它不會與其他桌面應用程式發生衝突。

第一步:建立一個專案並開啟程式碼瀏覽器

一旦 Ghidra 啟動並運行,你需要理解的第一個概念是: 項目Ghidra 不會直接作業系統文件,而是將二進位檔案匯入到自己的資料庫中,並將您產生的所有分析、註釋、資料類型、結構、標籤和其他資訊儲存在其中。

  修復 ERR_SSL_PROTOCOL_ERROR 錯誤

首先,打開選單 文件 -> 新建項目… 在 Ghidra 主視窗中,您可以選擇共用專案(在伺服器上共用,用於協作)或本機專案。如果您是唯一進行修改的人,那麼非共享專案就足夠了。

在精靈中,指定項目所儲存的檔案系統路徑以及 你想給它取什麼名字?確認後,您將看到專案窗口,其中包含一個空的儲存庫,可用於存放您的二進位檔案。這種結構與資料庫集合有些類似,每個匯入的檔案都會產生自己的一組資訊。

下一步是啟動名為「主要分析工具」的程式。 程式碼瀏覽器您可以透過專案視窗的「工具」功能表執行此操作(例如,「工具」->「執行工具」->「程式碼瀏覽器」),或在匯入二進位檔案後將其拖曳到「綠色龍頭」圖示上。

CodeBrowser 將開啟一個由多個視圖組成的介面:一個顯示已組裝指令的主列表,以及包含多個視圖的部分。 符號樹和資料類型它包含一個高級反編譯視窗和一個用於查看日誌和訊息的控制台。本質上,它是你日常使用 Ghidra 的核心。

配置 Ghidra 介面以獲得舒適的工作體驗

對於許多從IDA或其他工具轉過來的使用者來說,Ghidra給人的第一印像是介面有些不同,有時甚至略顯混亂。不過,好消息是幾乎所有元素都可以自訂。 調整、重新定位和自訂 從工具的選項中。

若要存取 CodeBrowser 的全域設置,請使用選單 編輯 -> 工具選項…在這裡,您可以修改視覺佈局(顏色、字體、顯示的欄位、滑鼠行為)以及鍵盤快速鍵和其他影響您日常工作流程的內部方面。

許多人最先錯過的事情之一是 緊湊型導覽列這與其他反彙編器提供的功能類似。 CodeBrowser 也具備此功能,但通常預設為停用。您可以點擊捲軸旁的「概覽」按鈕啟用它,該按鈕會顯示二進位檔案的垂直概覽。

鍵盤快捷鍵是另一個關鍵點。預設值可能會讓人困惑,而且與 Eclipse 等環境中的設定非常相似,這並不總是符合多年使用 IDA 的使用者的肌肉記憶。您可以在工具選項的「按鍵綁定」部分進行設定。 搜尋特定操作並重新指派按鍵 根據您的喜好(例如,C 標記代碼,D 標記數據,X 標記外部引用,Esc 標記返回等)。

此外,建議在「清單顯示」中調整拆卸清單的外觀,以進行選擇。 舒適的字體和顏色您也可以在「清單欄位 -> 陣列選項」中配置陣列或字串顯示的最大行數等詳細資訊。您甚至可以指定以十六進制顯示數組索引,以避免混淆。

實用視覺設定:位元組、高亮顯示和字段

在「清單欄位」部分,Ghidra 允許您修改彙編程式碼周圍顯示的幾乎所有元素:位址、位元組、操作、運算元、註解、標籤等等。這使您可以構建一個 更緊湊或更詳細的視圖,以您覺得最舒服的方式為準。

例如,如果您希望每個指令佔用一行,可以轉到「位元組欄位」並將「要顯示的最大行數」值設為 1,這樣可以消除不必要的換行符。如果您覺得大寫字母更容易閱讀,也可以選擇將位元組顯示為大寫字母。 十六進位大寫字母.

文字高亮是另一個經常讓新手感到困惑的功能。預設情況下,Ghidra 使用滑鼠中鍵來高亮顯示條目、值或標籤,這在許多現代滑鼠上並不直觀。在“遊標文字高亮”設定中,您可以將“啟動的滑鼠按鈕”選項變更為“左鍵”,這樣… 按一下滑鼠左鍵以啟動高亮顯示 感覺更自然。

在函數部分,勾選「標記函數入口」和「標記函數出口」非常有用,這樣可以在程式碼清單中直觀地顯示每個函數的起始和結束位置。同時,許多用戶傾向於在“標籤欄位”中停用“顯示函數標籤”,以減少每個函數頭中的冗餘行。 清除視圖.

最後,如果您覺得水平滾動很煩人,可以取消選取「清單欄位」中「滑鼠」下的對應選項。這將強制使用更適合視窗寬度的佈局,優先考慮… 更自然的垂直滾動.

配置符號、資料型別和交叉引用

當你開始嘗試使用 Ghidra 的符號視圖和資料類型時,它的真正強大之處就會顯現出來。在程式碼瀏覽器的左側,你會找到… “符號樹”這樣,您就可以輕鬆找到函數、匯入、匯出和其他關鍵符號,從而了解二進位檔案的結構。

就在下方, “資料類型管理器” 它充當所有已知類型的集中式儲存庫:結構體、類型定義、枚舉、遊標等等。您可以從這裡使用下拉式選單載入外部類型庫(例如 Windows 定義),或建立自己的類型。 反編譯後的程式碼比較容易理解。.

交叉引用(XREF)也可以微調。在「清單欄位 -> XREF 欄位」中,您可以增加顯示的最大引用數量,這樣當滑鼠懸停在位址上時,就會顯示更多相關的呼叫或存取記錄。這在惡意軟體分析中尤其有用,因為追蹤在惡意軟體分析中至關重要。 使用特定 API 或函數的地方.

此外,Ghidra 還允​​許您使用介面中的「編輯清單欄位」按鈕,動態變更位址、位元組和操作碼列的寬度。啟動後,您可以 拖曳並調整每個欄位的大小 自訂您的設定。退出 CodeBrowser 時,選擇「儲存工具」即可儲存配置,確保您偏好的設計得以保留。

導入二進位檔案並啟動自動分析。

現在介面基本上符合您的喜好,是時候匯入您的第一個檔案了。在項目視窗中,使用選單 文件 -> 導入文件… 然後選擇要分析的可執行檔、庫或二進位。 Ghidra 會將內容複製到其內部資料庫,因此理論上您可以… 刪除原文件 從檔案系統匯出,且不遺失匯入的樣本。

  EA 宣布終止 Origin 支援:這些變化將影響 PC 玩家

在導入過程中,該工具將嘗試 自動辨識格式和語言 從文件中讀取。 Ghidra 中的「語言」並非指人類語言,而是指處理器架構、位元組序和編譯器變體的組合。如果無法偵測到格式或格式較為原始,您可以手動選擇語言和其他一些選項。

在匯入選項中,您可以決定是否要載入外部庫。例如,在 Windows 可執行檔中,這表示 Ghidra 可以嘗試解析並載入外部程式庫。 依賴的 DLL 為了豐富分析內容。在其他情況下,您可能更願意停用該選項,以便僅關注主二進位。

匯入完成後,Ghidra 會顯示一份摘要,其中包含文件類型、平台、格式(例如,Windows 上的 PE 檔案)以及一個「附加資訊」部分,您可以在其中查看所有預期庫是否都已正確找到,或者是否有任何缺失。這些資訊對於理解 Ghidra 至關重要。 您已載入可執行生態系統的哪些部分? 哪些沒有。

導入二進位檔案後,它會顯示在專案視窗中。您可以雙擊該檔案或從選單中選擇相應選項,在程式碼瀏覽器中開啟它。此時,Ghidra 會詢問您是否要執行自動分析或稍後執行。

探索程式碼瀏覽器:視圖、樹狀結構和反編譯

在開始分析時,吉德拉應用了一系列「分析器」或 專門負責識別程式碼、資料、函數和引用的任務這些分析器的預設配置在大多數情況下通常都足夠用了,不過您始終可以存取選項面板,根據需要啟用或停用特定模組。

隨著分析的進行,您會看到指令清單不斷增長,新增函數、標籤和自動註釋。左側面板中的「程式樹」顯示了… 文件邏輯結構 (段、節、區塊),而「符號樹」會依類別(功能、標籤、命名空間等)將符號分組。

中間是經典的彙編器視圖,您可以逐地址導航、跳到函數、追蹤函數呼叫以及查看指令序列。右側是……的視圖。 反編譯程式碼 它嘗試從彙編程式重建 C(或其他高階語言)表示,這在許多情況下大大加快了對程式碼的理解。

控制台底部顯示分析日誌、警告和錯誤訊息。通常,未分析的功能、特定分析器的問題或可疑資料結構的警告等詳細資訊都可以在這裡找到。這裡是檢查所有操作是否正確執行的好地方。 按預期運行 或是否應該進行另一次局部分析。

基本導覽操作透過滑鼠和鍵盤完成:您可以追蹤呼叫、返回上一步、跳到引用、重命名符號或即時定義新函數。只要稍加練習,您使用 CodeBrowser 的工作流程就會變得非常流暢靈活,尤其是在您將快捷鍵適應到自己的工作習慣之後。

腳本、Python 控制台和功能擴展

《吉德拉》不僅僅關乎視覺效果;它還帶來了… Java 和 Python 腳本集合 這些腳本可以幫助您自動執行許多常規分析任務。它們由「腳本管理器」進行管理,您可以透過相應的按鈕或「視窗」功能表存取該管理員。

在腳本管理器中,您可以找到用於各種任務的腳本:從查找特定函數模式到提取字串、生成報告、應用簽名、調整資料類型或搜尋。 特定編譯器的典型結構您可以直接執行這些腳本,也可以根據需要進行修改,或使用 Ghidra API 建立自己的腳本。

此外,該工具還包括 基於 Jython 的互動式 Python 控制台可透過「視窗 -> Python」存取。在這個控制台中,您可以使用簡單的呼叫來探索 Ghidra API,例如: dir()可以操作已載入的程序,建立臨時自動化,或在將程式碼片段整合到永久腳本之前對其進行測試。

這個腳本編寫功能是許多分析師最終選擇繼續使用 Ghidra 的主要原因之一:它允許他們構建 高度客製化的分析流程將其與其他工具集成,可大幅減少重複性體力勞動。

簽章、附加資料類型和惡意軟體分析

Ghidra 開箱即用,自帶豐富的資料類型和函數簽名,但如果您從事 Windows 環境下的惡意軟體分析,您可能會注意到: 該系統的許多特定類型都缺失了。 這對於正確理解 API 呼叫和內部結構至關重要。

為了彌補這一不足,社區已經產生了 擴展類型資料庫 對於 Windows 系統,以及不同版本 Visual Studio(例如 VS2013)和其他編譯器(例如 Delphi)的 FIDB 簽署文件,這些資料庫可以載入到資料類型管理器中,並用作參考,以增強對樣本的分析。

整合後,您會看到反編譯後的程式碼變得更加清晰,結構也以某種方式顯示出來。 重要人物 而且,使用複雜 API 的函數流程也更容易理解。所有這些都促使 Ghidra 逐漸成為一個功能日益全面的專業分析平台。

顯然,它還有改進的空間,某些平台仍然存在不足,但作為一個開放項目,它使得社區更容易隨著時間的推移貢獻更多的定義、腳本和模板,這鞏固了它作為許多逆向工程實驗室中心工具的地位。

考慮到以上所有因素,Ghidra正在確立自己為一家… 一個強大、靈活且免費的替代方案 對於任何想要獲取二進位檔案的人來說,無論是為了學習漏洞利用技術、練習 CTF、調查惡意軟體還是審核專有軟體,只要它保持最新、配置合理,並附有針對目標平台的類型和簽名的良好資料庫,都是可以的。