DexGuard: Was ist das, Obfuskation und Schutz von Android-Anwendungen

Autor: IT Sectr Veröffentlicht: 2026-04-03 Lesezeit: 8 Min.

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 kommerzieller Android-Obfuskator, der Nachfolger von ProGuard mit erweitertem Schutz vor Reverse Engineering
  • Verschlüsselung von Strings und Klassen erfolgt in der Build-Phase, wodurch die Leseabschnitte der DEX-Datei für die statische Analyse unzugänglich werden
  • Integritätskontrolle prüft die APK-Signatur zur Laufzeit und stoppt die Ausführung bei Erkennung einer Modifikation
  • Erkennung von Debugger, Emulator und Frida verhindert die dynamische Analyse zur Laufzeit
  • RASP-Agent erkennt Speichermanipulationen und das Abfangen von Systemaufrufen auf einem laufenden Gerät

Was ist DexGuard?

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.

Wie funktioniert die Obfuskation in DexGuard?

Der Obfuskationsprozess in DexGuard besteht aus aufeinanderfolgenden Phasen der Bytecode-Transformation, die jeweils auf einen bestimmten Angriffsvektor abzielen.

Namensobfuskation mit Overload Induction

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%.

Konstantenverschlüsselung

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.

Code-Integritätskontrolle

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.

groovy
// 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"
            }
        }
    }
}

DexGuard vs ProGuard: Hauptunterschiede

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.

MerkmalProGuardDexGuard
LizenzOpen Source (GPL)Kommerziell
NamensobfuskationEinfache ErsetzungOverload Induction
String-VerschlüsselungNeinAES-256
RASP-SchutzNeinJa
Frida-ErkennungNeinJa
Debug-SchutzNeinJa
IntegritätskontrolleNeinSHA-256-Hashing
Unity-UnterstützungNeinJa

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.

Konfiguration von DexGuard in einem Gradle-Projekt

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.

groovy
// 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.

groovy
// 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-Schutztechniken

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.

Statischer Schutz

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.

Dynamischer Schutz (RASP)

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.

Schutz vor zeitbasierten Angriffen

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.

Integrationsrichtlinien und Kompatibilität

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.

Kompatibilität mit gängigen SDKs

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.

Umgebungsanforderungen

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.

Tests nach der Obfuskation

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

Wie unterscheidet sich DexGuard von ProGuard?

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.

Wie viel kostet eine DexGuard-Lizenz?

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.

Kann DexGuard mit Kotlin und Jetpack Compose verwendet werden?

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.

Erhöht DexGuard die APK-Größe?

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.

Kann DexGuard zum Debuggen deaktiviert werden?

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

  • DexGuard ist ein kommerzielles Schutz-Tool für Android, das die Möglichkeiten von ProGuard mit einem vollständigen Satz von Anti-Reversing-Techniken erweitert
  • Obfuskation mit Overload Induction macht dekompilierten Code durch die Generierung nicht auflösbarer Methodenüberladungen funktionsunfähig
  • Verschlüsselung von String-Konstanten und Ressourcen mit AES-256 blockiert die statische Analyse von DEX-Dateien über jadx und strings
  • RASP-Agent erkennt Frida, Xposed, JDWP-Debugger und Emulator zur Laufzeit und führt bei Bedrohungserkennung einen Absturz herbei
  • APK-Integritätskontrolle über SHA-256-Hash in der nativen Schicht verhindert die Ausführung einer modifizierten Version der Anwendung
  • Integration in ein Gradle-Projekt mit @stringEncryption-, @overloadInduction- und @antiDebug-Annotationen erfordert 10–15 Minuten Einrichtungszeit
  • DexGuard ist das empfohlene Tool für Bank-, Zahlungs- und medizinische Android-Anwendungen, bei denen eine Code-Kompromittierung finanzielle Risiken birgt

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.

Projekt besprechen

Lesen Sie auch