Цель этого проекта - проанализировать необработанную бинарную прошивку и автоматически определить некоторые из его функций. Этот инструмент совместим со всеми архитектурами, как в основном, он просто выполняет простую статистику на нем.
Основные особенности:
Во -первых, клонировать репозиторий 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)На этом выходе третья строка отображает угадаемая эндианство ( 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.
При работе с небольшими плаваниями (размер <10 кбайт) обнаружение эндсианности Binbloom может быть не надежным и дает ложный результат, который приводит к неожиданным базовым адресам. В этом случае вы можете использовать опцию -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)
[...]Затем эндсианство (в данном случае 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.