วัตถุประสงค์ของโครงการนี้คือการวิเคราะห์เฟิร์มแวร์ไบนารีดิบและกำหนดคุณสมบัติบางอย่างโดยอัตโนมัติ เครื่องมือนี้เข้ากันได้กับสถาปัตยกรรมทั้งหมดโดยทั่วไปมันทำสถิติง่ายๆ
คุณสมบัติหลัก:
ก่อนอื่นโคลนพื้นที่เก็บข้อมูล Git:
git clone https://github.com/quarkslab/binbloom.git
cd binbloomเพื่อสร้างเวอร์ชันล่าสุด (Linux เท่านั้น):
autoreconf -i
./configure
make
sudo make install binbloom firmware.binคำสั่งนี้ควรให้ผลลัพธ์เช่นนี้:
[i] 32-bit architecture selected.
[i] File read (20480 bytes)
[i] Endianness is LE
[i] 6 strings indexed
[i] Found 3 base addresses to test
[i] Base address seems to be 0x60000000 (not sure)
More base addresses to consider (just in case):
0x005b5000 (0)
0x0bcd0000 (0)ในผลลัพธ์นี้บรรทัดที่สามจะแสดง Endianness ที่เดาได้ ( LE , Little-Endian) และบรรทัดที่หกให้ที่อยู่ที่เดาได้ ( 0x60000000 ) 6 สตริงข้อความและที่อยู่พื้นฐาน 3 ที่เป็นไปได้ได้รับการระบุ หากไม่ได้ระบุสถาปัตยกรรมสถาปัตยกรรม 32 บิตจะถูกพิจารณาโดยค่าเริ่มต้น
ค่าในวงเล็บหลังจากที่อยู่ของผู้สมัครแต่ละคนคือคะแนนที่สอดคล้องกัน คะแนนที่สูงกว่าที่อยู่
binbloom -a 64 firmware.bin [i] 64-bit architecture selected.
[i] File read (327680 bytes)
[i] Endianness is LE
[i] 717 strings indexed
[i] Found 7535 base addresses to test
[i] Base address found: 0x0000000000010000.
More base addresses to consider (just in case):
0x000000000000e000 (276)
0x000000000000f000 (242)
0x0000000000011000 (175)
0x000000000000d000 (167)
0x000000000000b000 (121)
0x0000000000013000 (107)
0x0000000000012000 (100)
[...] ตัวเลือก -a บอกให้ Binbloom พิจารณาเฟิร์มแวร์ 64 บิตเอาต์พุตข้างต้นแสดงที่อยู่พื้นฐานที่เดาได้ของ 0x10000
เมื่อต้องรับมือกับ Firmwares ขนาดเล็ก (ขนาด <10 kbytes) การตรวจจับ Endianness Binbloom อาจไม่น่าเชื่อถือและให้ผลลัพธ์ที่ผิดที่นำไปสู่ที่อยู่ฐานที่ไม่คาดคิด ในกรณีนี้คุณสามารถใช้ตัวเลือก -e เพื่อระบุ endianness:
binbloom -e be firmware.binจากนั้นจะสร้างผลลัพธ์ต่อไปนี้:
[i] Selected big-endian architecture.
[i] File read (1048576 bytes)
[i] Endianness is BE
[i] 764 strings indexed
[i] Found 18615 base addresses to test
[i] Base address seems to be 0x00000000 (not sure).
More base addresses to consider (just in case):
0x3f740000 (121043)
0x7ff48000 (61345)
0x41140000 (59552)
[...]Endianness จะถูกบังคับ (ในกรณีนี้ Big-Endian) และ Binbloom ขึ้นอยู่กับการกำหนดค่านี้เพื่อเดาที่อยู่พื้นฐาน
binbloom -a 32 -e be -b 0x0 firmware.bin [i] 32-bit architecture selected.
[i] Selected big-endian architecture.
[i] Base address 0x0000000000000000 provided.
[i] 764 strings indexed
Most probable UDS DB is located at @000ee8c8, found 7 different UDS RID
Identified structure:
struct {
code *p_field_0;
code *p_field_1;
uint32_t dw_2;
}การวิเคราะห์นี้ขึ้นอยู่กับฮิวริสติกเพื่อให้สามารถให้ผลบวกที่ผิดพลาดได้ คุณต้องอ่านรายการฐานข้อมูล UDS ที่มีศักยภาพที่พบโดย Binbloom และตรวจสอบและดูว่าอันที่ใดที่ถูกต้องถ้ามี Binbloom จัดเตรียมโครงสร้างที่ระบุไว้ในเอาต์พุตของมันช่วยให้ผู้ถอดความบางส่วนสามารถแยกความทรงจำได้ตามการประกาศโครงสร้าง
คุณสามารถเร่งกระบวนการค้นหาที่อยู่พื้นฐานโดยเปิดใช้งานมัลติเธรดด้วยตัวเลือก -t โดยค่าเริ่มต้นจะใช้เธรดเดียว
binbloom -t 8 firmware.bin โหมดการค้นหาลึก เปิดใช้งานกับตัวเลือก -d ยังถูกนำมาใช้ แต่ยังคงทดลองอยู่ โหมดนี้อาจมีประโยชน์ในโอกาสที่หายากมากเนื่องจากอาจพบที่อยู่ฐานที่ถูกต้องเมื่อไม่มีอะไรทำงานได้ แต่เป็นโหมดช้ากว่าที่อาจใช้เวลาพอสมควร
หากคุณต้องการให้เครื่องมือแสดงข้อมูลเพิ่มเติมให้ใช้ตัวเลือก -v หนึ่งตัวขึ้นไป
Binbloom มีให้ภายใต้ใบอนุญาต Apache 2.0