DexGuard: co to je, obfuskace a zabezpečení aplikací pro Android

Autor: IT Sectr Publikováno: 2026-04-03 Doba čtení: 8 min

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 — komerční Android obfuskátor, nástupce ProGuard s rozšířenou ochranou proti reverse engineeringu
  • Šifrování řetězců a tříd probíhá ve fázi sestavení, čímž jsou read-sekce DEX souboru nepřístupné pro statickou analýzu
  • Kontrola integrity ověřuje podpis APK za běhu a zastaví provádění při zjištění modifikace
  • Detekce ladicího nástroje, emulátoru a Frida brání dynamické analýze za běhu
  • Agent RASP odhaluje manipulaci s pamětí a zachytávání systémových volání na běžícím zařízení

Co je DexGuard?

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.

Jak funguje obfuskace v DexGuard

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.

Obfuskace názvů s přetížením

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

Šifrování konstant

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

Kontrola integrity kódu

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.

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

DexGuard vs ProGuard: klíčové rozdíly

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

VlastnostProGuardDexGuard
LicenceOpen-source (GPL)Komerční
Obfuskace názvůJednoduchá výměnaOverload induction
Šifrování řetězcůNeAES-256
Ochrana RASPNeAno
Detekce FridaNeAno
Ochrana proti laděníNeAno
Kontrola integrityNeSHA-256 hashování
Podpora UnityNeAno

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.

Nastavení DexGuard v Gradle projektu

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.

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

groovy
// 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.** { *; }

Techniky ochrany DexGuard

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.

Statická ochrana

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

Dynamická ochrana (RASP)

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

Ochrana proti časově závislým útokům

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

Pokyny pro integraci a kompatibilita

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.

Kompatibilita s oblíbenými SDK

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.

Požadavky na prostředí

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.

Testování po obfuskatci

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

Čím se liší DexGuard od ProGuard?

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

Kolik stojí licence DexGuard?

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

Lze DexGuard používat s Kotlin a Jetpack Compose?

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.

Zvyšuje DexGuard velikost APK?

Š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í.

Lze DexGuard vypnout pro ladění?

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í

  • DexGuard — komerční bezpečnostní nástroj pro Android, který rozšiřuje možnosti ProGuard o kompletní sadu anti-reversing technik
  • Obfuskace názvů s overload induction činí dekompilovaný kód nefunkčním generováním neřešitelných přetížení metod
  • Šifrování řetězcových konstant a zdrojů algoritmem AES-256 uzavírá statickou analýzu DEX souboru před jadx a strings
  • RASP agent detekuje Frida, Xposed, JDWP debugger a emulátor za běhu, provádí nouzové ukončení při detekci hrozby
  • Kontrola integrity APK prostřednictvím SHA-256 hash v nativní vrstvě brání spuštění modifikované verze aplikace
  • Integrace do Gradle projektu s anotacemi @stringEncryption, @overloadInduction a @antiDebug vyžaduje 10–15 minut konfigurace
  • DexGuard — doporučený nástroj pro bankovní, platební a lékařské Android aplikace, kde kompromitace kódu přináší finanční rizika

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

Prodiskutovat projekt

Přečtěte si také