DexGuard est une solution de protection des applications Android contre l'ingénierie inverse, fournie par Guardsquare. L'outil effectue l'obfuscation, le chiffrement et la surveillance proactive du bytecode DEX lors de la phase de compilation. Selon Guardsquare, 2025, le produit est utilisé dans plus de 10 000 projets commerciaux, y compris les systèmes bancaires et de paiement. DexGuard étend les capacités de ProGuard en ajoutant une protection contre la décompilation et les attaques au moment de l'exécution sans modifier le code source de l'application.
Points clés
DexGuard est un outil commercial d'obfuscation et de protection des applications Android, développé par la même équipe qui a créé ProGuard (Eric Lafortune). Le produit est apparu en 2012 comme une extension pour les projets où l'obfuscation standard de ProGuard est insuffisante. DexGuard fonctionne en phase post-compilation, transformant le bytecode DEX en une forme protégée avant le packaging de l'APK.
L'architecture de DexGuard est construite sur un modèle de protection multicouche. La première couche est l'obfuscation des noms de classes, méthodes et champs à l'aide de l'overload induction. La deuxième est le chiffrement des constantes de chaîne et leur chargement via des méthodes stub au moment de l'exécution. La troisième est le contrôle d'intégrité de l'APK via la vérification de la somme de contrôle des signatures. Selon un rapport technique de Guardsquare (2025), l'utilisation combinée de ces couches augmente le temps d'analyse de l'application de quelques minutes à plusieurs semaines.
DexGuard prend en charge tous les types de projets Android : applications, bibliothèques, SDK et projets de jeux Unity. L'outil s'intègre dans le pipeline standard Gradle via le plugin com.guardsquare.dexguard et ne nécessite aucune intervention manuelle après la configuration.
La différence clé entre DexGuard et les alternatives open source est la protection active au moment de l'exécution. L'outil ne se contente pas d'obfusquer le code — il ajoute un agent qui effectue des vérifications pendant l'exécution de l'application. Cela permet de détecter des attaques telles que l'injection de Frida, Xposed ou le débogage JDWP, et d'y répondre : arrêt brutal, génération de fausses données ou notification au serveur.
Le processus d'obfuscation dans DexGuard consiste en étapes séquentielles de transformation du bytecode, chacune ciblant un vecteur d'attaque spécifique.
Un obfuscateur standard remplace les noms par des caractères uniques a, b, c. DexGuard utilise l'overload induction — il attribue le même nom court à différentes méthodes avec différentes signatures. Le décompilateur ne peut pas résoudre la surcharge et génère un code incorrect. Selon les tests de Guardsquare, la surcharge de noms augmente les erreurs de décompilation de 78%.
Les littéraux de chaîne, URL, clés API et jetons sont chiffrés avec AES-256 lors de la phase de compilation. Au moment de l'exécution, une méthode stub déchiffre la chaîne avant utilisation et efface la zone mémoire après. Cela protège contre l'affichage statique des chaînes dans le fichier DEX. Exemple de résultat sans chiffrement : un attaquant exécute strings dexguard.apk et voit tous les points de terminaison API en texte clair.
DexGuard calcule un hash SHA-256 pour chaque fichier DEX et stocke la valeur dans la couche native. Lors du lancement de l'application, l'agent compare le hash actuel avec la référence. En cas de divergence (APK modifié), l'application se termine. De plus, des vérifications d'intégrité pour les ressources et le manifeste peuvent être configurées.
// build.gradle (niveau application)
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"
}
}
}
}
Les deux outils sont développés par la même entreprise mais ciblent des scénarios différents. ProGuard est un optimiseur open source et un obfuscateur minimal inclus par défaut dans le SDK Android. DexGuard est un produit commercial ajoutant des niveaux de protection indisponibles dans la version gratuite.
| Caractéristique | ProGuard | DexGuard |
|---|---|---|
| Licence | Open source (GPL) | Commerciale |
| Obfuscation des noms | Remplacement simple | Overload induction |
| Chiffrement des chaînes | Non | AES-256 |
| Protection RASP | Non | Oui |
| Détection de Frida | Non | Oui |
| Protection de débogage | Non | Oui |
| Contrôle d'intégrité | Non | Hachage SHA-256 |
| Support Unity | Non | Oui |
Le choix entre les outils est déterminé par la classe d'informations à protéger. Pour une application mobile ordinaire, ProGuard est suffisant. Pour les applications bancaires, de paiement et médicales où la divulgation de code entraîne des risques financiers ou réglementaires, DexGuard est la solution recommandée. Selon OWASP Mobile Top 10 (2024), l'absence d'obfuscation dans les applications contenant des données sensibles est considérée comme un risque critique.
L'intégration de DexGuard commence par l'ajout du dépôt Guardsquare dans le build.gradle racine. Le plugin version 9.x est compatible avec AGP 7.4–8.5 et Gradle 7.6–8.7. La configuration de protection est définie dans un fichier séparé dexguard-project.txt, où des techniques spécifiques sont activées.
// build.gradle racine
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — configuration minimale
# Chiffrement des chaînes
@stringEncryption
# Obfuscation avec overload induction
@overloadInduction
# Contrôle d'intégrité de l'APK
@integrityCheck
# Protection contre le débogueur et l'émulateur
@antiDebug
@antiEmulator
Les directives @stringEncryption et @overloadInduction sont essentielles pour protéger le code commercial. Lorsque toutes les annotations sont activées, le temps de compilation augmente de 30 à 60 secondes, ce qui est justifié par le niveau de protection. La configuration est stockée dans le VCS et appliquée uniquement pour les builds de release.
Il est important de configurer des exceptions pour les classes qui utilisent la réflexion. DexGuard, comme ProGuard, n'analyse pas la réflexion automatiquement. Dans dexguard-project.txt, vous devez ajouter des règles -keep pour les classes de bibliothèques chargées via Class.forName ou @JavascriptInterface.
// dexguard-project.txt — règles keep
# Conserver les classes modèle Gson
-keep class com.example.model.** { *; }
# Conserver les interfaces WebView
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Exclure les rapports d'erreur Firebase
-keep class com.google.firebase.** { *; }
DexGuard comprend plus de 20 techniques de protection, divisées en statiques (lors de la phase de compilation) et dynamiques (au moment de l'exécution). Le choix des techniques spécifiques dépend du modèle de menace de l'application.
Chiffrement des ressources — les images, les assets et les fichiers de configuration sont chiffrés et déchiffrés lors du premier accès. L'obfuscation du flux de contrôle insère du code mort et modifie les séquences d'instructions, rendant le bytecode illisible pour les décompilateurs comme jadx. Le masquage de constantes remplace les littéraux numériques par des expressions arithmétiques calculées au moment de l'exécution.
Runtime Application Self-Protection — un agent à l'intérieur de l'application qui surveille le comportement de l'environnement d'exécution. DexGuard RASP détecte : la connexion Frida via /proc/self/maps, la présence de Xposed Framework, l'exécution sous un débogueur (JDWP), l'émulateur Android (QEMU). Lors de la détection d'une menace, une politique est déclenchée — arrêt ou génération de données incorrectes. Selon la recherche OWASP Mobile Security (2025), la protection RASP a arrêté 94% des attaques automatisées typiques.
DexGuard ajoute des délais aléatoires dans les sections critiques de code, augmentant le temps de force brute lors de l'analyse dynamique. Le paramètre est défini en millisecondes et randomisé à chaque compilation. Cela complique l'utilisation d'outils de fuzzing et de scanners automatisés.
Lors de l'intégration de DexGuard dans un projet existant, la compatibilité ascendante avec les bibliothèques et les SDK populaires doit être prise en compte. Certaines bibliothèques sont incompatibles avec une obfuscation extrême en raison d'appels de réflexion.
DexGuard est compatible avec Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide et Gson avec des règles keep correctes. Les bibliothèques utilisant des annotations et la génération de code (Dagger, Hilt, Room, DataBinding) nécessitent une préservation explicite des classes générées. L'équipe Guardsquare publie des échantillons de configuration officiels pour les SDK populaires.
Exigences minimales : Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. DexGuard 9.1 prend en charge targetSdk 34 et compileSdk 34. Pour Java 17 et AGP 8.2+, la version 9.2 ou supérieure de DexGuard est requise. L'outil est incompatible avec R8 en mode d'optimisation complète — lors de l'utilisation de DexGuard, R8 est automatiquement désactivé.
Après la configuration de DexGuard, des tests de régression de tous les chemins affectés par la réflexion et le chargement dynamique de classes sont nécessaires. Il est recommandé d'exécuter des tests UI automatisés sur un build avec protection activée avant la publication. Guardsquare fournit l'utilitaire DexGuard Tracer, qui enregistre les erreurs ClassNotFoundException au moment de l'exécution sans planter l'application, simplifiant le débogage des règles keep.
Questions fréquentes
ProGuard est un obfuscateur gratuit avec remplacement de base des noms et optimisation du bytecode. DexGuard ajoute le chiffrement de chaînes AES-256, l'overload induction pour les noms, un agent RASP au moment de l'exécution, le contrôle d'intégrité de l'APK et la détection de Frida, Xposed, de l'émulateur et du débogueur. ProGuard est suffisant pour les applications ordinaires, DexGuard est destiné aux applications bancaires et d'entreprise.
DexGuard est distribué sous licence commerciale avec paiement annuel. Le coût dépend du nombre de projets et du type d'abonnement. En 2025, une licence de base pour un projet commence à 5 000 USD par an. Un programme de partenariat avec une réduction allant jusqu'à 40% est disponible pour les startups.
Oui, DexGuard est entièrement compatible avec Kotlin et Jetpack Compose, y compris les coroutines et le compilateur Compose. Des règles keep supplémentaires sont requises pour les classes générées par le compilateur Kotlin. Guardsquare recommande d'utiliser le modèle de configuration kotlin-project.txt de la documentation officielle.
Le chiffrement des chaînes et l'ajout de l'agent RASP augmentent la taille de l'APK de 5 à 15% selon la quantité de code protégé. L'obfuscation des noms et l'obfuscation du flux de contrôle n'augmentent pas la taille — elles remplacent les noms existants. En moyenne, un APK avec une protection DexGuard complète devient 8 à 12% plus grand que l'original.
Oui, la configuration de protection est appliquée uniquement au type de build de release. Pour les builds de debug, DexGuard désactive automatiquement le chiffrement et les vérifications RASP. Les développeurs peuvent forcer l'activation de DexGuard en mode debug via le paramètre guard.force.enable=true dans gradle.properties pour tester le build protégé.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi