該擴展實現了對 Ghidra 的 eBPF 架構支持,並允許反彙編和反編譯 eBPF 程式。
自 2023 年 5 月起,eBPF-for-Ghidra 已包含在官方 NationalSecurityAgency/Ghidra 儲存庫中。
您可以直接在 Ghidra 中取得 eBPF 模組的最新更新和修復。
該存儲庫將來可能會被存檔。
您可以在此處取得 eBPF 程式範例。
eBPF的反組譯和反編譯範例:
File → Install Extensions...
GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle
並使用 Ghidra 安裝它: File → Install Extensions...
GhidraExtensions
目錄。03.09.2019 — eBPF 映射實現,自訂重定位處理程序已實現
2019.09.19 — 堆疊問題已解決
20.09.2019 — eBPF 呼叫幫助程式作為系統呼叫實現,透過自訂 eBPFAnalyzer 新增幫助程式簽名
2019 年 9 月 23 日 — 壞書籤已修復
2020 年 12 月 12 日 — 新增了新的 eBPF 助手
2022 年 6 月 23 日 — 新增了對相對呼叫( R_BPF_64_32
重定位類型)的支援。感謝@cnwangjihe 的這個想法。 call 指令的imm
其中bpf_call->src_reg == BPF_PSEUDO_CALL
現在包含目標函數的相對偏移量。
前:
後:
2022 年 6 月 24 日 — 向官方 Ghidra 儲存庫發出 Pull 請求,作為 eBPF 處理器的主要供應商
2022 年 12 月 19 日 — 新增了對 BPF_ATOMIC 操作的支持,新增了 ALU32 指令,新增了 BPF_JMP32 指令,修復了 JSET 指令
2023 年 5 月 3 日 — eBPF 處理器支援已新增至提交 506ca1e 中的 Ghidra 官方儲存庫中
從 Ghidra 10.3 開始,Ghidra 預設包含 eBPF 模組。無需再建置此專案並將其新增為 Ghidra 擴充功能。對於舊版 Ghidra 的用戶,仍然可以透過現有版本存取 eBPF 模組。
官方內核文檔
官方內核文件 - 問題
在 Ghidra 中測試的 eBPF 程序
Rust 中的簡單 eBPF 反組譯器
Rust 虛擬機器和 eBPF 程式的 JIT 編譯器
eBPF 助手(全部)
eBPF 概述