Objection Tutorial

Reading time: 8 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Εισαγωγή

objection - Runtime Mobile Exploration

Objection είναι ένα εργαλείο εξερεύνησης κινητών σε πραγματικό χρόνο, που υποστηρίζεται από Frida. Δημιουργήθηκε με σκοπό να βοηθήσει στην αξιολόγηση κινητών εφαρμογών και της ασφάλειας τους χωρίς την ανάγκη για jailbroken ή rooted κινητή συσκευή.

Σημείωση: Αυτό δεν είναι κάποια μορφή jailbreak / root bypass. Χρησιμοποιώντας το objection, εξακολουθείτε να περιορίζεστε από όλους τους περιορισμούς που επιβάλλει το σχετικό sandbox που αντιμετωπίζετε.

Περίληψη

Ο στόχος του objection είναι να επιτρέψει στον χρήστη να καλέσει τις κύριες ενέργειες που προσφέρει η Frida. Αλλιώς, ο χρήστης θα χρειαστεί να δημιουργήσει ένα μοναδικό script για κάθε εφαρμογή που θέλει να δοκιμάσει.

Tutorial

Για αυτό το tutorial θα χρησιμοποιήσω το APK που μπορείτε να κατεβάσετε εδώ:

Ή από το πρωτότυπο αποθετήριο(κατεβάστε app-release.apk)

Εγκατάσταση

bash
pip3 install objection

Σύνδεση

Κάντε μια κανονική σύνδεση ADB και ξεκινήστε τον server frida στη συσκευή (και ελέγξτε ότι το frida λειτουργεί τόσο στον πελάτη όσο και στον server).

Εάν χρησιμοποιείτε μια rooted συσκευή, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην --gadget επιλογή. σε αυτή την περίπτωση:

bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

Βασικές Ενέργειες

Δεν θα παρατεθούν όλες οι δυνατές εντολές του objection σε αυτό το tutorial, μόνο αυτές που έχω βρει πιο χρήσιμες.

Περιβάλλον

Ορισμένες ενδιαφέρουσες πληροφορίες (όπως κωδικοί πρόσβασης ή διαδρομές) μπορεί να βρεθούν μέσα στο περιβάλλον.

bash
env

Πληροφορίες για το Frida

bash
frida

Μεταφόρτωση/Λήψη

bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]

Εισαγωγή σε σενάριο frida

bash
import <local path frida-script>

SSLPinning

bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Ανίχνευση ρίζας

bash
android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Εκτέλεση Εντολής

bash
android shell_exec whoami

Στιγμιότυπα

bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

Στατική ανάλυση που έγινε Δυναμική

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

Αυτό είναι επίσης χρήσιμο αν με κάποιο τρόπο είστε ανίκανοι να αποκτήσετε κάποιο αναγνώσιμο πηγαίο κώδικα της εφαρμογής.

Λίστα δραστηριοτήτων, παραληπτών και υπηρεσιών

bash
android hooking list activities

bash
android hooking list services
android hooking list receivers

Frida θα εκκινήσει ένα σφάλμα αν δεν βρεθεί κανένα

Λήψη τρέχουσας δραστηριότητας

bash
android hooking get current_activity

Αναζήτηση Κλάσεων

Ας αρχίσουμε να ψάχνουμε για κλάσεις μέσα στην εφαρμογή μας

bash
android hooking search classes asvid.github.io.fridaapp

Μέθοδοι Αναζήτησης μιας κλάσης

Τώρα ας εξάγουμε τις μεθόδους μέσα στην κλάση MainActivity:

bash
android hooking search methods asvid.github.io.fridaapp MainActivity

Λίστα δηλωμένων Μεθόδων μιας κλάσης με τις παραμέτρους τους

Ας καταλάβουμε ποιες παραμέτρους χρειάζονται οι μέθοδοι της κλάσης:

bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity

Λίστα κλάσεων

Μπορείτε επίσης να καταγράψετε όλες τις κλάσεις που έχουν φορτωθεί μέσα στην τρέχουσα εφαρμογή:

bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

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

Η σύνδεση είναι εύκολη

Σύνδεση (παρακολούθηση) μιας μεθόδου

Από τον κώδικα πηγής της εφαρμογής γνωρίζουμε ότι η λειτουργία sum() από MainActivity εκτελείται κάθε δευτερόλεπτο. Ας προσπαθήσουμε να εκχυλίσουμε όλες τις δυνατές πληροφορίες κάθε φορά που καλείται η λειτουργία (παράμετροι, τιμή επιστροφής και backtrace):

bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

Hooking (watching) an entire class

Στην πραγματικότητα, βρίσκω όλες τις μεθόδους της κλάσης MainActivity πολύ ενδιαφέρουσες, ας hook them all. Να είστε προσεκτικοί, αυτό θα μπορούσε να crash μια εφαρμογή.

bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

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

Αλλαγή της boolean τιμής επιστροφής μιας συνάρτησης

Από τον πηγαίο κώδικα μπορείτε να δείτε ότι η συνάρτηση checkPin παίρνει ένα String ως όρισμα και επιστρέφει ένα boolean. Ας κάνουμε τη συνάρτηση να επιστρέφει πάντα true:

Τώρα, αν γράψετε οτιδήποτε στο πεδίο κειμένου για τον κωδικό PIN, θα δείτε ότι οτιδήποτε είναι έγκυρο:

Εμφανίσεις κλάσης

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

android heap print_instances <class>

Keystore/Intents

Μπορείτε να πειραματιστείτε με το keystore και τα intents χρησιμοποιώντας:

bash
android keystore list
android intents launch_activity
android intent launch_service

Μνήμη

Dump

bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

Λίστα

bash
memory list modules

Στο κάτω μέρος της λίστας μπορείτε να δείτε το frida:

Ας ελέγξουμε τι εξάγει το frida:

Αναζήτηση/Γράψιμο

Μπορείτε επίσης να αναζητήσετε και να γράψετε μέσα στη μνήμη με το objection:

bash
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

SQLite

Μπορείτε να χρησιμοποιήσετε την εντολή sqlite για να αλληλεπιδράσετε με βάσεις δεδομένων sqlite.

Exit

bash
exit

Τι μου λείπει από το Objection

  • Οι μέθοδοι hooking μερικές φορές καταρρέουν την εφαρμογή (αυτό οφείλεται επίσης στο Frida).
  • Δεν μπορείτε να χρησιμοποιήσετε τις παρουσίες των κλάσεων για να καλέσετε συναρτήσεις της παρουσίας. Και δεν μπορείτε να δημιουργήσετε νέες παρουσίες κλάσεων και να τις χρησιμοποιήσετε για να καλέσετε συναρτήσεις.
  • Δεν υπάρχει μια συντόμευση (όπως αυτή για το sslpinnin) για να hookάρετε όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται.

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks