이 프로젝트의 목적은 원시 바이너리 펌웨어를 분석하고 해당 기능 중 일부를 자동으로 결정하는 것입니다. 이 도구는 기본적으로 모든 아키텍처와 호환되며 간단한 통계를 수행합니다.
주요 기능 :
먼저 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 kbytes) Binbloom endianness 감지를 다룰 때 신뢰할 수 없으며 예상치 못한 기본 주소로 이어지는 잘못된 결과를 제공 할 수 있습니다. 이 경우 -e 옵션을 사용하여 Endianness를 지정할 수 있습니다.
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)
[...]그런 다음 Endianness가 강제 (이 경우 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;
}이 분석은 휴리스틱을 기반으로하므로 잘못된 긍정을 줄 수 있습니다. Binbloom에서 발견 한 잠재적 UDS 데이터베이스 목록을 읽고 어떤 것이 올바른지 확인하고 확인해야합니다. Binbloom은 출력에서 식별 된 구조를 제공하여 일부 DisassemBlers가 구조 선언에 따라 메모리를 구문 분석 할 수 있도록합니다.
-t 옵션으로 멀티 스레딩을 활성화하여 기본 주소 조회 프로세스 속도를 높일 수 있습니다. 기본적으로 단일 스레드가 사용됩니다.
binbloom -t 8 firmware.bin -d 옵션을 사용하여 활성화 된 깊은 검색 모드 도 구현되지만 여전히 실험적입니다. 이 모드는 다른 것이 작동하지 않을 때 유효한 기본 주소를 찾을 수 있으므로 매우 드문 경우에 유용 할 수 있지만 완료하는 데 시간이 걸릴 수있는 느린 모드입니다.
도구에 더 많은 정보를 표시하려면 하나 이상의 -v 옵션을 사용하십시오.
Binbloom은 Apache 2.0 라이센스에 따라 제공됩니다.