O objetivo deste projeto é analisar um firmware binário bruto e determinar automaticamente alguns de seus recursos. Essa ferramenta é compatível com todas as arquiteturas como basicamente, apenas faz estatísticas simples.
Principais recursos:
Primeiro, clone o repositório Git:
git clone https://github.com/quarkslab/binbloom.git
cd binbloomPara construir a versão mais recente (somente Linux):
autoreconf -i
./configure
make
sudo make install binbloom firmware.binEste comando deve fornecer uma saída como esta:
[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)Nesta saída, a terceira linha exibe o endianness adivinhado ( LE , Little-Endian) e a sexta linha fornece o endereço adivinhado ( 0x60000000 ). 6 seqüências de texto e 3 endereços básicos possíveis foram identificados. Se a arquitetura não for especificada, a arquitetura de 32 bits será considerada por padrão.
O valor entre parênteses após cada endereço do candidato é a pontuação correspondente. Quanto maior a pontuação, mais provável será o endereço.
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 opção -a diz ao Binbloom para considerar um firmware de 64 bits, a saída acima mostra um endereço base adivinhado de 0x10000.
Ao lidar com pequenos firmwares (tamanho <10 kbytes) a detecção de endiano binbloom pode não ser confiável e fornecer um resultado falso que leva a endereços básicos inesperados. Nesse caso, você pode usar a opção -e para especificar o Endianness:
binbloom -e be firmware.binEm seguida, produz a seguinte saída:
[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 é então forçado (neste caso Big-Endian) e o Binbloom conta com essa configuração para adivinhar o endereço base.
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;
}Essa análise é baseada em heurísticas para que possa dar falsos positivos. Você deve ler a lista de bancos de dados UDs em potencial encontrados pelo BinBloom e verificar e ver qual é o correto, se houver. O BinBloom fornece a estrutura identificada em sua saída, permitindo que alguns desmontadores analisem a memória após a declaração da estrutura.
Você pode acelerar o processo de pesquisa de endereço base, ativando o multi -threading com a opção -t . Por padrão, um único thread é usado.
binbloom -t 8 firmware.bin Um modo de pesquisa profundo , habilitado com a opção -d , também é implementado, mas ainda é experimental. Esse modo pode ser útil em ocasiões muito raras, pois pode encontrar um endereço base válido quando nada mais funciona, mas é um modo mais lento que pode levar algum tempo para concluir.
Se você deseja que a ferramenta exiba mais informações, use uma ou mais opções -v .
O BinBloom é fornecido sob a licença Apache 2.0.