mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/manual-deobfus
This commit is contained in:
parent
ccc8adbdce
commit
81bf702eff
@ -1,40 +1,110 @@
|
||||
# Manual De-obfuscation Techniques
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Χειροκίνητες **Τεχνικές Απο-αποκρυπτογράφησης**
|
||||
## Manual **De-obfuscation Techniques**
|
||||
|
||||
Στον τομέα της **ασφάλειας λογισμικού**, η διαδικασία καθιστώντας τον κωδικό που έχει αποκρυφθεί κατανοητό, γνωστή ως **απο-αποκρυπτογράφηση**, είναι κρίσιμη. Αυτός ο οδηγός εξετάζει διάφορες στρατηγικές για την απο-αποκρυπτογράφηση, εστιάζοντας σε τεχνικές στατικής ανάλυσης και αναγνώριση προτύπων αποκρυπτογράφησης. Επιπλέον, εισάγει μια άσκηση για πρακτική εφαρμογή και προτείνει περαιτέρω πόρους για όσους ενδιαφέρονται να εξερευνήσουν πιο προχωρημένα θέματα.
|
||||
Στον τομέα της **ασφάλειας λογισμικού**, η διαδικασία καθιστώντας τον κωδικό που έχει αποκρυφτεί κατανοητό, γνωστή ως **de-obfuscation**, είναι κρίσιμη. Αυτός ο οδηγός εξερευνά διάφορες στρατηγικές για την αποσυμπίεση, εστιάζοντας σε τεχνικές στατικής ανάλυσης και αναγνώριση προτύπων απόκρυψης. Επιπλέον, εισάγει μια άσκηση για πρακτική εφαρμογή και προτείνει περαιτέρω πόρους για όσους ενδιαφέρονται να εξερευνήσουν πιο προχωρημένα θέματα.
|
||||
|
||||
### **Στρατηγικές για Στατική Απο-αποκρυπτογράφηση**
|
||||
### **Strategies for Static De-obfuscation**
|
||||
|
||||
Όταν ασχολείστε με **αποκρυφωμένο κώδικα**, μπορούν να χρησιμοποιηθούν αρκετές στρατηγικές ανάλογα με τη φύση της αποκρυπτογράφησης:
|
||||
Όταν ασχολείστε με **obfuscated code**, μπορούν να χρησιμοποιηθούν αρκετές στρατηγικές ανάλογα με τη φύση της απόκρυψης:
|
||||
|
||||
- **DEX bytecode (Java)**: Μια αποτελεσματική προσέγγιση περιλαμβάνει την αναγνώριση των μεθόδων απο-αποκρυπτογράφησης της εφαρμογής, και στη συνέχεια την αναπαραγωγή αυτών των μεθόδων σε ένα αρχείο Java. Αυτό το αρχείο εκτελείται για να αντιστρέψει την αποκρυπτογράφηση στα στοχευμένα στοιχεία.
|
||||
- **Java και Native Code**: Μια άλλη μέθοδος είναι να μεταφράσετε τον αλγόριθμο απο-αποκρυπτογράφησης σε μια γλώσσα scripting όπως η Python. Αυτή η στρατηγική τονίζει ότι ο κύριος στόχος δεν είναι να κατανοηθεί πλήρως ο αλγόριθμος αλλά να εκτελείται αποτελεσματικά.
|
||||
- **DEX bytecode (Java)**: Μια αποτελεσματική προσέγγιση περιλαμβάνει την αναγνώριση των μεθόδων αποσυμπίεσης της εφαρμογής, και στη συνέχεια την αναπαραγωγή αυτών των μεθόδων σε ένα αρχείο Java. Αυτό το αρχείο εκτελείται για να αντιστρέψει την απόκρυψη στα στοχευμένα στοιχεία.
|
||||
- **Java και Native Code**: Μια άλλη μέθοδος είναι να μεταφράσετε τον αλγόριθμο αποσυμπίεσης σε μια γλώσσα scripting όπως η Python. Αυτή η στρατηγική τονίζει ότι ο κύριος στόχος δεν είναι να κατανοηθεί πλήρως ο αλγόριθμος αλλά να εκτελείται αποτελεσματικά.
|
||||
|
||||
### **Αναγνώριση Αποκρυπτογράφησης**
|
||||
### **Identifying Obfuscation**
|
||||
|
||||
Η αναγνώριση του αποκρυφωμένου κώδικα είναι το πρώτο βήμα στη διαδικασία απο-αποκρυπτογράφησης. Κύριοι δείκτες περιλαμβάνουν:
|
||||
Η αναγνώριση του αποκρυφθέντος κώδικα είναι το πρώτο βήμα στη διαδικασία αποσυμπίεσης. Κύριοι δείκτες περιλαμβάνουν:
|
||||
|
||||
- Η **απουσία ή η ανακατωμένη μορφή των συμβολοσειρών** σε Java και Android, που μπορεί να υποδηλώνει αποκρυπτογράφηση συμβολοσειρών.
|
||||
- Η **απουσία ή η ανακατωμένη μορφή των συμβολοσειρών** σε Java και Android, που μπορεί να υποδηλώνει απόκρυψη συμβολοσειρών.
|
||||
- Η **παρουσία δυαδικών αρχείων** στον κατάλογο assets ή κλήσεις προς `DexClassLoader`, υποδεικνύοντας αποσυμπίεση κώδικα και δυναμική φόρτωση.
|
||||
- Η χρήση **native βιβλιοθηκών μαζί με μη αναγνωρίσιμες JNI συναρτήσεις**, υποδεικνύοντας πιθανή αποκρυπτογράφηση των native μεθόδων.
|
||||
- Η χρήση **native libraries μαζί με μη αναγνωρίσιμες JNI functions**, υποδεικνύοντας πιθανή απόκρυψη των native methods.
|
||||
|
||||
## **Δυναμική Ανάλυση στην Απο-αποκρυπτογράφηση**
|
||||
## **Dynamic Analysis in De-obfuscation**
|
||||
|
||||
Με την εκτέλεση του κώδικα σε ελεγχόμενο περιβάλλον, η δυναμική ανάλυση **επιτρέπει την παρατήρηση του πώς συμπεριφέρεται ο αποκρυφωμένος κώδικας σε πραγματικό χρόνο**. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική στην αποκάλυψη των εσωτερικών λειτουργιών πολύπλοκων προτύπων αποκρυπτογράφησης που έχουν σχεδιαστεί για να κρύβουν την αληθινή πρόθεση του κώδικα.
|
||||
Με την εκτέλεση του κώδικα σε ελεγχόμενο περιβάλλον, η δυναμική ανάλυση **επιτρέπει την παρατήρηση του πώς συμπεριφέρεται ο αποκρυφθέν κώδικας σε πραγματικό χρόνο**. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική στην αποκάλυψη των εσωτερικών λειτουργιών πολύπλοκων προτύπων απόκρυψης που έχουν σχεδιαστεί για να κρύβουν την αληθινή πρόθεση του κώδικα.
|
||||
|
||||
### **Εφαρμογές Δυναμικής Ανάλυσης**
|
||||
### **Applications of Dynamic Analysis**
|
||||
|
||||
- **Αποκρυπτογράφηση σε Χρόνο Εκτέλεσης**: Πολλές τεχνικές αποκρυπτογράφησης περιλαμβάνουν την κρυπτογράφηση συμβολοσειρών ή τμημάτων κώδικα που αποκρυπτογραφούνται μόνο κατά την εκτέλεση. Μέσω της δυναμικής ανάλυσης, αυτά τα κρυπτογραφημένα στοιχεία μπορούν να καταγραφούν τη στιγμή της αποκρυπτογράφησης, αποκαλύπτοντας την αληθινή τους μορφή.
|
||||
- **Αναγνώριση Τεχνικών Αποκρυπτογράφησης**: Παρακολουθώντας τη συμπεριφορά της εφαρμογής, η δυναμική ανάλυση μπορεί να βοηθήσει στην αναγνώριση συγκεκριμένων τεχνικών αποκρυπτογράφησης που χρησιμοποιούνται, όπως η εικονικοποίηση κώδικα, οι packers ή η δυναμική δημιουργία κώδικα.
|
||||
- **Ανακάλυψη Κρυφής Λειτουργικότητας**: Ο αποκρυφωμένος κώδικας μπορεί να περιέχει κρυφές λειτουργίες που δεν είναι προφανείς μόνο μέσω στατικής ανάλυσης. Η δυναμική ανάλυση επιτρέπει την παρατήρηση όλων των διαδρομών κώδικα, συμπεριλαμβανομένων εκείνων που εκτελούνται υπό προϋποθέσεις, για να αποκαλύψει τέτοιες κρυφές λειτουργίες.
|
||||
- **Runtime Decryption**: Πολλές τεχνικές απόκρυψης περιλαμβάνουν την κρυπτογράφηση συμβολοσειρών ή τμημάτων κώδικα που αποκρυπτογραφούνται μόνο κατά την εκτέλεση. Μέσω της δυναμικής ανάλυσης, αυτά τα κρυπτογραφημένα στοιχεία μπορούν να καταγραφούν τη στιγμή της αποκρυπτογράφησης, αποκαλύπτοντας την αληθινή τους μορφή.
|
||||
- **Identifying Obfuscation Techniques**: Παρακολουθώντας τη συμπεριφορά της εφαρμογής, η δυναμική ανάλυση μπορεί να βοηθήσει στην αναγνώριση συγκεκριμένων τεχνικών απόκρυψης που χρησιμοποιούνται, όπως η εικονικοποίηση κώδικα, οι packers ή η δυναμική δημιουργία κώδικα.
|
||||
- **Uncovering Hidden Functionality**: Ο αποκρυφθέν κώδικας μπορεί να περιέχει κρυφές λειτουργίες που δεν είναι προφανείς μόνο μέσω στατικής ανάλυσης. Η δυναμική ανάλυση επιτρέπει την παρατήρηση όλων των διαδρομών κώδικα, συμπεριλαμβανομένων εκείνων που εκτελούνται υπό προϋποθέσεις, για να αποκαλύψει τέτοιες κρυφές λειτουργίες.
|
||||
|
||||
### Automated De-obfuscation with LLMs (Androidmeda)
|
||||
|
||||
Ενώ οι προηγούμενες ενότητες εστιάζουν σε πλήρως χειροκίνητες στρατηγικές, το 2025 εμφανίστηκε μια νέα κατηγορία εργαλείων που υποστηρίζονται από *Large-Language-Model (LLM)* που μπορεί να αυτοματοποιήσει το μεγαλύτερο μέρος της κουραστικής εργασίας μετονομασίας και ανάκτησης ροής ελέγχου.
|
||||
Ένα αντιπροσωπευτικό έργο είναι το **[Androidmeda](https://github.com/In3tinct/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
|
||||
```bash
|
||||
git clone https://github.com/In3tinct/Androidmeda
|
||||
cd Androidmeda
|
||||
pip3 install -r requirements.txt
|
||||
```
|
||||
#### Προετοιμασία των εισροών
|
||||
1. Αποσυμπιέστε το στοχευμένο APK με `jadx` (ή οποιονδήποτε άλλο αποσυμπιεστή) και κρατήστε μόνο τον *φάκελο* πηγής που περιέχει τα `.java` αρχεία:
|
||||
```bash
|
||||
jadx -d input_dir/ target.apk
|
||||
```
|
||||
2. (Προαιρετικά) Μειώστε το `input_dir/` ώστε να περιέχει μόνο τα πακέτα εφαρμογών που θέλετε να αναλύσετε – αυτό επιταχύνει σημαντικά την επεξεργασία και το κόστος LLM.
|
||||
|
||||
#### Παραδείγματα χρήσης
|
||||
|
||||
Remote provider (Gemini-1.5-flash):
|
||||
```bash
|
||||
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):
|
||||
```bash
|
||||
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, και παρήγαγε μια συνοπτική αναφορά που μπορούσε να εισαχθεί στα ταμπλό των αναλυτών.
|
||||
|
||||
---
|
||||
|
||||
## Αναφορές και Περαιτέρω Ανάγνωση
|
||||
|
||||
- [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
||||
- BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
||||
- Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο σύνθετες εγγενείς βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές obfuscation σε εγγενή κώδικα.
|
||||
- REcon 2019: “The Path to the Payload: Android Edition” [[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
||||
- Αυτή η ομιλία συζητά μια σειρά τεχνικών obfuscation, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα botnet Android για να κρύψει τη συμπεριφορά του.
|
||||
- Deobfuscating Android Apps with Androidmeda (blog post) – [mobile-hacker.com](https://www.mobile-hacker.com/2025/07/22/deobfuscating-android-apps-with-androidmeda-a-smarter-way-to-read-obfuscated-code/)
|
||||
- Androidmeda source code – [https://github.com/In3tinct/Androidmeda](https://github.com/In3tinct/Androidmeda)
|
||||
|
||||
- [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
||||
- BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
||||
- Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο πολύπλοκες βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές αποκρυπτογράφησης σε native κώδικα.
|
||||
- Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο σύνθετες εγγενείς βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές obfuscation σε εγγενή κώδικα.
|
||||
- REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
||||
- Αυτή η ομιλία συζητά μια σειρά τεχνικών αποκρυπτογράφησης, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα Android botnet για να κρύψει τη συμπεριφορά του.
|
||||
- Αυτή η ομιλία συζητά μια σειρά τεχνικών obfuscation, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα botnet Android για να κρύψει τη συμπεριφορά του.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user