DexGuard: o que é, ofuscação e proteção de aplicações Android

Autor: IT Sectr Publicado: 2026-04-03 Tempo de leitura: 8 min

DexGuard é uma solução para proteger aplicações Android contra engenharia reversa, fornecida pela Guardsquare. A ferramenta realiza ofuscação, criptografia e monitoramento proativo do bytecode DEX na fase de compilação. De acordo com Guardsquare, 2025, o produto é usado em mais de 10.000 projetos comerciais, incluindo sistemas bancários e de pagamento. DexGuard estende as capacidades do ProGuard adicionando proteção contra descompilação e ataques em tempo de execução sem modificar o código-fonte da aplicação.

Pontos principais

  • DexGuard é um ofuscador comercial Android, sucessor do ProGuard com proteção melhorada contra engenharia reversa
  • Criptografia de strings e classes ocorre na fase de compilação, tornando as secções de leitura do ficheiro DEX inacessíveis para análise estática
  • Controlo de integridade verifica a assinatura do APK em tempo de execução e interrompe a execução ao detetar modificação
  • Deteção de depurador, emulador e Frida previne a análise dinâmica em tempo de execução
  • Agente RASP deteta manipulações de memória e interceção de chamadas de sistema num dispositivo em execução

O que é DexGuard?

DexGuard é uma ferramenta comercial para ofuscar e proteger aplicações Android, desenvolvida pela mesma equipa que criou o ProGuard (Eric Lafortune). O produto surgiu em 2012 como uma extensão para projetos onde a ofuscação padrão do ProGuard é insuficiente. O DexGuard opera na fase pós-compilação, transformando o bytecode DEX numa forma protegida antes da empacotamento do APK.

A arquitetura do DexGuard é construída num modelo de proteção multicamadas. A primeira camada é a ofuscação de nomes de classes, métodos e campos usando overload induction. A segunda é a criptografia de constantes de string e seu carregamento através de métodos stub em tempo de execução. A terceira é o controlo de integridade do APK através da verificação da soma de verificação das assinaturas. De acordo com um relatório técnico da Guardsquare (2025), o uso combinado destas camadas aumenta o tempo de análise da aplicação de alguns minutos para várias semanas.

O DexGuard suporta todos os tipos de projetos Android: aplicações, bibliotecas, SDK e projetos de jogos Unity. A ferramenta integra-se no pipeline padrão do Gradle através do plugin com.guardsquare.dexguard e não requer intervenção manual após a configuração.

A diferença chave entre o DexGuard e as alternativas de código aberto é a proteção ativa em tempo de execução. A ferramenta não apenas ofusca o código — ela adiciona um agente que realiza verificações durante a execução da aplicação. Isto permite detetar ataques como injeção de Frida, Xposed ou depuração JDWP, e responder a eles: encerramento abrupto, geração de dados falsos ou notificação ao servidor.

Como funciona a ofuscação no DexGuard

O processo de ofuscação no DexGuard consiste em etapas sequenciais de transformação do bytecode, cada uma direcionada a um vetor de ataque específico.

Ofuscação de nomes com overload induction

Um ofuscador padrão substitui nomes por caracteres únicos a, b, c. O DexGuard usa overload induction — atribui o mesmo nome curto a métodos diferentes com assinaturas diferentes. O descompilador não consegue resolver a sobrecarga e gera código incorreto. De acordo com testes da Guardsquare, a sobrecarga de nomes aumenta os erros de descompilação em 78%.

Criptografia de constantes

Literais de string, URLs, chaves de API e tokens são criptografados usando AES-256 na fase de compilação. Em tempo de execução, um método stub descriptografa a string antes do uso e limpa a área de memória depois. Isto protege contra a visualização estática de strings no ficheiro DEX. Exemplo de resultado sem criptografia: um atacante executa strings dexguard.apk e vê todos os endpoints de API em texto simples.

Controlo de integridade do código

O DexGuard calcula um hash SHA-256 para cada ficheiro DEX e armazena o valor na camada nativa. Quando a aplicação é iniciada, o agente compara o hash atual com o de referência. Em caso de discrepância (APK modificado), a aplicação é encerrada. Adicionalmente, podem ser configuradas verificações de integridade para recursos e o manifesto.

groovy
// build.gradle (app-level)
buildscript {
    repositories {
        maven { url "https://guard repositories.com/dexguard" }
    }
    dependencies {
        classpath "com.guardsquare:dexguard-gradle-plugin:9.1.05"
    }
}

apply plugin: "com.guardsquare.dexguard"

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            dexguard {
                config "dexguard-project.txt"
            }
        }
    }
}

DexGuard vs ProGuard: diferenças principais

Ambas as ferramentas são desenvolvidas pela mesma empresa, mas visam cenários diferentes. ProGuard é um otimizador de código aberto e ofuscador mínimo incluído por padrão no Android SDK. O DexGuard é um produto comercial que adiciona níveis de proteção indisponíveis na versão gratuita.

CaracterísticaProGuardDexGuard
LicençaCódigo aberto (GPL)Comercial
Ofuscação de nomesSubstituição simplesOverload induction
Criptografia de stringsNãoAES-256
Proteção RASPNãoSim
Deteção de FridaNãoSim
Proteção de depuraçãoNãoSim
Controlo de integridadeNãoHash SHA-256
Suporte UnityNãoSim

A escolha entre ferramentas é determinada pela classe de informação a ser protegida. Para uma aplicação móvel comum, ProGuard é suficiente. Para aplicações bancárias, de pagamento e médicas onde a divulgação de código acarreta riscos financeiros ou regulatórios, o DexGuard é a solução recomendada. De acordo com OWASP Mobile Top 10 (2024), a falta de ofuscação em aplicações com dados sensíveis é considerada um risco crítico.

Configuração do DexGuard num projeto Gradle

A integração do DexGuard começa com a adição do repositório Guardsquare no build.gradle raiz. O plugin versão 9.x é compatível com AGP 7.4–8.5 e Gradle 7.6–8.7. A configuração de proteção é definida num ficheiro separado dexguard-project.txt, onde técnicas específicas são ativadas.

groovy
// root build.gradle
buildscript {
    repositories {
        maven { url "https://maven.guardsquare.com/dexguard" }
    }
}

// dexguard-project.txt — configuração mínima
# Criptografia de strings
@stringEncryption

# Ofuscação com overload induction
@overloadInduction

# Controlo de integridade do APK
@integrityCheck

# Proteção contra depurador e emulador
@antiDebug
@antiEmulator

As diretivas @stringEncryption e @overloadInduction são chave para proteger código comercial. Quando todas as anotações são ativadas, o tempo de compilação aumenta 30–60 segundos, o que é justificado pelo nível de proteção. A configuração é armazenada no VCS e aplicada apenas para compilações de release.

É importante configurar exceções para classes que usam reflexão. O DexGuard, tal como o ProGuard, não analisa reflexão automaticamente. No dexguard-project.txt, é necessário adicionar regras -keep para classes de bibliotecas carregadas via Class.forName ou @JavascriptInterface.

groovy
// dexguard-project.txt — regras keep
# Manter classes modelo Gson
-keep class com.example.model.** { *; }

# Manter interfaces WebView
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

# Excluir relatórios de falhas Firebase
-keep class com.google.firebase.** { *; }

Técnicas de proteção do DexGuard

O DexGuard inclui mais de 20 técnicas de proteção, divididas em estáticas (na fase de compilação) e dinâmicas (em tempo de execução). A escolha de técnicas específicas depende do modelo de ameaças da aplicação.

Proteção estática

Criptografia de recursos — imagens, assets e ficheiros de configuração são criptografados e descriptografados no primeiro acesso. A ofuscação de fluxo de controlo insere código morto e altera sequências de instruções, tornando o bytecode ilegível para descompiladores como jadx. Ocultamento de constantes substitui literais numéricos por expressões aritméticas calculadas em tempo de execução.

Proteção dinâmica (RASP)

Runtime Application Self-Protection — um agente dentro da aplicação que monitora o comportamento do ambiente de execução. O DexGuard RASP deteta: conexão Frida via /proc/self/maps, presença de Xposed Framework, execução sob um depurador (JDWP), emulador Android (QEMU). Ao detetar uma ameaça, uma política é acionada — encerramento ou geração de dados incorretos. De acordo com a pesquisa OWASP Mobile Security (2025), a proteção RASP parou 94% dos ataques automatizados típicos.

Proteção contra ataques baseados em tempo

O DexGuard adiciona atrasos aleatórios em secções críticas de código, aumentando o tempo de força bruta durante a análise dinâmica. O parâmetro é definido em milissegundos e randomizado a cada compilação. Isto dificulta o uso de ferramentas de fuzzing e scanners automatizados.

Diretrizes de integração e compatibilidade

Ao integrar o DexGuard num projeto existente, a compatibilidade retroativa com bibliotecas e SDKs populares deve ser considerada. Algumas bibliotecas são incompatíveis com ofuscação extrema devido a chamadas de reflexão.

Compatibilidade com SDKs populares

O DexGuard é compatível com Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide e Gson com regras keep corretas. Bibliotecas que usam anotações e geração de código (Dagger, Hilt, Room, DataBinding) requerem preservação explícita das classes geradas. A equipa Guardsquare publica amostras de configuração oficiais para SDKs populares.

Requisitos de ambiente

Requisitos mínimos: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. O DexGuard 9.1 suporta targetSdk 34 e compileSdk 34. Para Java 17 e AGP 8.2+, é necessária a versão 9.2 ou superior do DexGuard. A ferramenta é incompatível com R8 em modo de otimização total — ao usar DexGuard, o R8 é automaticamente desativado.

Testes após ofuscação

Após configurar o DexGuard, é necessário realizar testes de regressão de todos os caminhos afetados por reflexão e carregamento dinâmico de classes. Recomenda-se executar testes de UI automatizados numa compilação com proteção ativada antes do lançamento. A Guardsquare fornece o utilitário DexGuard Tracer, que regista erros ClassNotFoundException em tempo de execução sem encerrar a aplicação, simplificando a depuração de regras keep.

Perguntas Frequentes

Como o DexGuard difere do ProGuard?

O ProGuard é um ofuscador gratuito com substituição básica de nomes e otimização de bytecode. DexGuard adiciona criptografia de strings AES-256, overload induction para nomes, agente RASP em tempo de execução, controlo de integridade do APK e deteção de Frida, Xposed, emulador e depurador. O ProGuard é suficiente para aplicações comuns, o DexGuard é para aplicações bancárias e empresariais.

Quanto custa uma licença do DexGuard?

O DexGuard é distribuído sob licença comercial com pagamento anual. O custo depende do número de projetos e do tipo de subscrição. A partir de 2025, uma licença básica para um projeto começa em 5.000 USD por ano. Existe um programa de parceria com até 40% de desconto para startups.

Pode o DexGuard ser usado com Kotlin e Jetpack Compose?

Sim, o DexGuard é totalmente compatível com Kotlin e Jetpack Compose, incluindo corrotinas e o compilador Compose. São necessárias regras keep adicionais para classes geradas pelo compilador Kotlin. A Guardsquare recomenda usar o modelo de configuração kotlin-project.txt da documentação oficial.

O DexGuard aumenta o tamanho do APK?

A criptografia de strings e a adição do agente RASP aumentam o tamanho do APK em 5–15% dependendo da quantidade de código protegido. A ofuscação de nomes e a ofuscação de fluxo de controlo não aumentam o tamanho — elas substituem nomes existentes. Em média, um APK com proteção total DexGuard torna-se 8–12% maior que o original.

Pode o DexGuard ser desativado para depuração?

Sim, a configuração de proteção é aplicada apenas ao tipo de compilação de release. Para compilações de debug, o DexGuard desativa automaticamente a criptografia e as verificações RASP. Os programadores podem ativar forçosamente o DexGuard em modo debug através do parâmetro guard.force.enable=true no gradle.properties para testar a compilação protegida.

Resumo

  • DexGuard é uma ferramenta comercial de proteção para Android que estende as capacidades do ProGuard com um conjunto completo de técnicas anti-reversing
  • Ofuscação com overload induction torna o código descompilado não funcional ao gerar sobrecargas de métodos irresolúveis
  • Criptografia de constantes de string e recursos com AES-256 bloqueia a análise estática do ficheiro DEX via jadx e strings
  • Agente RASP deteta Frida, Xposed, depurador JDWP e emulador em tempo de execução, realizando encerramento ao detetar ameaça
  • Controlo de integridade do APK via hash SHA-256 na camada nativa previne a execução de uma versão modificada da aplicação
  • Integração num projeto Gradle com anotações @stringEncryption, @overloadInduction e @antiDebug requer 10–15 minutos de configuração
  • DexGuard é a ferramenta recomendada para aplicações Android bancárias, de pagamento e médicas onde o comprometimento do código acarreta riscos financeiros

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também