Skip to content

MASTG-TEST-0051: Teste de Ofuscação

Visão Geral

Análise Estática

Descompile o APK ( Descompilação de Código Java) e analise-o ( Revisão de Código Java Descompilado) para determinar se a base de código foi ofuscada.

Abaixo você pode encontrar um exemplo de um bloco de código ofuscado:

package com.a.a.a;

import com.a.a.b.a;
import java.util.List;

class a$b
  extends a
{
  public a$b(List paramList)
  {
    super(paramList);
  }

  public boolean areAllItemsEnabled()
  {
    return true;
  }

  public boolean isEnabled(int paramInt)
  {
    return true;
  }
}

Aqui estão algumas considerações:

  • Identificadores significativos, como nomes de classes, métodos e variáveis, podem ter sido descartados.
  • Recursos de string e strings em binários podem ter sido criptografados.
  • Código e dados relacionados à funcionalidade protegida podem estar criptografados, empacotados ou ocultos de outra forma.

Para código nativo:

Algumas dessas técnicas são discutidas e analisadas na postagem do blog "Security hardening of Android native code" por Gautam Arvind e na apresentação "APKiD: Fast Identification of AppShielding Products" por Eduardo Novella.

Para uma avaliação mais detalhada, é necessário um entendimento aprofundado das ameaças relevantes e dos métodos de ofuscação utilizados. Ferramentas como APKiD podem fornecer indícios adicionais sobre quais técnicas foram usadas no aplicativo alvo, como ofuscadores, packers e medidas anti-debug.

Análise Dinâmica

Você pode usar APKiD para detectar se o aplicativo foi ofuscado.

Exemplo usando Android UnCrackable L4:

apkid mastg/Crackmes/Android/Level_04/r2pay-v1.0.apk
[+] APKiD 2.1.2 :: from RedNaga :: rednaga.io
[*] mastg/Crackmes/Android/Level_04/r2pay-v1.0.apk!classes.dex
 |-> anti_vm : Build.TAGS check, possible ro.secure check
 |-> compiler : r8
 |-> obfuscator : unreadable field names, unreadable method names

Neste caso, a ferramenta detecta que o aplicativo possui nomes de campos e métodos ilegíveis, entre outras coisas.