hacktricks/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md

5 KiB

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Técnicas de Desofuscação Manual

No campo da segurança de software, o processo de tornar o código obscuro compreensível, conhecido como desofuscação, é crucial. Este guia explora várias estratégias de desofuscação, focando em técnicas de análise estática e reconhecimento de padrões de ofuscação. Além disso, ele apresenta um exercício para aplicação prática e sugere recursos adicionais para aqueles interessados em explorar tópicos mais avançados.

Estratégias para Desofuscação Estática

Ao lidar com código ofuscado, várias estratégias podem ser empregadas, dependendo da natureza da ofuscação:

  • Bytecode DEX (Java): Uma abordagem eficaz envolve identificar os métodos de desofuscação do aplicativo e replicar esses métodos em um arquivo Java. Este arquivo é executado para reverter a ofuscação nos elementos visados.
  • Java e Código Nativo: Outro método é traduzir o algoritmo de desofuscação para uma linguagem de script como Python. Esta estratégia destaca que o objetivo principal não é entender completamente o algoritmo, mas executá-lo de forma eficaz.

Identificação de Ofuscação

Reconhecer o código ofuscado é o primeiro passo no processo de desofuscação. Indicadores-chave incluem:

  • A ausência ou embaralhamento de strings em Java e Android, o que pode sugerir ofuscação de strings.
  • A presença de arquivos binários no diretório de ativos ou chamadas para DexClassLoader, indicando desempacotamento de código e carregamento dinâmico.
  • O uso de bibliotecas nativas junto com funções JNI não identificáveis, indicando a possível ofuscação de métodos nativos.

Análise Dinâmica na Desofuscação

Ao executar o código em um ambiente controlado, a análise dinâmica permite observar como o código ofuscado se comporta em tempo real. Este método é particularmente eficaz para descobrir o funcionamento interno de padrões de ofuscação complexos que são projetados para ocultar a verdadeira intenção do código.

Aplicações da Análise Dinâmica

  • Descriptografia em Tempo de Execução: Muitas técnicas de ofuscação envolvem a criptografia de strings ou segmentos de código que só são descriptografados em tempo de execução. Através da análise dinâmica, esses elementos criptografados podem ser capturados no momento da descriptografia, revelando sua forma verdadeira.
  • Identificação de Técnicas de Ofuscação: Ao monitorar o comportamento do aplicativo, a análise dinâmica pode ajudar a identificar técnicas específicas de ofuscação sendo usadas, como virtualização de código, empacotadores ou geração de código dinâmico.
  • Descoberta de Funcionalidades Ocultas: O código ofuscado pode conter funcionalidades ocultas que não são aparentes apenas através da análise estática. A análise dinâmica permite observar todos os caminhos de código, incluindo aqueles executados condicionalmente, para descobrir tais funcionalidades ocultas.

Referências e Leituras Adicionais

  • https://maddiestone.github.io/AndroidAppRE/obfuscation.html
  • BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [vídeo]
  • Esta palestra aborda engenharia reversa de uma das bibliotecas nativas de anti-análise mais complexas que vi sendo usada por um aplicativo Android. Ela cobre principalmente técnicas de ofuscação em código nativo.
  • REcon 2019: “The Path to the Payload: Android Edition” [vídeo]
  • Esta palestra discute uma série de técnicas de ofuscação, exclusivamente em código Java, que um botnet Android estava usando para ocultar seu comportamento.