DexGuard — λύση για την προστασία εφαρμογών Android από αντίστροφη μηχανική, που παρέχεται από την Guardsquare. Το εργαλείο εκτελεί συσκότιση, κρυπτογράφηση και προληπτική παρακολούθηση του DEX-bytecode στο στάδιο της μεταγλώττισης. Σύμφωνα με Guardsquare, 2025, το προϊόν χρησιμοποιείται σε περισσότερα από 10.000 εμπορικά έργα, συμπεριλαμβανομένων τραπεζικών συστημάτων και συστημάτων πληρωμών. Το DexGuard επεκτείνει τις δυνατότητες του ProGuard, προσθέτοντας προστασία από απομεταγλώττιση και επιθέσεις χρόνου εκτέλεσης χωρίς αλλαγή του πηγαίου κώδικα της εφαρμογής.
Βασικά Σημεία
Το DexGuard είναι ένα εμπορικό εργαλείο για συσκότιση και προστασία εφαρμογών Android, που αναπτύχθηκε από την ίδια ομάδα που δημιούργησε το ProGuard (Eric Lafortune). Το προϊόν εμφανίστηκε το 2012 ως επέκταση για έργα όπου η τυπική συσκότιση ProGuard δεν είναι επαρκής. Το DexGuard λειτουργεί στο στάδιο μετά τη μεταγλώττιση, μετατρέποντας τον DEX-bytecode σε προστατευμένη μορφή πριν από τη συσκευασία σε APK.
Η αρχιτεκτονική του DexGuard βασίζεται σε ένα πολυεπίπεδο μοντέλο προστασίας. Το πρώτο επίπεδο είναι η συσκότιση ονομάτων κλάσεων, μεθόδων και πεδίων με χρήση overload induction. Το δεύτερο είναι η κρυπτογράφηση σταθερών συμβολοσειρών και η φόρτωσή τους μέσω stub μεθόδων κατά τον χρόνο εκτέλεσης. Το τρίτο είναι ο έλεγχος ακεραιότητας APK μέσω επαλήθευσης αθροίσματος ελέγχου υπογραφών. Σύμφωνα με την τεχνική έκθεση της Guardsquare (2025), η συνδυασμένη εφαρμογή αυτών των επιπέδων αυξάνει τον χρόνο ανάλυσης της εφαρμογής από λίγα λεπτά σε αρκετές εβδομάδες.
Το DexGuard υποστηρίζει όλους τους τύπους έργων Android: εφαρμογές, βιβλιοθήκες, SDK και έργα παιχνιδιών σε Unity. Το εργαλείο ενσωματώνεται στην τυπική γραμμή εργασίας Gradle μέσω του πρόσθετου com.guardsquare.dexguard και δεν απαιτεί χειροκίνητη παρέμβαση μετά τη ρύθμιση.
Η βασική διαφορά του DexGuard από τις εναλλακτικές ανοιχτού κώδικα είναι η ενεργή προστασία κατά τον χρόνο εκτέλεσης. Το εργαλείο δεν συγχέει απλώς τον κώδικα, αλλά προσθέτει έναν πράκτορα που εκτελεί ελέγχους κατά τη λειτουργία της εφαρμογής. Αυτό επιτρέπει την ανίχνευση επιθέσεων όπως η έγχυση Frida, Xposed ή η αποσφαλμάτωση μέσω JDWP, και την απόκριση σε αυτές: διακοπή έκτακτης ανάγκης, δημιουργία ψευδών δεδομένων ή ειδοποίηση διακομιστή.
Η διαδικασία συσκότισης στο DexGuard αποτελείται από διαδοχικά στάδια μετασχηματισμού bytecode, καθένα από τα οποία στοχεύει σε ένα συγκεκριμένο διάνυσμα επίθεσης.
Ο τυπικός συσκοτιστής αντικαθιστά τα ονόματα με μονούς χαρακτήρες a, b, c. Το DexGuard χρησιμοποιεί overload induction — αναθέτει το ίδιο σύντομο όνομα σε διαφορετικές μεθόδους με διαφορετικές υπογραφές. Ο απομεταγλωττιστής δεν μπορεί να επιλύσει την υπερφόρτωση και δημιουργεί εσφαλμένο κώδικα. Σύμφωνα με δοκιμές της Guardsquare, η υπερφόρτωση ονομάτων αυξάνει τον αριθμό σφαλμάτων απομεταγλώττισης κατά 78%.
Τα κυριολεκτικά συμβολοσειρών, URL, κλειδιά API και διακριτικά κρυπτογραφούνται με τον αλγόριθμο AES-256 στο στάδιο της μεταγλώττισης. Κατά τον χρόνο εκτέλεσης, μια stub μέθοδος αποκρυπτογραφεί τη συμβολοσειρά πριν από τη χρήση και μηδενίζει την περιοχή μνήμης μετά. Αυτό προστατεύει από τη στατική προβολή συμβολοσειρών στο DEX αρχείο. Παράδειγμα χωρίς κρυπτογράφηση: ο εισβολέας εκτελεί strings dexguard.apk και βλέπει όλα τα τελικά σημεία API σε καθαρό κείμενο.
Το DexGuard υπολογίζει ένα SHA-256 hash για κάθε DEX αρχείο και αποθηκεύει την τιμή στο εγγενές επίπεδο. Κατά την εκκίνηση της εφαρμογής, ο πράκτορας συγκρίνει το τρέχον hash με την αναφορά. Σε περίπτωση απόκλισης (τροποποιημένο APK), η εφαρμογή τερματίζεται. Προαιρετικά, μπορεί να ελεγχθεί η ακεραιότητα των πόρων και του manifest.
// 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"
}
}
}
}
Και τα δύο εργαλεία αναπτύχθηκαν από την ίδια εταιρεία, αλλά στοχεύουν σε διαφορετικά σενάρια. Το ProGuard είναι ένας βελτιστοποιητής ανοιχτού κώδικα και ελάχιστος συσκοτιστής που περιλαμβάνεται στο Android SDK από προεπιλογή. Το DexGuard είναι ένα εμπορικό προϊόν που προσθέτει επίπεδα προστασίας που δεν είναι διαθέσιμα στη δωρεάν έκδοση.
| Χαρακτηριστικό | ProGuard | DexGuard |
|---|---|---|
| Άδεια | Ανοιχτού κώδικα (GPL) | Εμπορική |
| Συσκότιση ονομάτων | Απλή αντικατάσταση | Overload induction |
| Κρυπτογράφηση συμβολοσειρών | Όχι | AES-256 |
| Προστασία RASP | Όχι | Ναι |
| Ανίχνευση Frida | Όχι | Ναι |
| Προστασία από αποσφαλμάτωση | Όχι | Ναι |
| Έλεγχος ακεραιότητας | Όχι | SHA-256 hashing |
| Υποστήριξη Unity | Όχι | Ναι |
Η επιλογή μεταξύ των εργαλείων καθορίζεται από την κατηγορία των προστατευόμενων πληροφοριών. Για μια συνηθισμένη εφαρμογή κινητού, το ProGuard είναι επαρκές. Για τραπεζικές, πληρωμών και ιατρικές εφαρμογές, όπου η αποκάλυψη κώδικα ενέχει οικονομικούς ή κανονιστικούς κινδύνους, το DexGuard είναι η συνιστώμενη λύση. Σύμφωνα με το OWASP Mobile Top 10 (2024), η έλλειψη συσκότισης σε εφαρμογές με εμπιστευτικά δεδομένα θεωρείται κρίσιμος κίνδυνος.
Η ενσωμάτωση του DexGuard ξεκινά με τη σύνδεση του αποθετηρίου Guardsquare στο root build.gradle. Το πρόσθετο έκδοσης 9.x είναι συμβατό με AGP 7.4–8.5 και Gradle 7.6–8.7. Η διαμόρφωση προστασίας ορίζεται σε ξεχωριστό dexguard-project.txt, όπου ενεργοποιούνται συγκεκριμένες τεχνικές.
// root build.gradle
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — ελάχιστη διαμόρφωση
# Κρυπτογράφηση συμβολοσειρών
@stringEncryption
# Συσκότιση με υπερφόρτωση ονομάτων
@overloadInduction
# Έλεγχος ακεραιότητας APK
@integrityCheck
# Προστασία από αποσφαλμάτωση και εξομοιωτή
@antiDebug
@antiEmulator
Οι οδηγίες @stringEncryption και @overloadInduction είναι βασικές για την προστασία εμπορικού κώδικα. Κατά την ενεργοποίηση όλων των σχολιασμών, ο χρόνος μεταγλώττισης αυξάνεται κατά 30–60 δευτερόλεπτα, κάτι που δικαιολογείται από το επίπεδο προστασίας. Η διαμόρφωση αποθηκεύεται στο VCS και εφαρμόζεται μόνο για την έκδοση release.
Είναι σημαντικό να ρυθμίσετε εξαιρέσεις για κλάσεις που χρησιμοποιούνται μέσω ανάκλασης. Το DexGuard, όπως και το ProGuard, δεν αναλύει αυτόματα την ανάκλαση. Στο dexguard-project.txt, πρέπει να προστεθούν κανόνες -keep για κλάσεις βιβλιοθηκών που φορτώνονται μέσω Class.forName ή @JavascriptInterface.
// dexguard-project.txt — κανόνες keep
# Διατήρηση κλάσεων μοντέλου Gson
-keep class com.example.model.** { *; }
# Διατήρηση διεπαφών WebView
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Εξαίρεση αναφορών σφαλμάτων Firebase
-keep class com.google.firebase.** { *; }
Το DexGuard περιλαμβάνει περισσότερες από 20 τεχνικές προστασίας, χωρισμένες σε στατικές (στο στάδιο μεταγλώττισης) και δυναμικές (κατά τον χρόνο εκτέλεσης). Η επιλογή συγκεκριμένων τεχνικών εξαρτάται από το μοντέλο απειλών της εφαρμογής.
Κρυπτογράφηση πόρων — εικόνες, στοιχεία και αρχεία διαμόρφωσης κρυπτογραφούνται και αποκρυπτογραφούνται κατά την πρώτη πρόσβαση. Η συσκότιση ροής ελέγχου (control flow obfuscation) εισάγει νεκρό κώδικα και αλλάζει τη σειρά εντολών, καθιστώντας τον bytecode μη αναγνώσιμο για απομεταγλωττιστές όπως το jadx. Η απόκρυψη σταθερών (constant hiding) αντικαθιστά αριθμητικά κυριολεκτικά με αριθμητικές εκφράσεις που υπολογίζονται κατά τον χρόνο εκτέλεσης.
Runtime Application Self-Protection — πράκτορας εντός της εφαρμογής που παρακολουθεί τη συμπεριφορά του περιβάλλοντος εκτέλεσης. Το DexGuard RASP ανιχνεύει: σύνδεση Frida μέσω /proc/self/maps, παρουσία Xposed Framework, εκτέλεση υπό εντοπιστή σφαλμάτων (JDWP), εξομοιωτή Android (QEMU). Κατά την ανίχνευση απειλής, ενεργοποιείται μια πολιτική — κατάρρευση ή δημιουργία εσφαλμένων δεδομένων. Σύμφωνα με έρευνα της OWASP Mobile Security (2025), η προστασία RASP σταμάτησε το 94% των τυπικών αυτοματοποιημένων επιθέσεων.
Το DexGuard προσθέτει τυχαίες καθυστερήσεις σε κρίσιμα τμήματα κώδικα, αυξάνοντας τον χρόνο περιήγησης κατά τη δυναμική ανάλυση. Η παράμετρος ορίζεται σε χιλιοστά του δευτερολέπτου και τυχαιοποιείται σε κάθε μεταγλώττιση. Αυτό δυσχεραίνει τη χρήση εργαλείων fuzzing και αυτόματων σαρωτών.
Κατά την εισαγωγή του DexGuard σε υπάρχον έργο, πρέπει να ληφθεί υπόψη η συμβατότητα προς τα πίσω με βιβλιοθήκες και δημοφιλή SDK. Ορισμένες βιβλιοθήκες δεν είναι συμβατές με ακραία συσκότιση λόγω κλήσεων ανάκλασης.
Το DexGuard είναι συμβατό με Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide και Gson με σωστούς κανόνες keep. Βιβλιοθήκες που χρησιμοποιούν σχολιασμούς και δημιουργία κώδικα (Dagger, Hilt, Room, DataBinding) απαιτούν ρητή διατήρηση των παραγόμενων κλάσεων. Η ομάδα της Guardsquare εκδίδει επίσημα δείγματα διαμόρφωσης για δημοφιλή SDK.
Ελάχιστες απαιτήσεις: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. Το DexGuard 9.1 υποστηρίζει targetSdk 34 και compileSdk 34. Για Java 17 και AGP 8.2+ απαιτείται DexGuard έκδοση 9.2 και νεότερη. Το εργαλείο δεν είναι συμβατό με R8 σε λειτουργία πλήρους βελτιστοποίησης — κατά τη χρήση DexGuard, το R8 απενεργοποιείται αυτόματα.
Μετά τη ρύθμιση του DexGuard, πρέπει να διεξαχθούν δοκιμές παλινδρόμησης σε όλα τα μονοπάτια που επηρεάζονται από ανάκλαση και δυναμική φόρτωση κλάσεων. Συνιστάται η εκτέλεση αυτοματοποιημένων δοκιμών UI σε μεταγλώττιση με ενεργοποιημένη προστασία πριν από την έκδοση. Η Guardsquare παρέχει το εργαλείο DexGuard Tracer, το οποίο καταγράφει σφάλματα ClassNotFoundException κατά τον χρόνο εκτέλεσης χωρίς κατάρρευση της εφαρμογής, διευκολύνοντας τον εντοπισμό σφαλμάτων κανόνων keep.
Συχνές Ερωτήσεις
Το ProGuard είναι ένας δωρεάν συσκοτιστής με απλή αντικατάσταση ονομάτων και βελτιστοποίηση bytecode. Το DexGuard προσθέτει κρυπτογράφηση συμβολοσειρών AES-256, overload induction για ονόματα, πράκτορα RASP κατά τον χρόνο εκτέλεσης, έλεγχο ακεραιότητας APK και ανίχνευση Frida, Xposed, εξομοιωτή και εντοπιστή σφαλμάτων. Το ProGuard είναι επαρκές για συνηθισμένες εφαρμογές, το DexGuard για τραπεζικές και επιχειρησιακές.
Το DexGuard διανέμεται με εμπορική άδεια με ετήσια πληρωμή. Το κόστος εξαρτάται από τον αριθμό έργων και τον τύπο συνδρομής. Το 2025, η βασική άδεια για ένα έργο ξεκινά από 5.000 USD ετησίως. Για νεοφυείς επιχειρήσεις, διατίθεται πρόγραμμα συνεργασίας με έκπτωση έως 40%.
Ναι, το DexGuard είναι πλήρως συμβατό με Kotlin και Jetpack Compose, συμπεριλαμβανομένων των coroutine και του μεταγλωττιστή Compose. Απαιτούνται πρόσθετοι κανόνες keep για κλάσεις που παράγονται από τον μεταγλωττιστή Kotlin. Η Guardsquare συνιστά τη χρήση του προτύπου διαμόρφωσης kotlin-project.txt από την επίσημη τεκμηρίωση.
Η κρυπτογράφηση συμβολοσειρών και η προσθήκη του πράκτορα RASP αυξάνει το APK κατά 5–15% ανάλογα με τον όγκο του προστατευόμενου κώδικα. Η συσκότιση ονομάτων και η συσκότιση ροής ελέγχου δεν αυξάνουν το μέγεθος — αντικαθιστούν υπάρχοντα ονόματα. Κατά μέσο όρο, ένα APK με πλήρη προστασία DexGuard γίνεται 8–12% μεγαλύτερο από το αρχικό.
Ναι, η διαμόρφωση προστασίας εφαρμόζεται μόνο στη μεταγλώττιση έκδοσης (release build type). Για τη μεταγλώττιση debug, το DexGuard απενεργοποιεί αυτόματα την κρυπτογράφηση και τους ελέγχους RASP. Ο προγραμματιστής μπορεί να ενεργοποιήσει αναγκαστικά το DexGuard σε λειτουργία debug μέσω της παραμέτρου guard.force.enable=true στο gradle.properties για δοκιμή της προστατευμένης μεταγλώττισης.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης