
Coleção de scripts para engenharia reversa de firmware de baseband/modem Qualcomm Hexagon
Coleção de scripts para engenharia reversa do firmware de baseband / modem da Qualcomm
Todos os offsets/endereços nos scripts foram atualizados para o firmware de março do Pixel 5 e precisam ser alterados caso você use uma versão diferente.
merge_modem_firmware.py mescla todos os arquivos modem.b** (modem.b00, modem.b01, etc.) em um único binário monolítico chamado modem.bin. Isso torna muito mais fácil carregá-lo no IDA e no Ghidra.
clade_extractor e dlpage_extractor descomprimem as seções compactadas CLADE e Delta.
clade_extractor é compilado para x86 (ou sua arquitetura nativa) e enviará a seção descomprimida para um arquivo. Pelo que sei, não há informações públicas ou código publicado sobre a compactação CLADE da Qualcomm além da patente. A CLADE substituiu o q6zip como principal método de compactação para módulos em modo de usuário e é difícil de reverter porque é implementada majoritariamente em hardware.
dlpage_extractor é compilado para Hexagon e emulado no QEMU (como trabalhos anteriores fizeram). A memória descomprimida precisará então ser extraída no GDB. Há também código aqui para o antigo método de compactação q6zip, embora ele não seja mais usado em binários de modem mais recentes. A seção delta tem apenas alguns structs de manipuladores de comandos diag, então a seção compactada com CLADE é onde está a maior parte do conteúdo. Eu nem me preocuparia com isso em binários mais novos; está aqui apenas para os mais antigos.
Depois de obter a seção CLADE descomprimida, você pode executar add_decompressed_section_to_modem_bin.py para adicioná-la ao modem.bin. Isso pode ser feito manualmente no IDA e no Ghidra, mas este script facilita um pouco o carregamento e o backup dos binários finais.
qshrink4_qdb_ghidra_script.py decodifica todas as chamadas para msg_v4_send* em suas respectivas strings de depuração. Ele adicionará um comentário no topo de cada função que as utiliza. Essas strings de depuração são extremamente úteis para engenharia reversa, pois sempre fornecem o nome do arquivo e algum contexto da função. Para melhorar ainda mais, às vezes contêm nomes de funções, nomes de variáveis e muito mais. Verifique o caminho do arquivo que está sendo aberto para obter ajuda sobre como conseguir o arquivo qdb a partir do firmware do Pixel 5. Continue extraindo com o binwalk até obter o que precisa.
diag_handler_locator_ghidra_script.py localiza e renomeia todas as funções manipuladoras de comandos diag para o esquema de nomenclatura <op1>_<op2>_diag_cmd_handler, facilitando a busca no Ghidra.
Alguns dos scripts contêm código retirado de outras fontes. Tentei dar crédito para tudo, mas posso ter esquecido um ou outro. Por favor, me avise se usei seu código e esqueci de creditá-lo.
Se este repositório ajudou você, por favor, dê ⭐ nele!