Анализ бинарных файлов

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску

Способы анализа бинарных файлов


В Android часто встречаются части системы доступные только в бинарном виде ака blobs, ниже способы получения информации о бинарных файлах:

Первое что можно посмотреть это вывод комманды file

file gralloc.tegra.so 
gralloc.tegra.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, stripped

тут видно что это биннарник под arm архитектуру, динамически слинкованый и изнего удалена не вилияющая на исполнение информация, например отладочного характера.

Потом можно посмотреть какие переменные/функции есть в бинарном файле с помощью утилиты strings

strings gralloc.tegra.so 
__aeabi_unwind_cpp_pr0
NvOsStrcmp
pthread_mutex_lock
NvGrAllocDevOpen
NvGrFbDevOpen
pthread_mutex_unlock
NvGrDevUnref
...

Аналогично strings можно воспользоваться утилитой objdump выдвет более вменяюмую информацию, но игнорирует левый текст, который тоже иногда бывает интересен.


Так как бинарник динамический хорошо узнать на какие библиотеки он динамически ссылается, это делается утилитой readelf

readelf -d gralloc.tegra.so |grep Shared
 0x00000001 (NEEDED)                     Shared library: [liblog.so]
 0x00000001 (NEEDED)                     Shared library: [libcutils.so]
 0x00000001 (NEEDED)                     Shared library: [libhardware_legacy.so]
 0x00000001 (NEEDED)                     Shared library: [libnvos.so]
 0x00000001 (NEEDED)                     Shared library: [libnvrm.so]
 0x00000001 (NEEDED)                     Shared library: [libnvrm_channel.so]
 0x00000001 (NEEDED)                     Shared library: [libnvddk_2d_v2.so]
 0x00000001 (NEEDED)                     Shared library: [libpkip.so]
 0x00000001 (NEEDED)                     Shared library: [libcrypto.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]

Анализ функций

По выводу strings часто не очень понятны функции которые использует библиотека или бинарник, для этого лучше использовать утилиту nm

# nm -C -D ~/src/blobs/libril-qc-qmi-1.so

1337898155