DexGuard ist eine Lösung zum Schutz von Android-Anwendungen vor Reverse Engineering, bereitgestellt von Guardsquare. Das Tool führt Obfuskation, Verschlüsselung und proaktive Überwachung von DEX-Bytecode in der Build-Phase durch. Laut Guardsquare, 2025 wird das Produkt in über 10.000 kommerziellen Projekten eingesetzt, darunter Bank- und Zahlungssysteme. DexGuard erweitert die Möglichkeiten von ProGuard um Schutz vor Dekompilierung und Runtime-Angriffen, ohne den Quellcode der Anwendung zu ändern.
Wichtige Punkte
DexGuard ist ein kommerzielles Tool zum Obfuskieren und Schützen von Android-Anwendungen, entwickelt vom selben Team, das ProGuard (Eric Lafortune) entwickelt hat. Das Produkt erschien 2012 als Erweiterung für Projekte, bei denen die Standard-Obfuskation von ProGuard nicht ausreicht. DexGuard arbeitet in der Nachkompilierungsphase und wandelt DEX-Bytecode vor der APK-Paketierung in eine geschützte Form um.
Die Architektur von DexGuard basiert auf einem mehrschichtigen Schutzmodell. Die erste Schicht ist die Obfuskation von Klassen-, Methoden- und Feldnamen mittels Overload Induction. Die zweite ist die Verschlüsselung von String-Konstanten und deren Laden über Stub-Methoden zur Laufzeit. Die dritte ist die APK-Integritätskontrolle durch Prüfsummenverifikation von Signaturen. Laut einem technischen Bericht von Guardsquare (2025) erhöht die kombinierte Anwendung dieser Schichten die Analysezeit einer Anwendung von wenigen Minuten auf mehrere Wochen.
DexGuard unterstützt alle Arten von Android-Projekten: Anwendungen, Bibliotheken, SDKs und Unity-Spieleprojekte. Das Tool integriert sich über das Plugin com.guardsquare.dexguard in die standardmäßige Gradle-Pipeline und erfordert nach der Einrichtung keinen manuellen Eingriff.
Der Hauptunterschied zwischen DexGuard und Open-Source-Alternativen ist der aktive Runtime-Schutz. Das Tool obfuskiert nicht nur Code, sondern fügt einen Agenten hinzu, der während der Ausführung der Anwendung Prüfungen durchführt. Dies ermöglicht die Erkennung von Angriffen wie Frida-Injektion, Xposed oder JDWP-Debugging und entsprechende Reaktionen: Absturz, Generierung von Falschdaten oder Serverbenachrichtigung.
Der Obfuskationsprozess in DexGuard besteht aus aufeinanderfolgenden Phasen der Bytecode-Transformation, die jeweils auf einen bestimmten Angriffsvektor abzielen.
Ein Standard-Obfuskator ersetzt Namen durch Einzelbuchstaben a, b, c. DexGuard verwendet Overload Induction — es weist verschiedenen Methoden mit unterschiedlichen Signaturen denselben Kurznamen zu. Der Dekompilierer kann die Überladung nicht auflösen und generiert fehlerhaften Code. Laut Guardsquare-Tests erhöht die Namensüberladung die Dekompilierungsfehler um 78%.
String-Literale, URLs, API-Schlüssel und Token werden in der Build-Phase mit AES-256 verschlüsselt. Zur Laufzeit entschlüsselt eine Stub-Methode den String vor der Verwendung und setzt den Speicherbereich danach zurück. Dies schützt vor der statischen Anzeige von Strings in der DEX-Datei. Beispiel für ein Ergebnis ohne Verschlüsselung: Ein Angreifer führt strings dexguard.apk aus und sieht alle API-Endpunkte im Klartext.
DexGuard berechnet einen SHA-256-Hash für jede DEX-Datei und speichert den Wert in der nativen Schicht. Beim Start der Anwendung vergleicht der Agent den aktuellen Hash mit dem Referenzwert. Bei Abweichung (modifizierte APK) wird die Anwendung beendet. Zusätzlich können Integritätsprüfungen für Ressourcen und das Manifest konfiguriert werden.
// build.gradle (App-Ebene)
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"
}
}
}
}
Beide Tools wurden vom selben Unternehmen entwickelt, zielen jedoch auf unterschiedliche Szenarien ab. ProGuard ist ein Open-Source-Optimierer und minimaler Obfuskator, der standardmäßig im Android SDK enthalten ist. DexGuard ist ein kommerzielles Produkt, das im kostenlosen Version nicht verfügbare Schutzebenen hinzufügt.
| Merkmal | ProGuard | DexGuard |
|---|---|---|
| Lizenz | Open Source (GPL) | Kommerziell |
| Namensobfuskation | Einfache Ersetzung | Overload Induction |
| String-Verschlüsselung | Nein | AES-256 |
| RASP-Schutz | Nein | Ja |
| Frida-Erkennung | Nein | Ja |
| Debug-Schutz | Nein | Ja |
| Integritätskontrolle | Nein | SHA-256-Hashing |
| Unity-Unterstützung | Nein | Ja |
Die Wahl zwischen den Tools wird durch die Klasse der zu schützenden Informationen bestimmt. Für eine gewöhnliche mobile Anwendung ist ProGuard ausreichend. Für Bank-, Zahlungs- und Medizinanwendungen, bei denen die Offenlegung von Code finanzielle oder regulatorische Risiken birgt, ist DexGuard die empfohlene Lösung. Laut OWASP Mobile Top 10 (2024) gilt das Fehlen von Obfuskation in Anwendungen mit sensiblen Daten als kritisches Risiko.
Die DexGuard-Integration beginnt mit dem Hinzufügen des Guardsquare-Repositorys im Root-build.gradle. Das Plugin der Version 9.x ist mit AGP 7.4–8.5 und Gradle 7.6–8.7 kompatibel. Die Schutzkonfiguration wird in einer separaten Datei dexguard-project.txt definiert, in der bestimmte Techniken aktiviert werden.
// Root-build.gradle
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — Minimalkonfiguration
# String-Verschlüsselung
@stringEncryption
# Obfuskation mit Overload Induction
@overloadInduction
# APK-Integritätskontrolle
@integrityCheck
# Schutz vor Debugger und Emulator
@antiDebug
@antiEmulator
Die Direktiven @stringEncryption und @overloadInduction sind der Schlüssel zum Schutz von kommerziellem Code. Wenn alle Annotationen aktiviert sind, erhöht sich die Build-Zeit um 30–60 Sekunden, was durch das Schutzniveau gerechtfertigt ist. Die Konfiguration wird im VCS gespeichert und nur für Release-Builds angewendet.
Es ist wichtig, Ausnahmen für Klassen zu konfigurieren, die Reflection verwenden. DexGuard analysiert wie ProGuard Reflection nicht automatisch. In dexguard-project.txt müssen -keep-Regeln für Bibliotheksklassen hinzugefügt werden, die über Class.forName oder @JavascriptInterface geladen werden.
// dexguard-project.txt — Keep-Regeln
# Gson-Modellklassen behalten
-keep class com.example.model.** { *; }
# WebView-Schnittstellen behalten
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Firebase-Absturzberichte ausschließen
-keep class com.google.firebase.** { *; }
DexGuard umfasst über 20 Schutztechniken, unterteilt in statische (in der Build-Phase) und dynamische (zur Laufzeit). Die Wahl der spezifischen Techniken hängt vom Bedrohungsmodell der Anwendung ab.
Ressourcenverschlüsselung — Bilder, Assets und Konfigurationsdateien werden beim ersten Zugriff verschlüsselt und entschlüsselt. Kontrollfluss-Obfuskation fügt toten Code ein und ändert Anweisungssequenzen, wodurch Bytecode für Dekompilierer wie jadx unlesbar wird. Konstantenverbergung ersetzt numerische Literale durch arithmetische Ausdrücke, die zur Laufzeit berechnet werden.
Runtime Application Self-Protection — ein Agent innerhalb der Anwendung, der das Verhalten der Laufzeitumgebung überwacht. DexGuard RASP erkennt: Frida-Verbindung über /proc/self/maps, Vorhandensein von Xposed Framework, Ausführung unter einem Debugger (JDWP), Android-Emulator (QEMU). Bei Erkennung einer Bedrohung wird eine Richtlinie ausgelöst — Absturz oder Generierung falscher Daten. Laut der Studie OWASP Mobile Security (2025) stoppte der RASP-Schutz 94% der typischen automatisierten Angriffe.
DexGuard fügt in kritischen Codeabschnitten zufällige Verzögerungen hinzu, wodurch die Brute-Force-Zeit bei der dynamischen Analyse erhöht wird. Der Parameter wird in Millisekunden festgelegt und bei jedem Build randomisiert. Dies erschwert die Verwendung von Fuzzing-Tools und automatischen Scannern.
Bei der Integration von DexGuard in ein bestehendes Projekt muss die Abwärtskompatibilität mit Bibliotheken und gängigen SDKs berücksichtigt werden. Einige Bibliotheken sind aufgrund von Reflection-Aufrufen mit extremer Obfuskation nicht kompatibel.
DexGuard ist mit Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide und Gson mit korrekten Keep-Regeln kompatibel. Bibliotheken, die Annotationen und Codegenerierung verwenden (Dagger, Hilt, Room, DataBinding), erfordern die explizite Erhaltung generierter Klassen. Das Guardsquare-Team veröffentlicht offizielle Konfigurationsbeispiele für gängige SDKs.
Mindestanforderungen: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. DexGuard 9.1 unterstützt targetSdk 34 und compileSdk 34. Für Java 17 und AGP 8.2+ ist DexGuard Version 9.2 und höher erforderlich. Das Tool ist mit R8 im vollständigen Optimierungsmodus nicht kompatibel — bei Verwendung von DexGuard wird R8 automatisch deaktiviert.
Nach der Konfiguration von DexGuard ist ein Regressionstest aller von Reflection und dynamischem Klassenladen betroffenen Pfade erforderlich. Es wird empfohlen, vor der Veröffentlichung UI-Automatisierungstests auf einem Build mit aktiviertem Schutz durchzuführen. Guardsquare stellt das Dienstprogramm DexGuard Tracer zur Verfügung, das ClassNotFoundException-Fehler zur Laufzeit protokolliert, ohne die Anwendung zum Absturz zu bringen, und so das Debugging von Keep-Regeln vereinfacht.
Häufig gestellte Fragen
ProGuard ist ein kostenloser Obfuskator mit einfacher Namensersetzung und Bytecode-Optimierung. DexGuard fügt AES-256-String-Verschlüsselung, Overload Induction für Namen, RASP-Agent zur Laufzeit, APK-Integritätskontrolle und Erkennung von Frida, Xposed, Emulator und Debugger hinzu. ProGuard ist für gewöhnliche Anwendungen ausreichend, DexGuard für Bank- und Unternehmensanwendungen.
DexGuard wird unter einer kommerziellen Lizenz mit jährlicher Zahlung vertrieben. Die Kosten hängen von der Anzahl der Projekte und der Art des Abonnements ab. Ab 2025 beginnt eine Basislizenz für ein Projekt bei 5.000 USD pro Jahr. Für Startups ist ein Partnerschaftsprogramm mit bis zu 40% Rabatt verfügbar.
Ja, DexGuard ist vollständig kompatibel mit Kotlin und Jetpack Compose, einschließlich Coroutinen und dem Compose-Compiler. Für vom Kotlin-Compiler generierte Klassen sind zusätzliche Keep-Regeln erforderlich. Guardsquare empfiehlt die Verwendung der Vorlage kotlin-project.txt aus der offiziellen Dokumentation.
Die String-Verschlüsselung und das Hinzufügen des RASP-Agenten erhöhen die APK-Größe um 5–15%, abhängig vom Umfang des geschützten Codes. Namensobfuskation und Kontrollfluss-Obfuskation erhöhen die Größe nicht — sie ersetzen vorhandene Namen. Im Durchschnitt wird eine APK mit vollständigem DexGuard-Schutz 8–12% größer als das Original.
Ja, die Schutzkonfiguration wird nur auf den Release-Build-Typ angewendet. Für Debug-Builds deaktiviert DexGuard automatisch die Verschlüsselung und RASP-Prüfungen. Entwickler können DexGuard im Debug-Modus über den Parameter guard.force.enable=true in gradle.properties erzwingen, um den geschützten Build zu testen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch