このプロジェクトの目的は、生のバイナリファームウェアを分析し、その機能の一部を自動的に決定することです。このツールは、基本的にはすべてのアーキテクチャと互換性があり、単純な統計を行うだけです。
主な機能:
まず、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)この出力では、3番目の行に推測されたエンディアン( LE 、リトルエンディアン)が表示され、6行目が推測されたアドレス( 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の推測されたベースアドレスを示しています。
小さなファーミウェア(サイズ<10 kbytes)を扱う場合、ビンブルームのエンディアンネス検出は信頼性がなく、予期しないベースアドレスにつながる誤った結果をもたらす可能性があります。この場合、 -eオプションを使用して、エンディアンネスを指定できます。
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)
[...]その後、エンディアンネスは強制され(この場合はビッグエンディアン)、ビンブルームはこの構成に依存してベースアドレスを推測します。
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;
}この分析はヒューリスティックに基づいているため、誤検知を与えることができます。 binbloomで見つかった潜在的なUDSデータベースのリストを読んで、正しいものがある場合は、確認して確認する必要があります。 Binbloomは、その出力に識別された構造を提供し、一部の分解者が構造宣言に続いてメモリを解析できるようにします。
-tオプションでマルチスレッドを有効にすることにより、ベースアドレスルックアッププロセスをスピードアップできます。デフォルトでは、単一のスレッドが使用されます。
binbloom -t 8 firmware.bin -dオプションで有効にするディープ検索モードも実装されていますが、それでも実験的です。このモードは、他に何も機能しない場合に有効なベースアドレスを見つける可能性があるため、非常にまれな機会に役立つかもしれませんが、完了するのに時間がかかる可能性のある遅いモードです。
ツールに詳細情報を表示する場合は、1つ以上の-vオプションを使用してください。
BINBLOOMは、Apache 2.0ライセンスの下で提供されます。