Manual DeObfuscation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Στον τομέα της ασφάλειας λογισμικού, η διαδικασία καθιστώντας τον κωδικό που έχει αποκρυφτεί κατανοητό, γνωστή ως de-obfuscation, είναι κρίσιμη. Αυτός ο οδηγός εξετάζει διάφορες στρατηγικές για την αποσυμπίεση, εστιάζοντας σε τεχνικές στατικής ανάλυσης και αναγνώριση προτύπων απόκρυψης. Επιπλέον, εισάγει μια άσκηση για πρακτική εφαρμογή και προτείνει περαιτέρω πόρους για όσους ενδιαφέρονται να εξερευνήσουν πιο προχωρημένα θέματα.
Όταν ασχολείστε με obfuscated code, μπορούν να χρησιμοποιηθούν αρκετές στρατηγικές ανάλογα με τη φύση της απόκρυψης:
DEX bytecode (Java): Μια αποτελεσματική προσέγγιση περιλαμβάνει την αναγνώριση των μεθόδων αποσυμπίεσης της εφαρμογής, στη συνέχεια την αναπαραγωγή αυτών των μεθόδων σε ένα αρχείο Java. Αυτό το αρχείο εκτελείται για να αντιστρέψει την απόκρυψη στα στοχευμένα στοιχεία.
Java and Native Code: Μια άλλη μέθοδος είναι να μεταφράσετε τον αλγόριθμο αποσυμπίεσης σε μια γλώσσα scripting όπως η Python. Αυτή η στρατηγική τονίζει ότι ο κύριος στόχος δεν είναι να κατανοηθεί πλήρως ο αλγόριθμος αλλά να εκτελείται αποτελεσματικά.
Η αναγνώριση του αποκρυφθέντος κώδικα είναι το πρώτο βήμα στη διαδικασία αποσυμπίεσης. Κύριοι δείκτες περιλαμβάνουν:
Η έλλειψη ή η ανακατασκευή συμβολοσειρών σε Java και Android, που μπορεί να υποδηλώνει απόκρυψη συμβολοσειρών.
Η παρουσία δυαδικών αρχείων στον κατάλογο assets ή κλήσεις προς DexClassLoader
, υποδεικνύοντας αποσυμπίεση κώδικα και δυναμική φόρτωση.
Η χρήση εγγενών βιβλιοθηκών μαζί με μη αναγνωρίσιμες JNI συναρτήσεις, υποδεικνύοντας πιθανή απόκρυψη εγγενών μεθόδων.
Με την εκτέλεση του κώδικα σε ένα ελεγχόμενο περιβάλλον, η δυναμική ανάλυση επιτρέπει την παρατήρηση του πώς συμπεριφέρεται ο αποκρυφθέν κώδικας σε πραγματικό χρόνο. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική στην αποκάλυψη των εσωτερικών λειτουργιών πολύπλοκων προτύπων απόκρυψης που έχουν σχεδιαστεί για να κρύβουν την αληθινή πρόθεση του κώδικα.
Runtime Decryption: Πολλές τεχνικές απόκρυψης περιλαμβάνουν την κρυπτογράφηση συμβολοσειρών ή τμημάτων κώδικα που αποκρυπτογραφούνται μόνο κατά την εκτέλεση. Μέσω της δυναμικής ανάλυσης, αυτά τα κρυπτογραφημένα στοιχεία μπορούν να καταγραφούν τη στιγμή της αποκρυπτογράφησης, αποκαλύπτοντας τη πραγματική τους μορφή.
Identifying Obfuscation Techniques: Παρακολουθώντας τη συμπεριφορά της εφαρμογής, η δυναμική ανάλυση μπορεί να βοηθήσει στην αναγνώριση συγκεκριμένων τεχνικών απόκρυψης που χρησιμοποιούνται, όπως η εικονικοποίηση κώδικα, οι packers ή η δυναμική δημιουργία κώδικα.
Uncovering Hidden Functionality: Ο αποκρυφθέν κώδικας μπορεί να περιέχει κρυφές λειτουργίες που δεν είναι προφανείς μόνο μέσω στατικής ανάλυσης. Η δυναμική ανάλυση επιτρέπει την παρατήρηση όλων των διαδρομών κώδικα, συμπεριλαμβανομένων εκείνων που εκτελούνται υπό προϋποθέσεις, για να αποκαλύψει τέτοιες κρυφές λειτουργίες.
BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]
Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο πολύπλοκες βιβλιοθήκες κατά της ανάλυσης που έχω δει να χρησιμοποιείται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές απόκρυψης σε εγγενή κώδικα.
REcon 2019: “The Path to the Payload: Android Edition” [video]
Αυτή η ομιλία συζητά μια σειρά τεχνικών απόκρυψης, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα botnet Android για να κρύψει τη συμπεριφορά του.