Bindiffhelper
ส่วนขยายของ Ghidra ที่ใช้ Bindiff ในโครงการ Ghidra ของคุณเพื่อค้นหาฟังก์ชั่นการจับคู่และเปลี่ยนชื่อโดยอัตโนมัติ (รองรับ Bindiff 6, 7, 8) ตรวจสอบคู่มือ Bindiff เพื่อดูว่ามันทำงานอย่างไรและตรงกับฟังก์ชั่น / บล็อกพื้นฐาน อย่างไรก็ตามด้วยส่วนขยายนี้ Bindiff นั้นเป็นไปโดยอัตโนมัติจากภายใน Ghidra ดังนั้นคุณไม่จำเป็นต้องแตกต่างจากไบนารีของคุณด้วยตัวเอง
โปรดรายงานข้อบกพร่องผ่านทางคุณลักษณะปัญหาบน GitHub
มันทำอะไร / changelog
v0.6
- อัปเดตไลบรารีไดรเวอร์ sqlite ตอนนี้ควรทำงานบน Apple Silicon
- รองรับความแตกต่างของข้อความภายนอกระหว่างฟังก์ชั่นที่ถอดรหัส (ดู #24)
- การอัปเดต UI
v0.5
- สนับสนุน Bindiff 8
- ปล่อยสำหรับ Ghidra 11.1
v0.4.3
v0.4.2
- เพิ่มฟังก์ชั่นเพื่อนำเข้าฟังก์ชั่นทั้งหมด (ไม่ใช่แค่ฟังก์ชั่นที่ตรวจสอบในตาราง)
- เพิ่มฟังก์ชั่นเพื่อสลับช่องทำเครื่องหมายสำหรับหลายองค์ประกอบในตาราง
- อัปเดตเพื่อสนับสนุน Ghidra 10.3
v0.4.1
- อัปเดตเพื่อสนับสนุน Gradle 7.5 และ Ghidra 10.1
v0.4.0
- สนับสนุน Bindiff 7 และ Ghidra 10
v0.3.2
- แก้ไขข้อผิดพลาดที่กระจายด้วยไฟล์อื่นจากโครงการเดียวกันไม่ทำงาน
- แก้ไขข้อผิดพลาดที่ไม่สามารถกระจายไฟล์ที่มีชื่อสั้น ๆ (<3 อักขระ>))
v0.3.1
- แก้ไขข้อผิดพลาดเมื่อเปิดไฟล์ผ่านตัวเลือก "จากโครงการ"
v0.3
- ฟังก์ชั่นการจับคู่สีในรายการ
- เพิ่มความคิดเห็นในฟังก์ชั่นที่ตรงกันในรายการที่เชื่อมโยงกับไบนารีอื่น ๆ
- แก้ไขข้อผิดพลาดที่ห้องสมุด protobuf หายไปในบางสร้าง
- เมนูโหลดไฟล์ใหม่
v0.2
- แก้ไขข้อผิดพลาดที่ไฟล์นำเข้าที่จำเป็นต้องตรวจสอบ
- เพิ่มขนาดของกล่องโต้ตอบการเลือกไฟล์โครงการ
v0.1
- Bindiff The Binary เปิดใน Ghidra พร้อมไบนารีอื่นจากโครงการ Ghidra เดียวกันแสดงผลลัพธ์และชื่อฟังก์ชันนำเข้า
- เปิดไฟล์ bindiff ที่สร้างขึ้นด้วย bindiff 6 จากสองไฟล์. binexport และนำเข้าชื่อฟังก์ชั่นการจับคู่ใน ghidra
รุ่นต่อไป
- นำเข้าชื่อฟังก์ชั่นและพารามิเตอร์ฟังก์ชัน (ประเภทและชื่อ)
- เปรียบเทียบไบนารีที่เปิดใน Ghidra กับ. binexport ภายนอก (จาก IDA เป็นต้น)
- การสื่อสารกับ Bindiff 6 GUI เพื่อแสดงกราฟสำหรับฟังก์ชั่นที่แตกต่างกัน
วิธีการติดตั้ง
ดาวน์โหลดไฟล์. zip-file จากการเปิดตัวหากเข้ากันได้กับเวอร์ชัน Ghidra ของคุณมิฉะนั้นดู วิธีการสร้าง ด้านล่าง
- เปิด ghidra
- ใน หน้าต่างหลัก : ไปที่ ไฟล์-> ติดตั้งส่วนขยาย ...
- คลิก +-button ที่ด้านบนขวาและเลือกไฟล์ Zip Bindiffhelper
- ปิดตัวจัดการปลั๊กอิน รีสตาร์ท Ghidra เพื่อโหลดปลั๊กอินใหม่
- ดู การใช้งาน ด้านล่าง
แนะนำเครื่องมืออื่น ๆ
- ปลั๊กอิน Binexport หรือรวบรวมจากแหล่งที่มาสำหรับรุ่น Ghidra เฉพาะของคุณ
- Bindiff (https://zynamics.com/software.html)
หากไม่มีสิ่งเหล่านี้คุณจะสามารถนำเข้าไฟล์. bindiff และไม่ส่งออกโดยอัตโนมัติและแตกต่างจากโครงการ Ghidra ของคุณ
การใช้งาน
ตรวจสอบให้แน่ใจว่าปลั๊กอินถูกโหลดใน Code Explorer โดยการเปิดไฟล์ใน Ghidra และใน Code Explorer ไปที่ File-> Configure
คลิกปลั๊กอินขนาดเล็กที่ด้านบนขวา:
และตรวจสอบให้แน่ใจว่ามีการตรวจสอบช่องทำเครื่องหมายถัดจาก Bindiffhelperplugin
นำเข้าภายนอก.
. binexport-files ที่สอดคล้องกันจำเป็นต้องอยู่ในโฟลเดอร์เดียวกัน
เปิดไฟล์ที่คุณต้องการนำเข้าชื่อในเบราว์เซอร์รหัสจากนั้นไปที่ window-> bindiffhelper
ใช้ปุ่ม เปิดจาก Bindiff หรือรายการเมนูและเลือกไฟล์. bindiff ของคุณ
เลือกชื่อฟังก์ชั่นทั้งหมดที่คุณต้องการนำเข้าและคลิกปุ่ม นำเข้าชื่อฟังก์ชั่น ในด้านบนขวาหรือรายการเมนู
เปรียบเทียบระหว่างไฟล์ในโครงการ Ghidra
ไปที่ Window-> Bindiffhelper ตรวจสอบให้แน่ใจว่าไม่มีคำเตือนเกี่ยวกับ Binexport หรือ Bindiff จากนั้นคลิกปุ่ม เปิดจากปุ่มโครงการ
เลือกไฟล์อื่นจากต้นไม้และคลิกตกลง
วิธีการสร้าง
ความต้องการ:
- การติดตั้ง Ghidra (https://ghidra-sre.org) หรือรวบรวมจากแหล่งที่มา
- JDK บางส่วน อาจมีข้อ จำกัด บางประการขึ้นอยู่กับว่า Ghidra ของคุณสร้างขึ้นอย่างไรและปลั๊กอินอื่น ๆ ที่คุณใช้ ฉันขอแนะนำให้ใช้ Temurin 21 LTS ซึ่งดูเหมือนว่าจะทำงานร่วมกับ Binexport และ Bindiffhelper ในปัจจุบัน
- Gradle (ทดสอบด้วย 7.5, 8.10)
โคลนที่เก็บ
โคลนที่เก็บซ้ำเนื่องจากมันขึ้นอยู่กับ binexport สำหรับนิยามบัฟเฟอร์โปรโตคอลที่เกี่ยวข้อง
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
สร้างมัน
คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม GHIDRA_INSTALL_DIR เป็น Ghidra การติดตั้ง DIR หากคุณติดตั้ง JDK ที่แตกต่างกันตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อม JAVA_HOME ชี้ไปที่การติดตั้ง Ghidra ของคุณ
ส่วนขยายจะถูกสร้างขึ้นสำหรับรุ่น Ghidra นั้นโดยเฉพาะ
จากนั้นไป ที่โฟลเดอร์ Bindiffhelper ในเปลือกของคุณและทำ
สิ่งนี้จะสร้างทั้ง binexport ใน submodule และ bindiffhelper ที่เกี่ยวข้องในไดเรกทอรีหลัก ควรมีไฟล์. zip ที่สร้างขึ้นในไดเรกทอรี Dist ใช้ไฟล์. zip เพื่อติดตั้งตามคำแนะนำด้านบน
การตั้งค่าการพัฒนา / การดีบัก
บางครั้งมันมีประโยชน์ที่จะสามารถดีบักส่วนขยายพร้อมกับ Ghidra นี่คือบันทึกบางอย่างเกี่ยวกับเรื่องนั้น:
- โคลนและสร้าง Ghidra และให้ Gradle สร้างโครงการ Eclipse ตาม devguide
- นำเข้าโครงการลงใน Eclipse (ตรวจสอบให้แน่ใจว่ามีปลั๊กอินที่เกี่ยวข้องสำหรับการพัฒนาส่วนขยาย)
- สร้างและติดตั้ง Ghidradev
- แกะ Ghidra Build และ Link Ghidradev กับมัน อาจต้องตั้งค่าตัวแปรสภาพแวดล้อม
GHIDRA_INSTALL_DIR - เรียกใช้ Ghidra จาก Eclipse และติดตั้ง Binexport Extension
- สร้างโครงการ Bindiffhelper Eclipse ด้วย
gradle build eclipse - นำเข้าสู่ Eclipse และใช้ Ghidradev เพื่อเชื่อมโยงไปยัง Ghidra Build
- ดีบัก as-> ghidra
เมื่อทำการดีบัก Ghidra ที่มีส่วนขยายออกจาก Eclipse ส่วนขยายจะถูกโหลดลงใน Ghidra โดยอัตโนมัติ (อย่าผ่านการติดตั้งส่วนขยายปกติ) อย่างไรก็ตามปลั๊กอินจะต้องเปิดใช้งานใน Code Explorer
การอ้างอิง
- https://github.com/google/bindiff/releases
- https://www.zynamics.com/bindiff/manual/
- https://github.com/google/binexport/
ไอคอนจาก: ไอคอน Fatcow ฟรี