Exploiting a debuggeable application

Εκμετάλλευση μιας εφαρμογής που μπορεί να αποσφαλματωθεί

Υποστήριξη HackTricks

Παράκαμψη ελέγχων root και αποσφαλμάτωσης

Αυτή η ενότητα της ανάρτησης είναι μια σύνοψη από την ανάρτηση https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Βήματα για να κάνετε μια εφαρμογή Android αποσφαλματωμένη και να παρακάμψετε ελέγχους

Κάνοντάς την Εφαρμογή Αποσφαλματωμένη

Περιεχόμενο βασισμένο στο https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. Αποσυμπιέστε το APK:

  • Χρησιμοποιήστε το εργαλείο APK-GUI για την αποσυμπίεση του APK.

  • Στο αρχείο android-manifest, εισάγετε android:debuggable=true για να ενεργοποιήσετε τη λειτουργία αποσφαλμάτωσης.

  • Επανασυμπιέστε, υπογράψτε και zipalign την τροποποιημένη εφαρμογή.

  1. Εγκαταστήστε την Τροποποιημένη Εφαρμογή:

  • Χρησιμοποιήστε την εντολή: adb install <application_name>.

  1. Ανακτήστε το Όνομα Πακέτου:

  • Εκτελέστε adb shell pm list packages –3 για να καταγράψετε τις εφαρμογές τρίτων και να βρείτε το όνομα πακέτου.

  1. Ρυθμίστε την Εφαρμογή να Περιμένει Σύνδεση Αποσφαλμάτωσης:

  • Εντολή: 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>.

  1. Ετοιμαστείτε για Αποσφαλμάτωση στο Android Studio:

  • Μεταβείτε στο Android Studio στο File -> Open Profile or APK.

  • Ανοίξτε το επανασυμπιεσμένο APK.

  1. Ορίστε Σημεία Διακοπής σε Κύρια Αρχεία Java:

  • Τοποθετήστε σημεία διακοπής στο MainActivity.java (συγκεκριμένα στη μέθοδο onCreate), b.java, και ContextWrapper.java.

Παράκαμψη Ελέγχων

Η εφαρμογή, σε ορισμένα σημεία, θα επαληθεύσει αν είναι αποσφαλματωμένη και θα ελέγξει επίσης για δυαδικά αρχεία που υποδεικνύουν μια ριζωμένη συσκευή. Ο αποσφαλματωτής μπορεί να χρησιμοποιηθεί για να τροποποιήσει τις πληροφορίες της εφαρμογής, να αφαιρέσει τη σημαία αποσφαλμάτωσης και να αλλάξει τα ονόματα των αναζητούμενων δυαδικών αρχείων για να παρακάμψει αυτούς τους ελέγχους.

Για τον έλεγχο αποσφαλμάτωσης:

  1. Τροποποιήστε τις Ρυθμίσεις Σημαίας:

  • Στην ενότητα μεταβλητών της κονσόλας αποσφαλμάτωσης, μεταβείτε στο: this mLoadedAPK -> mApplicationInfo -> flags = 814267974.

  • Σημείωση: Η δυαδική αναπαράσταση του flags = 814267974 είναι 11000011100111011110, υποδεικνύοντας ότι η "Flag_debuggable" είναι ενεργή.

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

Αυτά τα βήματα συλλογικά διασφαλίζουν ότι η εφαρμογή μπορεί να αποσφαλματωθεί και ότι ορισμένοι έλεγχοι ασφαλείας μπορούν να παρακαμφθούν χρησιμοποιώντας τον αποσφαλματωτή, διευκολύνοντας μια πιο εις βάθος ανάλυση ή τροποποίηση της συμπεριφοράς της εφαρμογής.

Το βήμα 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 στη συσκευή στο πλαίσιο της εφαρμογής.

Αναφορές

Υποστήριξη HackTricks

Last updated