DexGuard — megoldás Android-alkalmazások visszafejtés elleni védelmére, a Guardsquare által szállítva. Az eszköz obfuszkációt, titkosítást és proaktív monitorozást végez a DEX-bájtkódon az építési fázisban. A Guardsquare, 2025 adatai szerint a terméket több mint 10.000 kereskedelmi projektben használják, beleértve a banki és fizetési rendszereket. A DexGuard kiterjeszti a ProGuard képességeit, védelmet adva a dekompilálás és a futásidejű támadások ellen anélkül, hogy megváltoztatná az alkalmazás forráskódját.
Főbb pontok
A DexGuard egy kereskedelmi eszköz Android-alkalmazások obfuszkációjára és védelmére, amelyet ugyanaz a csapat fejlesztett ki, amely a ProGuard-ot létrehozta (Eric Lafortune). A termék 2012-ben jelent meg kiterjesztésként olyan projektek számára, ahol a standard ProGuard obfuszkáció nem elegendő. A DexGuard a fordítás utáni fázisban működik, átalakítva a DEX-bájtkódot védett formába, mielőtt az APK-ba csomagolná.
A DexGuard architektúrája többrétegű védelmi modellre épül. Az első réteg az osztály-, módszer- és mezőnevek obfuszkációja overload induction segítségével. A második a stringállandók titkosítása és betöltésük stub módszereken keresztül futásidőben. A harmadik az APK integritásellenőrzése az aláírások ellenőrzőösszegének ellenőrzésével. A Guardsquare (2025) műszaki jelentése szerint ezen rétegek kombinált alkalmazása az alkalmazás elemzési idejét néhány percről néhány hétre növeli.
A DexGuard támogatja az összes Android-projekt típust: alkalmazásokat, könyvtárakat, SDK-kat és Unity játékprojekteket. Az eszköz integrálódik a standard Gradle-folyamatba a com.guardsquare.dexguard pluginon keresztül, és konfigurálás után nem igényel kézi beavatkozást.
A DexGuard fő különbsége a nyílt forráskódú alternatívákkal szemben az aktív futásidejű védelem. Az eszköz nemcsak összekuszálja a kódot, hanem hozzáad egy ügynököt, amely ellenőrzéseket végez az alkalmazás futása közben. Ez lehetővé teszi olyan támadások észlelését, mint a Frida-injektálás, Xposed vagy JDWP-n keresztüli debugolás, és a rájuk való reagálást: vészhelyzeti leállítás, hamis adatok generálása vagy szerverértesítés.
Az obfuszkációs folyamat a DexGuard-ban egymást követő bájtkód-átalakítási szakaszokból áll, amelyek mindegyike egy adott támadási vektorra céloz.
A standard obfuszkátor a neveket egykarakteres a, b, c betűkre cseréli. A DexGuard overload induction-t használ — ugyanazt a rövid nevet rendeli különböző módszerekhez eltérő szignatúrákkal. A dekompilátor nem tudja feloldani a túlterhelést és hibás kódot generál. A Guardsquare tesztjei szerint a név-túlterhelés 78%-kal növeli a dekompilációs hibák számát.
A string literálok, URL-ek, API-kulcsok és tokenek AES-256 algoritmussal titkosítva vannak az építési fázisban. Futásidőben egy stub módszer visszafejti a stringet használat előtt és törli a memóriaterületet utána. Ez véd a DEX-fájl stringjeinek statikus megtekintése ellen. Példa titkosítás nélkül: a támadó futtatja a strings dexguard.apk parancsot és az összes API-végpontot látja nyers formában.
A DexGuard SHA-256 hash-t számít minden DEX-fájlhoz és eltárolja az értéket a natív rétegben. Az alkalmazás indításakor az ügynök összehasonlítja az aktuális hash-t a referenciával. Eltérés esetén (módosított APK) az alkalmazás leáll. Opcionálisan az erőforrások és a manifesztum integritása is ellenőrizhető.
// 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"
}
}
}
}
Mindkét eszközt ugyanaz a cég fejlesztette, de különböző forgatókönyvekre céloznak. A ProGuard nyílt forráskódú optimalizáló és minimális obfuszkátor, amely alapértelmezetten része az Android SDK-nak. A DexGuard egy kereskedelmi termék, amely olyan védelmi rétegeket ad hozzá, amelyek a szabad verzióban nem érhetőek el.
| Jellemző | ProGuard | DexGuard |
|---|---|---|
| Licenc | Nyílt forráskódú (GPL) | Kereskedelmi |
| Név-obfuszkáció | Egyszerű csere | Overload induction |
| String titkosítás | Nem | AES-256 |
| RASP-védelem | Nem | Igen |
| Frida detektálás | Nem | Igen |
| Debug védelem | Nem | Igen |
| Integritásellenőrzés | Nem | SHA-256 hashelés |
| Unity támogatás | Nem | Igen |
A választás az eszközök között a védendő információ osztálya alapján történik. Egy átlagos mobilalkalmazáshoz a ProGuard elegendő. Banki, fizetési és egészségügyi alkalmazásokhoz, ahol a kód felfedése pénzügyi vagy szabályozási kockázattal jár, a DexGuard az ajánlott megoldás. Az OWASP Mobile Top 10 (2024) szerint az obfuszkáció hiánya a bizalmas adatokat kezelő alkalmazásokban kritikus kockázatnak számít.
A DexGuard integrációja a Guardsquare tárhely csatlakoztatásával kezdődik a gyökér build.gradle-ben. A 9.x verziójú plugin kompatibilis az AGP 7.4–8.5 és a Gradle 7.6–8.7 verziókkal. A védelmi konfiguráció különálló dexguard-project.txt fájlban van megadva, ahol az egyes technikák bekapcsolhatók.
// root build.gradle
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — minimális konfiguráció
# String titkosítás
@stringEncryption
# Obfuszkáció név-túlterheléssel
@overloadInduction
# APK integritásellenőrzés
@integrityCheck
# Védelem hibakeresés és emulátor ellen
@antiDebug
@antiEmulator
A @stringEncryption és @overloadInduction irányelvek kulcsfontosságúak a kereskedelmi kód védelméhez. Az összes annotáció aktiválásakor az építési idő 30–60 másodperccel nő, ami a védelem szintjéhez képest indokolt. A konfiguráció a VCS-ben tárolódik és csak a kiadási építéshez alkalmazandó.
Fontos kivételeket beállítani azokhoz az osztályokhoz, amelyeket reflection útján használnak. A DexGuard, akárcsak a ProGuard, nem elemzi automatikusan a reflection-t. A dexguard-project.txt-ben -keep szabályokat kell hozzáadni azon könyvtárosztályokhoz, amelyek Class.forName vagy @JavascriptInterface útján töltődnek be.
// dexguard-project.txt — keep szabályok
# Gson modell osztályok megtartása
-keep class com.example.model.** { *; }
# WebView interfészek megtartása
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Firebase crash riportok kizárása
-keep class com.google.firebase.** { *; }
A DexGuard több mint 20 védelmi technikát tartalmaz, statikusra (építési fázisban) és dinamikusra (futásidőben) osztva. Az egyes technikák kiválasztása az alkalmazás fenyegetési modelljétől függ.
Erőforrások titkosítása — képek, eszközök és konfigurációs fájlok titkosítva vannak és az első hozzáféréskor fejtődnek vissza. A control flow obfuscation holt kódot szúr és módosítja az utasítások sorrendjét, átláthatatlanná téve a bájtkódot az olyan dekompilátorok számára, mint a jadx. Az állandók elrejtése (constant hiding) a numerikus literálokat futásidőben kiszámított aritmetikai kifejezésekre cseréli.
Runtime Application Self-Protection — ügynök az alkalmazáson belül, amely figyeli a futtatási környezet viselkedését. A DexGuard RASP észleli: Frida kapcsolódást a /proc/self/maps-en keresztül, Xposed Framework jelenlétét, futtatást debugger alatt (JDWP), Android emulátort (QEMU). Fenyegetés észlelésekor egy szabályzat aktiválódik — összeomlás vagy hamis adatok generálása. A OWASP Mobile Security (2025) kutatása szerint a RASP-védelem a tipikus automatizált támadások 94%-át állította meg.
A DexGuard véletlenszerű késleltetéseket ad a kritikus kódrészekhez, növelve a böngészési időt dinamikus elemzés során. A paraméter ezredmásodpercben van megadva és minden építésnél véletlenszerűsítve van. Ez megnehezíti a fuzzing eszközök és automatikus szkennerek használatát.
A DexGuard meglévő projektbe történő bevezetésekor figyelembe kell venni a visszafelé kompatibilitást a könyvtárakkal és népszerű SDK-kkal. Egyes könyvtárak nem kompatibilisek a szélsőséges obfuszkációval a reflection-hívások miatt.
A DexGuard kompatibilis a Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide és Gson eszközökkel megfelelő keep-szabályok mellett. Az annotációkat és kódgenerálást használó könyvtárak (Dagger, Hilt, Room, DataBinding) a generált osztályok explicit megőrzését igénylik. A Guardsquare csapat hivatalos konfigurációs mintákat ad ki a népszerű SDK-khoz.
Minimális követelmények: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. A DexGuard 9.1 támogatja a targetSdk 34 és compileSdk 34 verziókat. Java 17 és AGP 8.2+ esetén DexGuard 9.2 vagy újabb verzió szükséges. Az eszköz nem kompatibilis az R8-cal teljes optimalizációs módban — DexGuard használata esetén az R8 automatikusan kikapcsol.
A DexGuard konfigurálása után regressziós tesztelést kell végezni minden olyan úton, amelyet érint a reflection és a dinamikus osztálybetöltés. Ajánlott UI-automatizált teszteket futtatni a védelemmel ellátott építésen a kiadás előtt. A Guardsquare biztosítja a DexGuard Tracer eszközt, amely naplózza a ClassNotFoundException hibákat futásidőben az alkalmazás összeomlása nélkül, megkönnyítve a keep-szabályok hibakeresését.
Gyakran Ismételt Kérdések
A ProGuard egy ingyenes obfuszkátor egyszerű návcserével és bájtkód-optimalizálással. A DexGuard hozzáadja az AES-256 string titkosítást, overload induction-t a nevekhez, RASP-ügynököt futásidőben, APK integritásellenőrzést és Frida, Xposed, emulátor és debugger detektálást. A ProGuard elegendő a szokásos alkalmazásokhoz, a DexGuard a banki és vállalati alkalmazásokhoz.
A DexGuard kereskedelmi licenc alatt érhető el éves fizetéssel. A költség a projektek számától és az előfizetés típusától függ. 2025-ben az alap licenc egy projektre 5.000 USD-tól kezdődik évente. Az induló vállalkozások számára elérhető egy partnerségi program akár 40%-os kedvezménnyel.
Igen, a DexGuard teljesen kompatibilis a Kotlin és Jetpack Compose keretrendszerekkel, beleértve a coroutine-öket és a Compose-fordítót. Külön keep-szabályok szükségesek a Kotlin-fordító által generált osztályokhoz. A Guardsquare a hivatalos dokumentációban található kotlin-project.txt konfigurációs sablon használatát ajánlja.
A string titkosítás és a RASP-ügynök hozzáadása 5–15%-kal növeli az APK méretét a védendő kód mennyiségétől függően. A név-obfuszkáció és a control flow obfuscation nem növelik a méretet — a meglévő neveket cserélik. Átlagosan egy teljes DexGuard védelemmel ellátott APK 8–12%-kal nagyobb az eredetinél.
Igen, a védelmi konfiguráció csak a kiadási építésre (release build type) vonatkozik. Debug építésnél a DexGuard automatikusan kikapcsolja a titkosítást és a RASP-ellenőrzéseket. A fejlesztő kényszerítheti a DexGuard bekapcsolását debug módban a guard.force.enable=true paraméteren keresztül a gradle.properties-ben a védett építés teszteléséhez.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is