mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
229 lines
12 KiB
Markdown
229 lines
12 KiB
Markdown
# Objection Tutorial
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
|
||
|
||
## **Εισαγωγή**
|
||
|
||
**objection - Runtime Mobile Exploration**
|
||
|
||
[**Objection**](https://github.com/sensepost/objection) είναι ένα εργαλείο εξερεύνησης κινητών σε χρόνο εκτέλεσης, που υποστηρίζεται από [Frida](https://www.frida.re). Δημιουργήθηκε με σκοπό να βοηθήσει στην αξιολόγηση κινητών εφαρμογών και της ασφάλειας τους χωρίς την ανάγκη για jailbroken ή rooted κινητή συσκευή.
|
||
|
||
**Σημείωση:** Αυτό δεν είναι κάποια μορφή jailbreak / root bypass. Χρησιμοποιώντας το `objection`, εξακολουθείτε να περιορίζεστε από όλους τους περιορισμούς που επιβάλλει το σχετικό sandbox που αντιμετωπίζετε.
|
||
|
||
### Περίληψη
|
||
|
||
Ο **στόχος** του **objection** είναι να επιτρέψει στον χρήστη να καλέσει τις **κύριες ενέργειες που προσφέρει η Frida**. **Αλλιώς**, ο χρήστης θα χρειαστεί να δημιουργήσει ένα **μοναδικό script για κάθε εφαρμογή** που θέλει να δοκιμάσει.
|
||
|
||
## Tutorial
|
||
|
||
Για αυτό το tutorial θα χρησιμοποιήσω το APK που μπορείτε να κατεβάσετε εδώ:
|
||
|
||
{% file src="../../../images/app-release.zip" %}
|
||
|
||
Ή από το [πρωτότυπο αποθετήριο](https://github.com/asvid/FridaApp) (κατεβάστε 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
|
||
```
|
||
.png>)
|
||
|
||
#### Πληροφορίες για το Frida
|
||
```bash
|
||
frida
|
||
```
|
||
.png>)
|
||
|
||
#### Μεταφόρτωση/Λήψη
|
||
```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.
|
||
```
|
||
#### Ανίχνευση root
|
||
```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
|
||
```
|
||
.png>)
|
||
```bash
|
||
android hooking list services
|
||
android hooking list receivers
|
||
```
|
||
Frida θα εκκινήσει ένα σφάλμα αν δεν βρεθεί κανένα
|
||
|
||
#### Λήψη τρέχουσας δραστηριότητας
|
||
```bash
|
||
android hooking get current_activity
|
||
```
|
||
.png>)
|
||
|
||
#### Αναζήτηση Κλάσεων
|
||
|
||
Ας αρχίσουμε να ψάχνουμε για κλάσεις μέσα στην εφαρμογή μας
|
||
```bash
|
||
android hooking search classes asvid.github.io.fridaapp
|
||
```
|
||
.png>)
|
||
|
||
#### Μέθοδοι Αναζήτησης μιας κλάσης
|
||
|
||
Τώρα ας εξάγουμε τις μεθόδους μέσα στην κλάση _MainActivity:_
|
||
```bash
|
||
android hooking search methods asvid.github.io.fridaapp MainActivity
|
||
```
|
||
.png>)
|
||
|
||
#### Λίστα δηλωμένων Μεθόδων μιας κλάσης με τις παραμέτρους τους
|
||
|
||
Ας καταλάβουμε ποιες παραμέτρους χρειάζονται οι μέθοδοι της κλάσης:
|
||
```bash
|
||
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
|
||
```
|
||
.png>)
|
||
|
||
#### Λίστα κλάσεων
|
||
|
||
Μπορείτε επίσης να καταγράψετε όλες τις κλάσεις που έχουν φορτωθεί μέσα στην τρέχουσα εφαρμογή:
|
||
```bash
|
||
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
|
||
```
|
||
Αυτό είναι πολύ χρήσιμο αν θέλετε να **συνδέσετε τη μέθοδο μιας κλάσης και γνωρίζετε μόνο το όνομα της κλάσης**. Μπορείτε να χρησιμοποιήσετε αυτή τη λειτουργία για να **αναζητήσετε ποιο module ανήκει η κλάση** και στη συνέχεια να συνδέσετε τη μέθοδο της.
|
||
|
||
### Η σύνδεση είναι εύκολη
|
||
|
||
#### Σύνδεση (παρακολούθηση) μιας μεθόδου
|
||
|
||
Από τον [κώδικα πηγής](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) της εφαρμογής γνωρίζουμε ότι η **λειτουργία** _**sum()**_ **από** _**MainActivity**_ εκτελείται **κάθε δευτερόλεπτο**. Ας προσπαθήσουμε να **εκχυλίσουμε όλες τις δυνατές πληροφορίες** κάθε φορά που καλείται η λειτουργία (παράμετροι, τιμή επιστροφής και backtrace):
|
||
```bash
|
||
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
|
||
```
|
||
.png>)
|
||
|
||
#### Hooking (watching) an entire class
|
||
|
||
Στην πραγματικότητα, βρίσκω όλες τις μεθόδους της κλάσης MainActivity πολύ ενδιαφέρουσες, ας **hook them all**. Να είστε προσεκτικοί, αυτό θα μπορούσε να **crash** μια εφαρμογή.
|
||
```bash
|
||
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
|
||
```
|
||
Αν παίξετε με την εφαρμογή ενώ η κλάση είναι συνδεδεμένη, θα δείτε πότε **καλείται κάθε συνάρτηση**, τα **ορίσματα** της και την **τιμή επιστροφής**.
|
||
|
||
.png>)
|
||
|
||
#### Αλλαγή της boolean τιμής επιστροφής μιας συνάρτησης
|
||
|
||
Από τον πηγαίο κώδικα μπορείτε να δείτε ότι η συνάρτηση _checkPin_ παίρνει ένα _String_ ως όρισμα και επιστρέφει ένα _boolean_. Ας κάνουμε τη συνάρτηση **να επιστρέφει πάντα true**:
|
||
|
||
.png>)
|
||
|
||
Τώρα, αν γράψετε οτιδήποτε στο πεδίο κειμένου για τον κωδικό PIN, θα δείτε ότι οτιδήποτε είναι έγκυρο:
|
||
|
||
.png>)
|
||
|
||
### Εμφανίσεις κλάσης
|
||
|
||
Αναζητήστε και εκτυπώστε **ζωντανές εμφανίσεις μιας συγκεκριμένης Java κλάσης**, που καθορίζεται από ένα πλήρως προσδιορισμένο όνομα κλάσης. Το αποτέλεσμα είναι η προσπάθεια να αποκτήσετε μια τιμή string για μια ανακαλυφθείσα objection που θα περιέχει συνήθως **τιμές ιδιοτήτων για το αντικείμενο**.
|
||
```
|
||
android heap print_instances <class>
|
||
```
|
||
.png>)
|
||
|
||
### 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
|
||
```
|
||
.png>)
|
||
|
||
Στο κάτω μέρος της λίστας μπορείτε να δείτε το frida:
|
||
|
||
.png>)
|
||
|
||
Ας ελέγξουμε τι εξάγει το frida:
|
||
|
||
.png>)
|
||
|
||
#### Αναζήτηση/Γράψιμο
|
||
|
||
Μπορείτε επίσης να αναζητήσετε και να γράψετε μέσα στη μνήμη με το 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 και αλγόριθμους που χρησιμοποιούνται.
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|