image

O código desobsfuscante de aplicativos Android pode ser feito usando várias ferramentas como:

  • § Simplify
  • § JavaDeObfuscator JDO
  • § Dex-oracle
  • § Androguard – androapkinfo.py

As estratégias de desobsfusação são de dois critérios como:

  • Correspondência de padrões – usando dexoracle, androguard, JavaDeObfuscator
  • Execução Virtual – utilizando smalivm + simplify

Tipos de ofuscação:

  1. Remapeando Identificador
  2. Criptografia literal
  3. White noise (Ruído branco)
  4. Packers

I. Remapeando Identificador

  • Nomes de classe Ø
  • Nomes do método Ø
  • Nomes variáveis Ø
  • Ø ProGuard repesca e tira informações de depuração
  • Ø ProGuard mais comum e fraco
  • § Tais como classes renomeadas em ordem alfabética durante a ofuscação
  • § Os nomes dos membros não mudaram ou não usaram configurações agressivas do ProGuard durante a ofuscação[ex: int final estático privado JPEG_ENCODING_QUALITY]
  • § Parâmetros/nomes de variáveis locais removidos durante a ofuscação [ex: (params)]
  • § Métodos renomeados durante a ofuscação[ex: c();]

II. Criptografia literal:

  • Strings Ø, números, cargas de matriz
  • Ø Original substituído por versão criptografada e chamada para método de descriptografia
  • Ø Ou substituído pelo método de pesquisa

III. Ruído branco:

  • Ø Muitas operações inúteis ou chamadas de método
  • Ø Sem efeitos colaterais diretos ou indiretos fora do método
  • Ø não modifica o estado de classe
  • Sem I/O (arquivo, rede)
  • Não afeta o valor de retorno
    • Ex: x=5; 1+2+3*4/5%8; retorno x;
  • Ø Valores nunca utilizados: ex: novo Integer(0).intValue();<-valores nunca usados dentro do método ou código

IV. Packers:

  • Ø ORIGINAL DEX substituído por desembalador DEX
  • Ø Original DEX é geralmente criptografado e escondido em APK
  • Ø Descriptografa e carrega DEX no tempo de execução
    • Ex: Bangcle (SecNeo), APKProtect, Qihoo

Simplify - Generic Android DeObfuscator:

Simplify aplica otimizações como propagação constante, remoção de código morto, retração e otimizações específicas do olho mágico. As otimizações são bastante simples, mas quando aplicadas em conjunto e em sucessão, podem descriptografar strings, descascar camadas de ofuscação e simplificar muito o código.

Simplify a ferramenta funciona muito apenas em plataformas Linux e ferramenta simplificadora integrada com Vezir Linux VM, Santako Linux VM desenvolvido especialmente para testes de aplicativos móveis android com todas as ferramentas como Apktool, dex2jar, smali, baksmali, JD-GUI, Jadx, Androguard, Androbugs framework, eclipse, enjarify, sqlmap, gerente AVD, laboratórios vulneráveis para a prática.

Ferramenta disponível em -> http://github.com/CalebFenton/simplify

Instalação:

Como este projeto contém submodules para frameworks Android, ou clone com –recursivo:

git clone --https://github.com/CalebFenton/simplify.git recursiva

Ou atualizar submodules a qualquer momento com:

git submodule atualização --init --recursivo

Então, para o build de um único jar:

./gradlew fatjar

O Simplify jar estará em simplificar/construir/libs/simplificar.jar. Você pode testar que está funcionando simplificando o aplicativo de exemplo ofuscado:

java -jar simplify/build/libs/simplify.jar -it 'org/cf' simplify/obfuscated-example

Solucionando problemas:

Simplificar está em estágios iniciais de desenvolvimento. Se você encontrar um fracasso, tente essas recomendações, em ordem:

  1. Inclua apenas alguns métodos ou classes com -it.
  2. Se a falha for devido ao máximo de visitas excedidas, tente usar visitas mais altas –max-address-visits, -max-call-depth e –max-method-visits.
  3. Tente com -v ou -v 2 e informe o problema com os registros.
  4. Tente novamente, mas não quebre o contato visual. Simplificar pode sentir medo.

Uso:

Etiqueta 1: Após a instalação da simplificação, tente usar o comando abaixo mencionado para verificar a instalação adequada.

image

Etiqueta 2: Este é o comando para desobsfumar usando simplificar com os arquivos smali descompilados de um APK.

image

Etiqueta 3: A saída da ferramenta Simplificar para a aplicação será neste formulário.

image

Etiqueta 4: A saída será na forma de arquivo .dex residido no caminho ‘simplificar/simplificar/construir/libs’

image

Etiqueta 5: Existem inúmeras maneiras de extrair os arquivos smali e aqui é usado com “Baksmali” com o arquivo .dex como entrada da saída que o pegamos de simplificar.

image

Etiqueta 6: Compare os arquivos smali de código ofuscado e desobsfuscado do arquivo APK usando gedit ou qualquer ferramenta de editor de texto.

Etiqueta 7: O primeiro ponto a ser relatado e observado é que a **remoção do código Dead, substituiu o valor do parâmetro original e os nomes do método e o método Não refletado.

Remoção de código morto:

O código está morto se removê-lo não pode alterar o comportamento do aplicativo. O caso mais óbvio é se o código é inalcançável, por exemplo, se (falso) { // morto }). Se o código for alcançável, ele pode ser considerado morto se não afetar nenhum estado fora do método, ou seja, não tem efeito colateral.

image

a Código nãousado (código morto) adicionado durante a ofuscação ou seja, o código smali na imagem é extraído do arquivo apk original.

image

(b) Código não usado (remoção de código morto) durante a DeObfuscação usando a ferramenta simplificada.

Propagação constante:

Se uma operação colocar um valor de um tipo que pode ser transformado em uma constante, como uma sequência, número ou booleano, essa otimização substituirá essa operação pela constante. Por exemplo:

image

c Nomes de parâmetros e nomes de funções na aplicação ofuscada de APK

image

d Os nomes originais de parâmetro e método usados no APK revelados durante o DeObfuscation usando a ferramenta Simplificar

Unreflection:

Um grande desafio com a análise estática de Java é a reflexão. Só não é possível saber que os argumentos são para métodos de reflexão sem fazer uma análise cuidadosa do fluxo de dados.

image

e O código Smali tem alguns métodos refletidos usados no código APK para dificultar a compreensão do código após a engenharia reversa, ou seja, para fazer APK codificado

image

f ‘Simplificar’ removeu os métodos não refletados dos arquivos smali para melhor compreensão do fluxo de processos.


Autor: Kailesh Manoharan

Artigo Original