Tujuan dari proyek ini adalah untuk menganalisis firmware biner mentah dan menentukan secara otomatis beberapa fiturnya. Alat ini kompatibel dengan semua arsitektur seperti pada dasarnya, itu hanya melakukan statistik sederhana di atasnya.
Fitur Utama:
Pertama, klon repositori git:
git clone https://github.com/quarkslab/binbloom.git
cd binbloomUntuk membangun versi terbaru (hanya Linux):
autoreconf -i
./configure
make
sudo make install binbloom firmware.binPerintah ini harus memberikan output seperti ini:
[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)Dalam output ini, baris ketiga menampilkan endianness yang ditebak ( LE , Little-endian) dan baris keenam memberikan alamat yang ditebak ( 0x60000000 ). 6 string teks dan 3 kemungkinan alamat basis telah diidentifikasi. Jika arsitektur tidak ditentukan, arsitektur 32-bit dipertimbangkan secara default.
Nilai dalam tanda kurung setelah setiap alamat kandidat adalah skor yang sesuai. Semakin tinggi skor, semakin mungkin alamatnya.
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)
[...] Opsi -a memberi tahu Binbloom untuk mempertimbangkan firmware 64 -bit, output di atas menunjukkan alamat dasar yang ditebak 0x10000.
Saat berhadapan dengan firmwares kecil (ukuran <10 kbytes) Binbloom Endianness Detection mungkin tidak dapat diandalkan dan memberikan hasil yang salah yang mengarah pada alamat basis yang tidak terduga. Dalam hal ini, Anda dapat menggunakan opsi -e untuk menentukan endianness:
binbloom -e be firmware.binItu kemudian menghasilkan output berikut:
[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 kemudian dipaksakan (dalam hal ini Big-Endian) dan Binbloom bergantung pada konfigurasi ini untuk menebak alamat dasar.
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;
}Analisis ini didasarkan pada heuristik sehingga dapat memberikan positif palsu. Anda harus membaca daftar database UDS potensial yang ditemukan oleh Binbloom dan memeriksa dan melihat yang mana yang benar, jika ada. Binbloom menyediakan struktur yang diidentifikasi dalam outputnya, memungkinkan beberapa pembongkaran untuk menguraikan memori mengikuti deklarasi struktur.
Anda dapat mempercepat proses pencarian alamat dasar dengan mengaktifkan multi -threading dengan opsi -t . Secara default, satu utas digunakan.
binbloom -t 8 firmware.bin Mode pencarian yang mendalam , aktifkan dengan opsi -d , juga diimplementasikan tetapi masih eksperimental. Mode ini mungkin berguna dalam kesempatan yang sangat jarang karena mungkin menemukan alamat dasar yang valid ketika tidak ada yang berfungsi, tetapi ini adalah mode yang lebih lambat yang mungkin membutuhkan waktu untuk diselesaikan.
Jika Anda ingin alat tersebut menampilkan lebih banyak informasi, gunakan satu atau lebih opsi -v .
Binbloom disediakan di bawah lisensi Apache 2.0.