Ziel dieses Projekts ist es, eine raue binäre Firmware zu analysieren und einige seiner Funktionen automatisch zu bestimmen. Dieses Tool ist mit allen Architekturen als im Grunde kompatibel. Es führt einfach einfache Statistiken darüber aus.
Hauptmerkmale:
Klonen Sie zunächst das Git -Repository:
git clone https://github.com/quarkslab/binbloom.git
cd binbloomSo erstellen Sie die neueste Version (nur Linux):
autoreconf -i
./configure
make
sudo make install binbloom firmware.binDieser Befehl sollte eine solche Ausgabe geben:
[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)In dieser Ausgabe zeigt die dritte Zeile die erratene Endianess ( LE , Little-Endian) und die sechste Zeile gibt die erratene Adresse ( 0x60000000 ) an. 6 Textzeichenfolgen und 3 mögliche Grundadressen wurden identifiziert. Wenn Architektur nicht angegeben ist, wird die 32-Bit-Architektur standardmäßig berücksichtigt.
Der Wert in Klammern nach jeder Kandidatenadresse ist die entsprechende Punktzahl. Je höher die Punktzahl, desto Wahrscheinlichkeit ist die Adresse.
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)
[...] Die Option -a gibt Binbloom an, eine 64 -Bit -Firmware zu berücksichtigen. Die obige Ausgabe zeigt eine erratene Basisadresse von 0x10000.
Beim Umgang mit kleinen Unternehmenswares (Größe <10 kBytes) ist die Erkennung von Binbloom -Endiangness möglicherweise nicht zuverlässig und liefert ein falsches Ergebnis, das zu unerwarteten Basisadressen führt. In diesem Fall können Sie die Option -e verwenden, um die Endiangess anzugeben:
binbloom -e be firmware.binAnschließend erzeugt es die folgende Ausgabe:
[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)
[...]Endiangness wird dann gezwungen (in diesem Fall Big-Endian) und Binbloom stützt sich auf diese Konfiguration, um die Basisadresse zu erraten.
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;
}Diese Analyse basiert auf Heuristiken, sodass sie falsch positive Ergebnisse erzielen kann. Sie müssen die Liste der potenziellen UDS -Datenbanken lesen, die von Binbloom gefunden wurden, und prüfen und sehen, welches die richtige ist, falls vorhanden. Binbloom liefert die identifizierte Struktur in der Ausgabe und ermöglicht es einigen Disassemblern, den Speicher nach der Strukturdeklaration zu analysieren.
Sie können den Basisadress -Suchprozess beschleunigen, indem Sie Multi -Threading mit der Option -t aktivieren. Standardmäßig wird ein einzelner Thread verwendet.
binbloom -t 8 firmware.bin Ein tiefer Suchmodus , der mit der Option -d aktiviert wird, ist ebenfalls implementiert, ist jedoch immer noch experimentell. Dieser Modus kann in sehr seltenen Fällen nützlich sein, da er möglicherweise eine gültige Basisadresse findet, wenn nichts anderes funktioniert, aber es ist ein langsamerer Modus, der einige Zeit dauern kann.
Wenn Sie möchten, dass das Tool weitere Informationen anzeigt, verwenden Sie eine oder mehrere -v -Optionen.
Binbloom wird unter der Apache 2.0 -Lizenz bereitgestellt.