Smali - Decompiling/[Modifying]/Compiling
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)
Μερικές φορές είναι ενδιαφέρον να τροποποιήσετε τον κώδικα της εφαρμογής για να αποκτήσετε πρόσβαση σε κρυφές πληροφορίες (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να τον ξανασυμπιέσετε.
Opcodes reference: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Χρησιμοποιώντας το Visual Studio Code και την επέκταση APKLab, μπορείτε να αποσυμπιέσετε αυτόματα, να τροποποιήσετε, να ξανασυμπιέσετε, να υπογράψετε και να εγκαταστήσετε την εφαρμογή χωρίς να εκτελέσετε καμία εντολή.
Ένα άλλο script που διευκολύνει πολύ αυτή την εργασία είναι https://github.com/ax/apk.sh
Χρησιμοποιώντας το APKTool μπορείτε να αποκτήσετε πρόσβαση στον κώδικα smali και τους πόρους:
Αν το apktool σας δώσει οποιοδήποτε σφάλμα, δοκιμάστε να εγκαταστήσετε την τελευταία έκδοση
Ορισμένα ενδιαφέροντα αρχεία που θα πρέπει να εξετάσετε είναι:
res/values/strings.xml (και όλα τα xml μέσα στο res/values/*)
AndroidManifest.xml
Οποιοδήποτε αρχείο με κατάληξη .sqlite ή .db
Αν το apktool
έχει προβλήματα στην αποκωδικοποίηση της εφαρμογής ρίξτε μια ματιά στο https://ibotpeaches.github.io/Apktool/documentation/#framework-files ή δοκιμάστε να χρησιμοποιήσετε το επιχείρημα -r
(Μην αποκωδικοποιείτε τους πόρους). Στη συνέχεια, αν το πρόβλημα ήταν σε έναν πόρο και όχι στον πηγαίο κώδικα, δεν θα έχετε το πρόβλημα (δεν θα αποκωδικοποιήσετε επίσης τους πόρους).
Μπορείτε να αλλάξετε εντολές, να αλλάξετε την τιμή ορισμένων μεταβλητών ή να προσθέσετε νέες εντολές. Αλλάζω τον κώδικα Smali χρησιμοποιώντας VS Code, στη συνέχεια εγκαθιστάτε την επέκταση smalise και ο επεξεργαστής θα σας πει αν κάποια εντολή είναι λανθασμένη. Ορισμένα παραδείγματα μπορούν να βρεθούν εδώ:
Ή μπορείτε να ελέγξετε παρακάτω μερικές εξηγήσεις για αλλαγές Smali.
Αφού τροποποιήσετε τον κώδικα μπορείτε να ανακατασκευάσετε τον κώδικα χρησιμοποιώντας:
Θα συγκεντρώσει το νέο APK μέσα στον φάκελο dist.
Αν το apktool ρίξει ένα σφάλμα, δοκιμάστε να εγκαταστήσετε την τελευταία έκδοση
Στη συνέχεια, πρέπει να δημιουργήσετε ένα κλειδί (θα σας ζητηθεί ένας κωδικός πρόσβασης και κάποιες πληροφορίες που μπορείτε να συμπληρώσετε τυχαία):
Τέλος, υπογράψτε το νέο APK:
zipalign είναι ένα εργαλείο ευθυγράμμισης αρχείων που παρέχει σημαντική βελτιστοποίηση στα αρχεία εφαρμογών Android (APK). More information here.
Αν προτιμάτε να χρησιμοποιήσετε apksigner αντί για jarsigner, πρέπει να υπογράψετε το apk μετά την εφαρμογή της βελτιστοποίησης με zipalign. ΑΛΛΑ ΠΡΟΣΟΧΗ ΟΤΙ ΠΡΕΠΕΙ ΝΑ ΥΠΟΓΡΑΨΕΤΕ ΤΗΝ ΕΦΑΡΜΟΓΗ ΜΙΑ ΦΟΡΑ ΜΕ jarsigner (πριν το zipalign) Ή ΜΕ aspsigner (μετά το zipalign).
Για τον παρακάτω κώδικα Hello World Java:
Ο κώδικας Smali θα είναι:
Το σύνολο εντολών Smali είναι διαθέσιμο εδώ.
Ορισμένες μεταβλητές ορίζονται στην αρχή της συνάρτησης χρησιμοποιώντας την εντολή const, μπορείτε να τροποποιήσετε τις τιμές τους ή να ορίσετε νέες:
Recommendations:
Αν πρόκειται να χρησιμοποιήσετε δηλωμένες μεταβλητές μέσα στη συνάρτηση (δηλωμένες v0,v1,v2...) τοποθετήστε αυτές τις γραμμές μεταξύ του .local <number> και των δηλώσεων των μεταβλητών (const v0, 0x1)
Αν θέλετε να τοποθετήσετε τον κώδικα καταγραφής στη μέση του κώδικα μιας συνάρτησης:
Προσθέστε 2 στον αριθμό των δηλωμένων μεταβλητών: Π.χ.: από .locals 10 σε .locals 12
Οι νέες μεταβλητές θα πρέπει να είναι οι επόμενοι αριθμοί των ήδη δηλωμένων μεταβλητών (σε αυτό το παράδειγμα θα πρέπει να είναι v10 και v11, θυμηθείτε ότι ξεκινά από v0).
Αλλάξτε τον κώδικα της συνάρτησης καταγραφής και χρησιμοποιήστε v10 και v11 αντί για v5 και v1.
Θυμηθείτε να προσθέσετε 3 στον αριθμό των .locals στην αρχή της συνάρτησης.
Αυτός ο κώδικας είναι έτοιμος να εισαχθεί στη μέση μιας συνάρτησης (αλλάξτε τον αριθμό των μεταβλητών όπως απαιτείται). Θα πάρει την τιμή του this.o, θα την μετατρέψει σε String και στη συνέχεια θα κάνει ένα toast με την τιμή του.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)