DexGuard: mi ez, obfuszkáció és Android alkalmazások védelme

Szerző: IT Sectr Megjelenés: 2026-04-03 Olvasási idő: 8 perc

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

  • DexGuard — kereskedelmi Android obfuszkátor, a ProGuard utódja kiterjesztett reverse engineering elleni védelemmel
  • Titkosítás a stringek és osztályok az építési fázisban történik, ami a DEX-fájl read-szekcióit elérhetetlenné teszi a statikus elemzés számára
  • Integritásellenőrzés ellenőrzi az APK aláírást futásidőben és leállítja a végrehajtást módosítás észlelése esetén
  • Detektálás a debugger, emulátor és Frida megakadályozza a dinamikus elemzést futásidőben
  • RASP-ügynök észleli a memóriamanipulációt és rendszerhívások eltérítését a futó eszközön

Mi az a DexGuard?

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.

Hogyan működik az obfuszkáció a DexGuard-ban

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.

Név-obfuszkáció túlterheléssel

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.

Állandók titkosítása

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.

Kódintegritás ellenőrzése

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

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: fő különbségek

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őProGuardDexGuard
LicencNyílt forráskódú (GPL)Kereskedelmi
Név-obfuszkációEgyszerű csereOverload induction
String titkosításNemAES-256
RASP-védelemNemIgen
Frida detektálásNemIgen
Debug védelemNemIgen
IntegritásellenőrzésNemSHA-256 hashelés
Unity támogatásNemIgen

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.

DexGuard konfigurálása Gradle-projektben

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.

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

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

DexGuard védelmi technikák

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.

Statikus védelem

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.

Dinamikus védelem (RASP)

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.

Védelem időalapú támadások ellen

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.

Integrációs útmutató és kompatibilitás

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.

Kompatibilitás népszerű SDK-kkal

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.

Környezeti követelmények

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.

Tesztelés obfuszkáció után

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

Miben különbözik a DexGuard a ProGuard-tól?

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.

Mennyibe kerül a DexGuard licenc?

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.

Használható a DexGuard Kotlin és Jetpack Compose keretrendszerekkel?

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.

Növeli-e a DexGuard az APK méretét?

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.

Kikapcsolható a DexGuard hibakereséshez?

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ó

  • DexGuard — kereskedelmi biztonsági eszköz Androidhoz, amely a ProGuard képességeit bővíti a teljes anti-reversing technikakészlettel
  • Név-obfuszkáció overload induction segítségével a dekompilált kódot működésképtelenné teszi feloldhatatlan módszer-túlterhelések generálásával
  • Stringállandók és erőforrások titkosítása AES-256 algoritmussal lezárja a DEX-fájl statikus elemzését jadx és strings segítségével
  • RASP-ügynök észleli a Frida, Xposed, JDWP debugger és emulátor használatát futásidőben, és vészhelyzeti leállítást hajt végre fenyegetés észleésekor
  • APK integritásellenőrzés SHA-256 hash segítségével a natív rétegben megakadályozza az alkalmazás módosított változatának futtatását
  • Integráció Gradle-projektbe @stringEncryption, @overloadInduction és @antiDebug annotációkkal 10–15 perc konfigurációt igényel
  • DexGuard — ajánlott eszköz banki, fizetési és egészségügyi Android-alkalmazásokhoz, ahol a kód kompromittálódása pénzügyi kockázatot jelent

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.

Projekt megbeszélése

Olvassa el is