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:
- APIs libc (ex: open, read) podem ter sido substituídas por syscalls do sistema operacional.
- Obfuscator-LLVM pode ter sido aplicado para realizar "Control Flow Flattening" ou "Bogus Control Flow".
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.