ลิขสิทธิ์ 2011-2024 Google LLC
พื้นที่เก็บข้อมูลนี้มีซอร์สโค้ด BinDiff BinDiff เป็นเครื่องมือเปรียบเทียบโอเพ่นซอร์สสำหรับไฟล์ไบนารีเพื่อค้นหาความแตกต่างและความคล้ายคลึงในโค้ดที่แยกส่วนได้อย่างรวดเร็ว
BinDiff เป็นเครื่องมือเปรียบเทียบโอเพ่นซอร์สสำหรับไฟล์ไบนารี ซึ่งช่วยให้นักวิจัยและวิศวกรที่มีช่องโหว่สามารถค้นหาความแตกต่างและความคล้ายคลึงในโค้ดที่แยกส่วนได้อย่างรวดเร็ว
ด้วย BinDiff นักวิจัยสามารถระบุและแยกการแก้ไขช่องโหว่ในแพตช์ที่ผู้ขายจัดหามาให้ นอกจากนี้ยังสามารถใช้เพื่อย้ายสัญลักษณ์และความคิดเห็นระหว่างการแยกส่วนของไบนารีเดียวกันหลายเวอร์ชัน ทำให้การติดตามการเปลี่ยนแปลงเมื่อเวลาผ่านไปง่ายขึ้น และช่วยให้องค์กรสามารถรักษาผลการวิเคราะห์และเปิดใช้งานการถ่ายทอดความรู้ระหว่างนักวิเคราะห์ไบนารี
หากคุณต้องการเริ่มต้นใช้งาน BinDiff ให้ดาวน์โหลดแพ็คเกจการติดตั้งที่สร้างไว้ล่วงหน้าจากหน้าเผยแพร่
หมายเหตุ: BinDiff อาศัยตัวแยกชิ้นส่วนแยกต่างหาก มันมาพร้อมกับการรองรับ IDA Pro, Binary Ninja และ Ghidra เมื่อแกะกล่อง หน้าตัวถอดประกอบแสดงรายการการกำหนดค่าที่รองรับ
ชุดย่อยของคู่มือที่มีอยู่มีอยู่ในไดเร็กทอรี docs/
BinDiff มีส่วนประกอบดังต่อไปนี้:
cmake
- ไฟล์บิลด์ CMake ที่ประกาศการพึ่งพาภายนอกfixtures
- ชุดของไฟล์ทดสอบเพื่อออกกำลังกายเอ็นจิ้นหลักของ BinDiffida
- บูรณาการกับตัวแยกชิ้นส่วน IDA Projava
- ซอร์สโค้ด Java ประกอบด้วยอินเทอร์เฟซผู้ใช้ BinDiff Visual diff และไลบรารียูทิลิตี้ที่เกี่ยวข้องmatch
- อัลกอริธึมการจับคู่สำหรับเอ็นจิ้นหลัก BinDiffpackaging
- แหล่งที่มาของแพ็คเกจสำหรับแพ็คเกจการติดตั้งtools
- ไฟล์ปฏิบัติการของตัวช่วยที่มาพร้อมกับผลิตภัณฑ์ คำแนะนำด้านล่างนี้ควรจะเพียงพอที่จะสร้างทั้งโค้ดเนทีฟและส่วนประกอบที่ใช้ Java
คำแนะนำการสร้างโดยละเอียดเพิ่มเติมจะถูกเพิ่มในภายหลัง ซึ่งรวมถึง Dockerfile
และสคริปต์สำเร็จรูปสำหรับสร้างแพ็คเกจการติดตั้ง
BinDiff ใช้ CMake เพื่อสร้างไฟล์บิลด์สำหรับส่วนประกอบเหล่านั้นที่ประกอบด้วยโค้ด C++ ดั้งเดิม
จำเป็นต้องมีการขึ้นต่อกันของบิลด์ต่อไปนี้:
การขึ้นต่อกันของ build ต่อไปนี้เป็นทางเลือก:
deps/idasdk
)ขั้นตอนการสร้างทั่วไปจะเหมือนกันบน Windows, Linux และ macOS ต่อไปนี้จะแสดงคำสั่งสำหรับ Linux
ดาวน์โหลดการอ้างอิงที่จะไม่ถูกดาวน์โหลดโดยอัตโนมัติ:
mkdir -p build/out
git clone https://github.com/google/binexport build/binexport
unzip -q < path/to/idasdk_pro80.zip > -d build/idasdk
ถัดไป กำหนดค่าไดเร็กทอรี build และสร้างไฟล์ build:
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
" -DIdaSdk_ROOT_DIR= ${PWD} build/idasdk "
สุดท้ายให้เรียกใช้งานสร้างจริง ไบนารีจะถูกวางไว้ใน build/out/bindiff-prefix
:
cmake --build build/out --config Release
(cd build/out ; ctest --build-config Release --output-on-failure)
cmake --install build/out --config Release
หากต้องการสร้างโดยไม่มี IDA เพียงเปลี่ยนขั้นตอนการกำหนดค่าด้านบนเป็น
cmake -S . -B build/out -G Ninja
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=build/out
-DBINDIFF_BINEXPORT_DIR=build/binexport
-DBINEXPORT_ENABLE_IDAPRO=OFF
การสร้าง GUI ที่ใช้ Java ต้องใช้ไลบรารีการแสดงภาพกราฟของบุคคลที่สามเชิงพาณิชย์ yFiles สำหรับการแสดงกราฟและเค้าโครง ไลบรารีนี้มีประสิทธิภาพอย่างมาก และไม่สามารถเปลี่ยนได้อย่างง่ายดาย
ในการสร้าง BinDiff ใช้ Gradle 6.x และ Java 11 LTS โปรดดูคำแนะนำในการติดตั้งในคู่มือการติดตั้ง
สมมติว่าคุณเป็นผู้ถือลิขสิทธิ์ yFiles ให้ตั้งค่าตัวแปรสภาพแวดล้อม YFILES_DIR
เป็นไดเร็กทอรีที่มี yFiles y.jar
และ ysvg.jar
หมายเหตุ: BinDiff ยังคงใช้ yFiles สาขา 2.x ที่เก่ากว่า
จากนั้นเรียกใช้ Gradle เพื่อดาวน์โหลดการอ้างอิงภายนอกและสร้าง:
หน้าต่าง:
set YFILES_DIR=<pathtoyfiles_2.17>
cd java
gradle shadowJar
ลินุกซ์หรือ macOS:
export YFILES_DIR=<path/to/yfiles_2.17>
cd java
gradle shadowJar
หลังจากนั้นไดเร็กทอรี ui/build/libs
ในไดเร็กทอรีย่อย java
ควรมีอาร์ติแฟกต์ bindiff-ui-all.jar
ที่มีอยู่ในตัวเอง ซึ่งสามารถรันได้โดยใช้คำสั่ง java -jar
มาตรฐาน
เอกสารต้นฉบับสรุปแนวคิดทั่วไปเบื้องหลัง BinDiff:
เครื่องมืออื่นๆ ในพื้นที่ปัญหาเดียวกัน:
โครงการที่ใช้ BinDiff:
BinDiff ได้รับใบอนุญาตภายใต้เงื่อนไขของใบอนุญาต Apache ดูใบอนุญาตสำหรับข้อมูลเพิ่มเติม
หากคุณต้องการมีส่วนร่วม โปรดอ่าน CONTRIBUTING.md ก่อนที่จะส่งคำขอดึง คุณยังสามารถรายงานข้อบกพร่องหรือคำขอคุณสมบัติไฟล์ได้