MASTG-TECH-0019: Recuperando Strings
Ao realizar qualquer tipo de análise de binários, as strings podem ser consideradas como um dos pontos de partida mais valiosos, pois fornecem contexto. Por exemplo, uma string de log de erro como "Data encryption failed." nos dá uma pista de que o código adjacente pode ser responsável por realizar algum tipo de operação de criptografia.
Bytecode Java e Kotlin¶
Como já sabemos, todo o bytecode Java e Kotlin de um aplicativo Android é compilado em um arquivo DEX. Cada arquivo DEX contém uma lista de identificadores de string (strings_ids), que inclui todos os identificadores de string usados no binário sempre que uma string é referenciada, incluindo nomenclatura interna (por exemplo, descritores de tipo) ou objetos constantes referenciados pelo código (por exemplo, strings embutidas no código). Você pode simplesmente extrair essa lista usando ferramentas como Ghidra (baseada em interface gráfica) ou Dextra (baseada em linha de comando).
Com o Ghidra, as strings podem ser obtidas carregando o arquivo DEX e selecionando Janela -> Defined strings no menu.
Carregar um arquivo APK diretamente no Ghidra pode levar a inconsistências. Portanto, é recomendado extrair o arquivo DEX descompactando o APK e depois carregá-lo no Ghidra.

Com o Dextra, você pode extrair todas as strings usando o seguinte comando:
dextra -S classes.dex
A saída do Dextra pode ser manipulada usando comandos padrão do Linux, por exemplo, usando grep para buscar por determinadas palavras-chave.
É importante saber que a lista de strings obtida usando as ferramentas acima pode ser muito grande, pois também inclui os diversos nomes de classes e pacotes usados no aplicativo. Percorrer a lista completa, especialmente para binários grandes, pode ser muito trabalhoso. Portanto, é recomendado começar com buscas baseadas em palavras-chave e percorrer a lista apenas quando a busca por palavras-chave não ajudar. Algumas palavras-chave genéricas que podem ser um bom ponto de partida são: password, key e secret. Outras palavras-chave úteis específicas ao contexto do aplicativo podem ser obtidas enquanto você está usando o próprio aplicativo. Por exemplo, imagine que o aplicativo tenha um formulário de login, você pode anotar o texto de placeholder ou título exibido nos campos de entrada e usá-lo como ponto de partida para sua análise estática.
Código Nativo¶
Para extrair strings de código nativo usado em um aplicativo Android, você pode usar ferramentas com interface gráfica como Ghidra ou iaito ou contar com ferramentas baseadas em linha de comando como o utilitário Unix strings (strings <caminho_para_o_binário>) ou rabin2 do radare2 (rabin2 -zz <caminho_para_o_binário>). Ao usar as baseadas em linha de comando, você pode aproveitar outras ferramentas como grep (por exemplo, em conjunto com expressões regulares) para filtrar e analisar ainda mais os resultados.