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 é 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.
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.
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%.
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.
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.
// 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"
}
}
}
}
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ística | ProGuard | DexGuard |
|---|---|---|
| Licença | Código aberto (GPL) | Comercial |
| Ofuscação de nomes | Substituição simples | Overload induction |
| Criptografia de strings | Não | AES-256 |
| Proteção RASP | Não | Sim |
| Deteção de Frida | Não | Sim |
| Proteção de depuração | Não | Sim |
| Controlo de integridade | Não | Hash SHA-256 |
| Suporte Unity | Não | Sim |
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.
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.
// 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.
// 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.** { *; }
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.
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.
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.
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.
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.
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 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.
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
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.
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.
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.
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.
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
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.
Leia também