ส่วนขยายตัวส่งออกไฟล์อ็อบเจ็กต์สำหรับ Ghidra

ส่วนขยาย Ghidra นี้ช่วยให้สามารถส่งออกบางส่วนของโปรแกรมเป็นไฟล์อ็อบเจ็กต์ได้ ไฟล์อ็อบเจ็กต์เหล่านี้มีเมทาดาทาที่ถูกต้อง (เช่น สัญลักษณ์, ตารางรีโลเคชัน ฯลฯ) จึงสามารถนำกลับไปใช้ใน toolchain ได้โดยตรง

กรณีการใช้งาน

  • การแพตช์ไบนารีขั้นสูง: ใช้ linker เพื่อรวมส่วนต้นฉบับกับส่วนที่แก้ไข แทนการทำด้วยมือ
  • การพอร์ตซอฟต์แวร์: แยกโค้ดที่ไม่ขึ้นกับระบบออกจากโปรแกรม แล้วแทนที่ส่วนที่เหลือ
  • การแปลงรูปแบบไฟล์: แปลงโปรแกรมหรือไฟล์อ็อบเจ็กต์เป็นรูปแบบไฟล์อื่น
  • การสร้างไลบรารี: แยกบางส่วนของโปรแกรมออกมาเพื่อนำไปใช้ซ้ำในบริบทอื่น
  • โปรเจกต์ดิแอสเซมบลี/ดีคอมไพล์: แบ่งโปรแกรมออกเป็นไฟล์อ็อบเจ็กต์หลายไฟล์แล้วนำไปทำใหม่

สถาปัตยกรรมชุดคำสั่งและรูปแบบไฟล์อ็อบเจ็กต์ที่รองรับ

  • x86: COFF (รองรับ), ELF (รองรับ)
  • MIPS: COFF (ไม่รองรับ), ELF (รองรับ)

การบิลด์ (CLI)

  • โคลนรีโพซิทอรีนี้
  • ตั้งค่าตัวแปรสภาพแวดล้อม GHIDRA_INSTALL_DIR ให้ชี้ไปยังไดเรกทอรีติดตั้งของ Ghidra
  • รันคำสั่ง gradle buildExtension
  • ไฟล์เก็บถาวรของส่วนขยาย Ghidra จะถูกสร้างในไดเรกทอรี dist/

การติดตั้ง

  • ดาวน์โหลดส่วนขยายจากหน้ารีลีส หรือบิลด์เองในเครื่อง
  • ติดตั้งส่วนขยายในอินสแตนซ์ Ghidra ผ่าน File > Install Extensions…
  • เปิดใช้งานปลั๊กอิน RelocationTableSynthesizedPlugin ผ่าน File > Configure ในหน้าต่าง CodeBrowser

วิธีใช้งาน

  1. เลือกชุดแอดเดรสในมุมมอง Listing
  2. รันตัววิเคราะห์ Relocation table synthesizer (ใช้ได้ในโหมด one-shot)
  3. เรียกใช้ตัวส่งออกไฟล์อ็อบเจ็กต์แบบ relocatable ผ่าน File > Export Program…
  4. สามารถตรวจสอบตารางรีโลเคชันที่สร้างขึ้นใหม่ได้ที่ Window > Relocation table(synthesized)
  • ⚠️ ตัววิเคราะห์ Relocation table synthesizer ต้องการฐานข้อมูล Ghidra ที่กรอกข้อมูลครบถ้วน (ประกาศสัญลักษณ์, ชนิดข้อมูล และการอ้างอิงได้อย่างถูกต้อง) ข้อมูลที่ไม่ถูกต้องหรือขาดหายอาจทำให้เกิดรีโลเคชันที่ผิดพลาดหรือไม่ถูกตรวจพบระหว่างการวิเคราะห์
  • ⚠️ ตัวส่งออกไฟล์อ็อบเจ็กต์อาศัยผลลัพธ์จากตัววิเคราะห์ Relocation table synthesizer ควรรันตัววิเคราะห์นี้ก่อนส่งออกไฟล์อ็อบเจ็กต์ เพื่อให้แน่ใจว่าเนื้อหาของตารางรีโลเคชันเป็นข้อมูลล่าสุด

หลักการทำงาน

ไฟล์อ็อบเจ็กต์ประกอบด้วย 3 ส่วน:

  • ไบต์ของเซกชันที่สามารถทำรีโลเคชันได้
  • ตารางสัญลักษณ์
  • ตารางรีโลเคชัน

เมื่อ linker สร้างไฟล์ปฏิบัติการจากไฟล์อ็อบเจ็กต์หลายไฟล์:

  • จัดวางเซกชันลงในหน่วยความจำ
  • คำนวณแอดเดรสของสัญลักษณ์ใน virtual address space
  • ใช้รีโลเคชันกับไบต์ของเซกชันโดยอิงจากแอดเดรสสุดท้ายของสัญลักษณ์

โดยทั่วไป หลังจากกระบวนการนี้ ตารางรีโลเคชันจะถูกทิ้งไป และตารางสัญลักษณ์ก็มักถูกทิ้งเช่นกัน เว้นแต่จะคงสัญลักษณ์ดีบักไว้ อย่างไรก็ตาม ด้วยการวิเคราะห์อย่างรอบคอบ ข้อมูลเหล่านี้สามารถสร้างกลับขึ้นมาใหม่ได้ ซึ่งทำให้สามารถ delink โปรแกรมกลับเป็นไฟล์อ็อบเจ็กต์ได้อีกครั้ง

สรุปโดย GN⁺

  • ส่วนขยาย Ghidra นี้ช่วยให้ส่งออกบางส่วนของโปรแกรมเป็นไฟล์อ็อบเจ็กต์ได้
  • มีกรณีใช้งานหลากหลาย เช่น การแพตช์ไบนารีขั้นสูง การพอร์ตซอฟต์แวร์ และการแปลงรูปแบบไฟล์
  • ต้องใช้ฐานข้อมูลที่แม่นยำ และควรรันตัววิเคราะห์ก่อนส่งออกไฟล์อ็อบเจ็กต์
  • โครงการที่มีความสามารถคล้ายกันมีอย่างดีคอมไพเลอร์ เช่น IDA Pro

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น