Manual De-obfuscation Techniques
Reading time: 7 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Manual De-obfuscation Techniques
Στον τομέα της ασφάλειας λογισμικού, η διαδικασία καθιστώντας τον κωδικό που έχει αποκρυφτεί κατανοητό, γνωστή ως de-obfuscation, είναι κρίσιμη. Αυτός ο οδηγός εξερευνά διάφορες στρατηγικές για την αποσυμπίεση, εστιάζοντας σε τεχνικές στατικής ανάλυσης και αναγνώριση προτύπων απόκρυψης. Επιπλέον, εισάγει μια άσκηση για πρακτική εφαρμογή και προτείνει περαιτέρω πόρους για όσους ενδιαφέρονται να εξερευνήσουν πιο προχωρημένα θέματα.
Strategies for Static De-obfuscation
Όταν ασχολείστε με obfuscated code, μπορούν να χρησιμοποιηθούν αρκετές στρατηγικές ανάλογα με τη φύση της απόκρυψης:
- DEX bytecode (Java): Μια αποτελεσματική προσέγγιση περιλαμβάνει την αναγνώριση των μεθόδων αποσυμπίεσης της εφαρμογής, και στη συνέχεια την αναπαραγωγή αυτών των μεθόδων σε ένα αρχείο Java. Αυτό το αρχείο εκτελείται για να αντιστρέψει την απόκρυψη στα στοχευμένα στοιχεία.
- Java και Native Code: Μια άλλη μέθοδος είναι να μεταφράσετε τον αλγόριθμο αποσυμπίεσης σε μια γλώσσα scripting όπως η Python. Αυτή η στρατηγική τονίζει ότι ο κύριος στόχος δεν είναι να κατανοηθεί πλήρως ο αλγόριθμος αλλά να εκτελείται αποτελεσματικά.
Identifying Obfuscation
Η αναγνώριση του αποκρυφθέντος κώδικα είναι το πρώτο βήμα στη διαδικασία αποσυμπίεσης. Κύριοι δείκτες περιλαμβάνουν:
- Η απουσία ή η ανακατωμένη μορφή των συμβολοσειρών σε Java και Android, που μπορεί να υποδηλώνει απόκρυψη συμβολοσειρών.
- Η παρουσία δυαδικών αρχείων στον κατάλογο assets ή κλήσεις προς
DexClassLoader
, υποδεικνύοντας αποσυμπίεση κώδικα και δυναμική φόρτωση. - Η χρήση native libraries μαζί με μη αναγνωρίσιμες JNI functions, υποδεικνύοντας πιθανή απόκρυψη των native methods.
Dynamic Analysis in De-obfuscation
Με την εκτέλεση του κώδικα σε ελεγχόμενο περιβάλλον, η δυναμική ανάλυση επιτρέπει την παρατήρηση του πώς συμπεριφέρεται ο αποκρυφθέν κώδικας σε πραγματικό χρόνο. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική στην αποκάλυψη των εσωτερικών λειτουργιών πολύπλοκων προτύπων απόκρυψης που έχουν σχεδιαστεί για να κρύβουν την αληθινή πρόθεση του κώδικα.
Applications of Dynamic Analysis
- Runtime Decryption: Πολλές τεχνικές απόκρυψης περιλαμβάνουν την κρυπτογράφηση συμβολοσειρών ή τμημάτων κώδικα που αποκρυπτογραφούνται μόνο κατά την εκτέλεση. Μέσω της δυναμικής ανάλυσης, αυτά τα κρυπτογραφημένα στοιχεία μπορούν να καταγραφούν τη στιγμή της αποκρυπτογράφησης, αποκαλύπτοντας την αληθινή τους μορφή.
- Identifying Obfuscation Techniques: Παρακολουθώντας τη συμπεριφορά της εφαρμογής, η δυναμική ανάλυση μπορεί να βοηθήσει στην αναγνώριση συγκεκριμένων τεχνικών απόκρυψης που χρησιμοποιούνται, όπως η εικονικοποίηση κώδικα, οι packers ή η δυναμική δημιουργία κώδικα.
- Uncovering Hidden Functionality: Ο αποκρυφθέν κώδικας μπορεί να περιέχει κρυφές λειτουργίες που δεν είναι προφανείς μόνο μέσω στατικής ανάλυσης. Η δυναμική ανάλυση επιτρέπει την παρατήρηση όλων των διαδρομών κώδικα, συμπεριλαμβανομένων εκείνων που εκτελούνται υπό προϋποθέσεις, για να αποκαλύψει τέτοιες κρυφές λειτουργίες.
Automated De-obfuscation with LLMs (Androidmeda)
Ενώ οι προηγούμενες ενότητες εστιάζουν σε πλήρως χειροκίνητες στρατηγικές, το 2025 εμφανίστηκε μια νέα κατηγορία εργαλείων που υποστηρίζονται από Large-Language-Model (LLM) που μπορεί να αυτοματοποιήσει το μεγαλύτερο μέρος της κουραστικής εργασίας μετονομασίας και ανάκτησης ροής ελέγχου.
Ένα αντιπροσωπευτικό έργο είναι το Androidmeda – ένα εργαλείο Python που παίρνει decompiled Java πηγές (π.χ. που παράγονται από jadx
) και επιστρέφει μια πολύ καθαρισμένη, σχολιασμένη και ασφαλώς ανιχνευμένη έκδοση του κώδικα.
Key capabilities
- Μετονομάζει άσχετους αναγνωριστές που παράγονται από ProGuard / DexGuard / DashO / Allatori / … σε σημασιολογικά ονόματα.
- Ανιχνεύει και αναδομεί control-flow flattening, αντικαθιστώντας αδιαφανείς μηχανές καταστάσεων switch-case με κανονικούς βρόχους / κατασκευές if-else.
- Αποκρυπτογραφεί κοινά patterns string encryption όταν είναι δυνατόν.
- Εισάγει inline comments που εξηγούν τον σκοπό πολύπλοκων μπλοκ.
- Εκτελεί μια ελαφριά στατική σάρωση ασφαλείας και γράφει τα ευρήματα σε
vuln_report.json
με επίπεδα σοβαρότητας (πληροφοριακό → κρίσιμο).
Installation
git clone https://github.com/In3tinct/Androidmeda
cd Androidmeda
pip3 install -r requirements.txt
Προετοιμασία των εισροών
- Αποσυμπιέστε το στοχευμένο APK με
jadx
(ή οποιονδήποτε άλλο αποσυμπιεστή) και κρατήστε μόνο τον φάκελο πηγής που περιέχει τα.java
αρχεία:
jadx -d input_dir/ target.apk
- (Προαιρετικά) Μειώστε το
input_dir/
ώστε να περιέχει μόνο τα πακέτα εφαρμογών που θέλετε να αναλύσετε – αυτό επιταχύνει σημαντικά την επεξεργασία και το κόστος LLM.
Παραδείγματα χρήσης
Remote provider (Gemini-1.5-flash):
export OPENAI_API_KEY=<your_key>
python3 androidmeda.py \
--llm_provider google \
--llm_model gemini-1.5-flash \
--source_dir input_dir/ \
--output_dir out/ \
--save_code true
Offline (τοπικό ollama
backend με llama3.2):
python3 androidmeda.py \
--llm_provider ollama \
--llm_model llama3.2 \
--source_dir input_dir/ \
--output_dir out/ \
--save_code true
Έξοδος
out/vuln_report.json
– JSON πίνακας μεfile
,line
,issue
,severity
.- Ένα καθρεφτισμένο δέντρο πακέτων με de-obfuscated
.java
αρχεία (μόνο αν--save_code true
).
Συμβουλές & αντιμετώπιση προβλημάτων
- Παράλειψη κλάσης ⇒ συνήθως προκαλείται από μια μη αναγνώσιμη μέθοδο; απομονώστε το πακέτο ή ενημερώστε το regex του αναλυτή.
- Αργός χρόνος εκτέλεσης / υψηλή χρήση token ⇒ δείξτε το
--source_dir
σε συγκεκριμένα πακέτα εφαρμογών αντί για ολόκληρη την αποσυμπίεση. - Πάντα ελέγξτε χειροκίνητα την αναφορά ευπάθειας – οι ψευδαισθήσεις LLM μπορούν να οδηγήσουν σε ψευδώς θετικά / αρνητικά αποτελέσματα.
Πρακτική αξία – Μελέτη περίπτωσης κακόβουλου λογισμικού Crocodilus
Η τροφοδοσία ενός βαριά obfuscated δείγματος από τον τραυμάτων Crocodilus του 2025 μέσω του Androidmeda μείωσε τον χρόνο ανάλυσης από ώρες σε λεπτά: το εργαλείο ανέκτησε τη σημασιολογία του γράφου κλήσεων, αποκάλυψε κλήσεις σε APIs προσβασιμότητας και σκληρά κωδικοποιημένα C2 URLs, και παρήγαγε μια συνοπτική αναφορά που μπορούσε να εισαχθεί στα ταμπλό των αναλυτών.
Αναφορές και Περαιτέρω Ανάγνωση
-
BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]
-
Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο σύνθετες εγγενείς βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές obfuscation σε εγγενή κώδικα.
-
REcon 2019: “The Path to the Payload: Android Edition” [video]
-
Αυτή η ομιλία συζητά μια σειρά τεχνικών obfuscation, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα botnet Android για να κρύψει τη συμπεριφορά του.
-
Deobfuscating Android Apps with Androidmeda (blog post) – mobile-hacker.com
-
Androidmeda source code – https://github.com/In3tinct/Androidmeda
-
BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]
-
Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο σύνθετες εγγενείς βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές obfuscation σε εγγενή κώδικα.
-
REcon 2019: “The Path to the Payload: Android Edition” [video]
-
Αυτή η ομιλία συζητά μια σειρά τεχνικών obfuscation, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα botnet Android για να κρύψει τη συμπεριφορά του.
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.