DexGuard — řešení pro ochranu aplikací pro Android proti zpětnému vývoji, dodávané společností Guardsquare. Nástroj provádí obfuskatci, šifrování a proaktivní monitorování DEX-bajtkódu ve fázi sestavení. Podle Guardsquare, 2025, je produkt používán ve více než 10 000 komerčních projektech, včetně bankovních a platebních systémů. DexGuard rozšiřuje možnosti ProGuard přidáním ochrany proti dekompilaci a runtime útokům bez změny zdrojového kódu aplikace.
Hlavní body
DexGuard je komerční nástroj pro obfuskatci a ochranu Android aplikací, vyvinutý stejným týmem, který vytvořil ProGuard (Eric Lafortune). Produkt se objevil v roce 2012 jako rozšíření pro projekty, kde standardní obfuskace ProGuard nestačí. DexGuard pracuje ve fázi po kompilaci, převádí DEX-bajtkód do chráněné podoby před zabalením do APK.
Architektura DexGuard je postavena na vícevrstvém modelu ochrany. První vrstva je obfuskace názvů tříd, metod a polí pomocí overload induction. Druhou je šifrování řetězcových konstant a jejich načítání pomocí stub metod za běhu. Třetí je kontrola integrity APK prostřednictvím ověření kontrolního součtu podpisů. Podle technické zprávy Guardsquare (2025) kombinované použití těchto vrstev zvyšuje dobu analýzy aplikace z několika minut na několik týdnů.
DexGuard podporuje všechny typy Android projektů: aplikace, knihovny, SDK a herní projekty na Unity. Nástroj se integruje do standardního Gradle pipeline přes plugin com.guardsquare.dexguard a po konfiguraci nevyžaduje ruční zásah.
Klíčovým rozdílem DexGuard od open-source alternativ je aktivní ochrana za běhu. Nástroj kód nejen zatemňuje, ale přidává agenta, který provádí kontroly během chodu aplikace. To umožňuje detekovat útoky jako vložení Frida, Xposed nebo ladění přes JDWP a reagovat na ně: nouzové ukončení, generování falešných dat nebo upozornění serveru.
Proces obfuskace v DexGuard se skládá z následných fází transformace bajtkódu, z nichž každá je zaměřena na konkrétní vektor útoku.
Standardní obfuskátor nahrazuje názvy jednopísmenkovými a, b, c. DexGuard používá overload induction — přiřazuje stejný krátký název různým metodám s různými signaturami. Dekompilátor nedokáže přetížení vyřešit a generuje chybný kód. Podle testů Guardsquare zvyšuje přetížení názvů počet chyb dekompilace o 78%.
Řetězcové literály, URL, API klíče a tokeny jsou šifrovány algoritmem AES-256 ve fázi sestavení. Za běhu stub metoda dešifruje řetězec před použitím a po použití vymaže oblast paměti. To chraňuje před statickým prohlížením řetězců v DEX souboru. Příklad bez šifrování: útočník spustí strings dexguard.apk a vidí všechny API endpointy v čistém textu.
DexGuard vypočítá SHA-256 hash pro každý DEX soubor a uloží hodnotu v nativní vrstvě. Při spuštění aplikace agent porovná aktuální hash s referencí. Při odchylce (změněné APK) je aplikace ukončena. Volitelně lze zkontrolovat integritu zdrojů a manifestu.
// 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"
}
}
}
}
Oba nástroje byly vyvinuty stejnou společností, ale cílí na různé scénáře. ProGuard je open-source optimalizátor a minimální obfuskátor, který je ve výchozím nastavení součástí Android SDK. DexGuard je komerční produkt, který přidává úrovně ochrany, které nejsou ve volné verzi dostupné.
| Vlastnost | ProGuard | DexGuard |
|---|---|---|
| Licence | Open-source (GPL) | Komerční |
| Obfuskace názvů | Jednoduchá výměna | Overload induction |
| Šifrování řetězců | Ne | AES-256 |
| Ochrana RASP | Ne | Ano |
| Detekce Frida | Ne | Ano |
| Ochrana proti ladění | Ne | Ano |
| Kontrola integrity | Ne | SHA-256 hashování |
| Podpora Unity | Ne | Ano |
Výběr mezi nástroji je určen třídou chráněných informací. Pro běžnou mobilní aplikaci je ProGuard dostačující. Pro bankovní, platební a lékařské aplikace, kde odhalení kódu přináší finanční nebo regulační rizika, je DexGuard doporučeným řešením. Podle OWASP Mobile Top 10 (2024) je nedostatek obfuskace v aplikacích s důvěrnými daty považován za kritické riziko.
Integrace DexGuard začíná připojením repozitáře Guardsquare v kořenovém build.gradle. Plugin verze 9.x je kompatibilní s AGP 7.4–8.5 a Gradle 7.6–8.7. Konfigurace ochrany je definována v samostatném dexguard-project.txt, kde se aktivují konkrétní techniky.
// root build.gradle
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — minimální konfigurace
# Šifrování řetězců
@stringEncryption
# Obfuskace s přetížením názvů
@overloadInduction
# Kontrola integrity APK
@integrityCheck
# Ochrana proti ladění a emulátoru
@antiDebug
@antiEmulator
Směrnice @stringEncryption a @overloadInduction jsou klíčové pro ochranu komerčního kódu. Při aktivaci všech anotací se doba sestavení prodlužuje o 30–60 sekund, což je s ohledem na úroveň ochrany ospravedlnitelné. Konfigurace je uložena ve VCS a aplikuje se pouze na release sestavení.
Je důležité nastavit výjimky pro třídy, které jsou používány prostřednictvím reflexe. DexGuard, stejně jako ProGuard, neanalyzuje reflexi automaticky. V dexguard-project.txt je třeba přidat pravidla -keep pro třídy knihoven načítané přes Class.forName nebo @JavascriptInterface.
// dexguard-project.txt — keep pravidla
# Zachovat Gson model třídy
-keep class com.example.model.** { *; }
# Zachovat WebView rozhraní
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Vyloučit Firebase crash reporty
-keep class com.google.firebase.** { *; }
DexGuard zahrnuje více než 20 technik ochrany, rozdělených na statické (ve fázi sestavení) a dynamické (za běhu). Výběr konkrétních technik závisí na modelu hrozeb aplikace.
Šifrování zdrojů — obrázky, assety a konfigurační soubory jsou šifrovány a dešifrovány při prvním přístupu. Control flow obfuscation vkládá mrtvý kód a mění pořadí instrukcí, čímž činí bajtkód nečitelným pro dekompilátory jako jadx. Skrývání konstant (constant hiding) nahrazuje číselné literály aritmetickými výrazy počítanými za běhu.
Runtime Application Self-Protection — agent uvnitř aplikace, který monitoruje chování běhového prostředí. DexGuard RASP detekuje: připojení Frida přes /proc/self/maps, přítomnost Xposed Framework, běh pod ladicím nástrojem (JDWP), Android emulátor (QEMU). Při detekci hrozby se aktivuje politika — pád nebo generování nesprávných dat. Podle výzkumu OWASP Mobile Security (2025) zastavila ochrana RASP 94% typických automatizovaných útoků.
DexGuard přidává náhodné prodlevy v kritických částech kódu, čímž zvyšuje dobu prohledávání při dynamické analýze. Parametr se nastavuje v milisekundách a při každém sestavení se randomizuje. To ztěžuje použití fuzzing nástrojů a automatických skenerů.
Při zavádění DexGuard do stávajícího projektu je třeba zohlednit zpětnou kompatibilitu s knihovnami a oblíbenými SDK. Některé knihovny nejsou kompatibilní s extrémní obfuskatcí kvůli reflexním voláním.
DexGuard je kompatibilní s Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide a Gson při správných keep pravidlech. Knihovny používající anotace a generování kódu (Dagger, Hilt, Room, DataBinding) vyžadují explicitní zachování generovaných tříd. Tým Guardsquare vydává oficiální konfigurační vzorky pro oblíbené SDK.
Minimální požadavky: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. DexGuard 9.1 podporuje targetSdk 34 a compileSdk 34. Pro Java 17 a AGP 8.2+ je vyžadována verze DexGuard 9.2 a vyšší. Nástroj není kompatibilní s R8 v režimu plné optimalizace — při použití DexGuard je R8 automaticky deaktivován.
Po konfiguraci DexGuard je třeba provést regresní testování všech cest ovlivněných reflexí a dynamickým načítáním tříd. Doporučuje se spouštět UI automatizované testy na sestavení s povolenou ochranou před vydáním. Guardsquare poskytuje nástroj DexGuard Tracer, který loguje chyby ClassNotFoundException za běhu bez pádu aplikace, čímž usnadňuje ladění keep pravidel.
Často kladené dotazy
ProGuard je bezplatný obfuskátor s jednoduchou výměnou názvů a optimalizací bajtkódu. DexGuard přidává šifrování řetězců AES-256, overload induction pro názvy, RASP agenta za běhu, kontrolu integrity APK a detekci Frida, Xposed, emulátoru a ladicího nástroje. ProGuard stačí pro běžné aplikace, DexGuard pro bankovní a podnikové.
DexGuard je distribuován pod komerční licencí s roční platbou. Cena závisí na počtu projektů a typu předplatného. V roce 2025 základní licence na jeden projekt začíná od 5 000 USD ročně. Pro startupy je k dispozici partnerský program se slevou až 40%.
Ano, DexGuard je plně kompatibilní s Kotlin a Jetpack Compose, včetně coroutine a Compose kompilátoru. Jsou vyžadována další keep pravidla pro třídy generované Kotlin kompilátorem. Guardsquare doporučuje použít konfigurační šablonu kotlin-project.txt z oficiální dokumentace.
Šifrování řetězců a přidání RASP agenta zvyšuje APK o 5–15% v závislosti na množství chráněného kódu. Obfuskace názvů a control flow obfuscation nezvyšují velikost — nahrazují existující názvy. V průměru je APK s plnou ochranou DexGuard o 8–12% větší než původní.
Ano, konfigurace ochrany se aplikuje pouze na release sestavení (release build type). Pro debug sestavení DexGuard automaticky deaktivuje šifrování a RASP kontroly. Vývojář může vynutit zapnutí DexGuard v debug režimu pomocí parametru guard.force.enable=true v gradle.properties pro testování chráněného sestavení.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také