该扩展实现了对 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 概述