Exploiting a debuggeable application
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αυτή η ενότητα της ανάρτησης είναι μια σύνοψη από την ανάρτηση https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Περιεχόμενο βασισμένο στο https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Αποσυμπιέστε το APK:
Χρησιμοποιήστε το εργαλείο APK-GUI για την αποσυμπίεση του APK.
Στο αρχείο android-manifest, εισάγετε android:debuggable=true
για να ενεργοποιήσετε τη λειτουργία αποσφαλμάτωσης.
Επανασυμπιέστε, υπογράψτε και zipalign την τροποποιημένη εφαρμογή.
Εγκαταστήστε την τροποποιημένη εφαρμογή:
Χρησιμοποιήστε την εντολή: adb install <application_name>
.
Ανακτήστε το όνομα πακέτου:
Εκτελέστε adb shell pm list packages –3
για να καταγράψετε τις εφαρμογές τρίτων και να βρείτε το όνομα πακέτου.
Ρυθμίστε την εφαρμογή να περιμένει σύνδεση αποσφαλμάτωσης:
Εντολή: adb shell am setup-debug-app –w <package_name>
.
Σημείωση: Αυτή η εντολή πρέπει να εκτελείται κάθε φορά πριν ξεκινήσει η εφαρμογή για να διασφαλιστεί ότι περιμένει για τον αποσφαλματωτή.
Για μόνιμη ρύθμιση, χρησιμοποιήστε adb shell am setup-debug-app –w -–persistent <package_name>
.
Για να αφαιρέσετε όλες τις σημαίες, χρησιμοποιήστε adb shell am clear-debug-app <package_name>
.
Ετοιμαστείτε για αποσφαλμάτωση στο Android Studio:
Μεταβείτε στο Android Studio στο File -> Open Profile or APK.
Ανοίξτε το επανασυμπιεσμένο APK.
Ορίστε σημεία διακοπής σε βασικά αρχεία Java:
Τοποθετήστε σημεία διακοπής στο MainActivity.java
(συγκεκριμένα στη μέθοδο onCreate
), b.java
, και ContextWrapper.java
.
Η εφαρμογή, σε ορισμένα σημεία, θα επαληθεύσει αν είναι αποσφαλματωμένη και θα ελέγξει επίσης για δυαδικά αρχεία που υποδεικνύουν μια ριζωμένη συσκευή. Ο αποσφαλματωτής μπορεί να χρησιμοποιηθεί για να τροποποιήσει τις πληροφορίες της εφαρμογής, να αφαιρέσει τη σημαία αποσφαλμάτωσης και να αλλάξει τα ονόματα των αναζητούμενων δυαδικών αρχείων για να παρακάμψει αυτούς τους ελέγχους.
Για τον έλεγχο αποσφαλμάτωσης:
Τροποποιήστε τις ρυθμίσεις σημαίας:
Στην ενότητα μεταβλητών της κονσόλας αποσφαλμάτωσης, μεταβείτε στο: this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.
Σημείωση: Η δυαδική αναπαράσταση του flags = 814267974
είναι 11000011100111011110
, υποδεικνύοντας ότι η "Flag_debuggable" είναι ενεργή.
Αυτά τα βήματα συλλογικά διασφαλίζουν ότι η εφαρμογή μπορεί να αποσφαλματωθεί και ότι ορισμένοι έλεγχοι ασφαλείας μπορούν να παρακαμφθούν χρησιμοποιώντας τον αποσφαλματωτή, διευκολύνοντας μια πιο εις βάθος ανάλυση ή τροποποίηση της συμπεριφοράς της εφαρμογής.
Το βήμα 2 περιλαμβάνει την αλλαγή μιας τιμής σημαίας σε 814267972, η οποία αναπαρίσταται δυαδικά ως 110000101101000000100010100.
Δόθηκε μια επίδειξη χρησιμοποιώντας μια ευάλωτη εφαρμογή που περιέχει ένα κουμπί και ένα textview. Αρχικά, η εφαρμογή εμφανίζει "Crack Me". Ο στόχος είναι να αλλάξει το μήνυμα από "Try Again" σε "Hacked" κατά την εκτέλεση, χωρίς να τροποποιηθεί ο πηγαίος κώδικας.
Η εφαρμογή αποσυμπιέστηκε χρησιμοποιώντας το apktool
για να αποκτήσετε πρόσβαση στο αρχείο AndroidManifest.xml
.
Η παρουσία του android_debuggable="true"
στο AndroidManifest.xml υποδεικνύει ότι η εφαρμογή είναι αποσφαλματωμένη και επιρρεπής σε εκμετάλλευση.
Αξιοσημείωτο είναι ότι το apktool
χρησιμοποιείται αποκλειστικά για να ελέγξει την κατάσταση αποσφαλμάτωσης χωρίς να τροποποιήσει κανέναν κώδικα.
Η διαδικασία περιλάμβανε την εκκίνηση ενός εξομοιωτή, την εγκατάσταση της ευάλωτης εφαρμογής και τη χρήση του adb jdwp
για να εντοπιστούν οι θύρες Dalvik VM που ακούνε.
Το JDWP (Java Debug Wire Protocol) επιτρέπει την αποσφαλμάτωση μιας εφαρμογής που εκτελείται σε μια VM εκθέτοντας μια μοναδική θύρα.
Η προώθηση θυρών ήταν απαραίτητη για την απομακρυσμένη αποσφαλμάτωση, ακολουθούμενη από την προσάρτηση του JDB στην στοχοθετημένη εφαρμογή.
Η εκμετάλλευση πραγματοποιήθηκε με την τοποθέτηση σημείων διακοπής και τον έλεγχο της ροής της εφαρμογής.
Εντολές όπως classes
και methods <class_name>
χρησιμοποιήθηκαν για να αποκαλύψουν τη δομή της εφαρμογής.
Ένα σημείο διακοπής τοποθετήθηκε στη μέθοδο onClick
, και η εκτέλεσή της ελέγχθηκε.
Οι εντολές locals
, next
, και set
χρησιμοποιήθηκαν για να εξετάσουν και να τροποποιήσουν τις τοπικές μεταβλητές, ιδιαίτερα αλλάζοντας το μήνυμα "Try Again" σε "Hacked".
Ο τροποποιημένος κώδικας εκτελέστηκε χρησιμοποιώντας την εντολή run
, αλλάζοντας με επιτυχία την έξοδο της εφαρμογής σε πραγματικό χρόνο.
Αυτό το παράδειγμα έδειξε πώς μπορεί να χειριστεί η συμπεριφορά μιας αποσφαλματωμένης εφαρμογής, υπογραμμίζοντας τη δυνατότητα πιο σύνθετων εκμεταλλεύσεων όπως η απόκτηση πρόσβασης σε shell στη συσκευή στο πλαίσιο της εφαρμογής.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)