
Набор скриптов для реверс-инжиниринга прошивок baseband / модема Qualcomm Hexagon
Набор скриптов для реверс-инжиниринга прошивки модема Qualcomm.
Все смещения/адреса в скриптах обновлены для мартовской прошивки Pixel 5, и их нужно изменить при использовании другой версии.
merge_modem_firmware.py объединяет все файлы modem.b** (modem.b00, modem.b01 и т. д.) в единый монолитный бинарный файл с именем modem.bin. Это значительно упрощает загрузку в IDA и Ghidra.
clade_extractor и dlpage_extractor декомпрессируют сжатые секции CLADE и Delta.
clade_extractor компилируется под x86 (или вашу родную архитектуру) и выводит распакованную секцию в файл. Насколько мне известно, публичной информации или кода по сжатию CLADE от Qualcomm нет, кроме патента. CLADE заменил q6zip в качестве основного метода сжатия пользовательских модулей, и его сложно реверсить, так как он в основном реализован в железе.
dlpage_extractor компилируется для Hexagon и эмулируется в QEMU (как это делалось в предыдущих работах). Затем распакованную память нужно дампнуть в GDB. Здесь также есть код для старого метода сжатия q6zip, хотя он больше не используется в новых бинарных файлах модема. В секции Delta всего пара структур обработчиков diag-команд, так что основная суть находится в сжатой секции CLADE. Я бы даже не заморачивался с ней на новых бинарных файлах — она здесь только для старых.
После получения распакованной секции CLADE вы можете запустить add_decompressed_section_to_modem_bin.py, чтобы добавить её в modem.bin. Это можно сделать вручную в IDA и Ghidra, но этот скрипт немного упрощает загрузку и резервное копирование итоговых бинарных файлов.
qshrink4_qdb_ghidra_script.py декодирует все вызовы msg_v4_send* в соответствующие отладочные строки. Он добавляет комментарий в начало каждой функции, которая их использует. Эти отладочные строки невероятно полезны для реверса, так как всегда содержат имя файла и некоторый контекст функции. Более того, иногда в них есть имена функций, имена переменных и многое другое. Посмотрите путь к открываемому файлу — там подсказка, как получить файл qdb из прошивки Pixel 5. Просто продолжайте извлекать binwalk, пока не получите нужное.
diag_handler_locator_ghidra_script.py находит и переименовывает все функции-обработчики diag-команд в схему именования <op1>_<op2>_diag_cmd_handler, чтобы их было проще искать в Ghidra.
В некоторых скриптах используется код из других источников. Я старался указать авторство везде, но мог забыть одного-двух. Пожалуйста, сообщите, если я использовал ваш код и забыл указать вас.
Если этот репозиторий помог вам, поставьте ⭐!