No âmbito da **segurança de software**, o processo de tornar o código obscurecido compreensível, conhecido como **de-obfuscação**, é crucial. Este guia explora várias estratégias para de-obfuscação, focando em técnicas de análise estática e reconhecimento de padrões de ofuscação. Além disso, apresenta um exercício para aplicação prática e sugere recursos adicionais para aqueles interessados em explorar tópicos mais avançados.
Ao lidar com **código ofuscado**, várias estratégias podem ser empregadas dependendo da natureza da ofuscação:
- **Código bytecode DEX (Java)**: Uma abordagem eficaz envolve identificar os métodos de de-obfuscação do aplicativo e, em seguida, replicar esses métodos em um arquivo Java. Este arquivo é executado para reverter a ofuscação nos elementos alvo.
- **Código Java e Nativo**: Outro método é traduzir o algoritmo de de-obfuscaçã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.
- 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 assets ou chamadas para `DexClassLoader`, sugerindo desempacotamento de código e carregamento dinâmico.
- O uso de **bibliotecas nativas juntamente com funções JNI não identificáveis**, indicando potencial ofuscação de métodos nativos.
Ao executar o código em um ambiente controlado, a análise dinâmica **permite a observação de 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 esconder a verdadeira intenção do código.
- **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 verdadeira forma.
- **Identificando 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 utilizadas, como virtualização de código, packers ou geração dinâmica de código.
- **Descobrindo 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 a observação de todos os caminhos de código, incluindo aqueles executados condicionalmente, para descobrir tais funcionalidades ocultas.
* BlackHat USA 2018: “Desempacotando o Desempacotador: Engenharia Reversa de uma Biblioteca Anti-Análise Android” \[[vídeo](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
* Esta palestra aborda a engenharia reversa de uma das bibliotecas nativas anti-análise mais complexas que já vi usadas por um aplicativo Android. Cobre principalmente técnicas de ofuscação em código nativo.
* REcon 2019: “O Caminho para o Payload: Edição Android” \[[vídeo](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
* Esta palestra discute uma série de técnicas de ofuscação, exclusivamente em código Java, que um botnet Android estava usando para esconder seu comportamento.