ส่วนขยายใช้การรองรับสถาปัตยกรรม eBPF สำหรับ Ghidra และอนุญาตให้แยกชิ้นส่วนและถอดรหัสโปรแกรม eBPF ได้
ตั้งแต่เดือนพฤษภาคม 2023 eBPF-for-Ghidra ได้รวมอยู่ในพื้นที่เก็บข้อมูล NationalSecurityAgency/Ghidra อย่างเป็นทางการ
คุณสามารถรับการอัปเดตและการแก้ไขล่าสุดสำหรับโมดูล eBPF ได้โดยตรงใน Ghidra
repo นี้อาจถูกเก็บถาวรในอนาคต
ตัวอย่างของโปรแกรม eBPF ที่คุณสามารถหาได้ที่นี่
ตัวอย่างการแยกส่วนและการคอมไพล์ eBPF:
File → Install Extensions...
GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle
และใช้ Ghidra เพื่อติดตั้ง: File → Install Extensions...
GhidraExtensions
03.09.2019 — การใช้งานแผนที่ eBPF, ตัวจัดการการย้ายตำแหน่งแบบกำหนดเองถูกนำมาใช้
19.09.2019 — ปัญหาเกี่ยวกับสแต็กได้รับการแก้ไขแล้ว
20.09.2019 — ตัวช่วยการโทร eBPF ถูกนำมาใช้เป็น syscalls เพิ่มลายเซ็นของผู้ช่วยเหลือผ่าน eBPFanalyzer แบบกำหนดเอง
23.09.2019 — แก้ไขบุ๊กมาร์กที่ไม่ถูกต้องแล้ว
01.12.2020 — เพิ่มตัวช่วย eBPF ใหม่แล้ว
23.06.2022 — เพิ่มการรองรับการโทรแบบสัมพันธ์ ( ประเภทการย้ายตำแหน่ง R_BPF_64_32
) ขอบคุณ @cnwangjihe สำหรับแนวคิดนี้ imm
ของคำสั่งการโทร โดยที่ bpf_call->src_reg == BPF_PSEUDO_CALL
ขณะนี้มีออฟเซ็ตสัมพันธ์กับฟังก์ชันเป้าหมาย
ก่อน:
หลังจาก:
24.06.2022 — ส่งคำขอ Pull Request ไปยังพื้นที่เก็บข้อมูล Ghidra อย่างเป็นทางการในฐานะซัพพลายเออร์หลักของโปรเซสเซอร์ eBPF
19.12.2022 — เพิ่มการรองรับการดำเนินการ BPF_ATOMIC, เพิ่มคำสั่ง ALU32, เพิ่มคำสั่ง BPF_JMP32, แก้ไขคำสั่ง JSET แล้ว
03.05.2023 — เพิ่มการรองรับโปรเซสเซอร์ eBPF ในพื้นที่เก็บข้อมูลอย่างเป็นทางการของ Ghidra ในคอมมิต 506ca1e
เริ่มต้นจาก Ghidra 10.3 โมดูล eBPF จะรวมอยู่ใน Ghidra เป็นค่าเริ่มต้น ไม่จำเป็นต้องสร้างโปรเจ็กต์นี้และเพิ่มเป็นส่วนขยาย Ghidra อีกต่อไป สำหรับผู้ใช้ Ghidra เวอร์ชันเก่า โมดูล eBPF ยังคงสามารถเข้าถึงได้ผ่านรุ่นที่มีอยู่
เอกสารเคอร์เนลอย่างเป็นทางการ
เอกสารเคอร์เนลอย่างเป็นทางการ - คำถาม
โปรแกรม eBPF ที่จะทดสอบใน Ghidra
ตัวแยกชิ้นส่วน eBPF อย่างง่ายใน Rust
เครื่องเสมือน Rust และคอมไพเลอร์ JIT สำหรับโปรแกรม eBPF
ผู้ช่วย eBPF (ทั้งหมด)
ภาพรวมของ eBPF