# Android Applications Pentesting
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Μάθετε & εξασκηθείτε στο GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
Εγγραφείτε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server για να επικοινωνήσετε με έμπειρους hackers και κυνηγούς bug bounty!
**Hacking Insights**\
Συμμετάσχετε σε περιεχόμενο που εμβαθύνει στην αδρεναλίνη και τις προκλήσεις του hacking
**Real-Time Hack News**\
Μείνετε ενημερωμένοι με τον ταχύτατο κόσμο του hacking μέσω ειδήσεων και πληροφοριών σε πραγματικό χρόνο
**Latest Announcements**\
Μείνετε ενημερωμένοι με τις πιο πρόσφατες bug bounties που ξεκινούν και κρίσιμες ενημερώσεις πλατφορμών
**Εγγραφείτε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και ξεκινήστε να συνεργάζεστε με κορυφαίους hackers σήμερα!
## Android Applications Basics
Είναι πολύ σημαντικό να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android**:
{% content-ref url="android-applications-basics.md" %}
[android-applications-basics.md](android-applications-basics.md)
{% endcontent-ref %}
## ADB (Android Debug Bridge)
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια συσκευή android (εξομοιωμένη ή φυσική).\
**ADB** επιτρέπει τον έλεγχο συσκευών είτε μέσω **USB** είτε μέσω **Δικτύου** από έναν υπολογιστή. Αυτή η χρησιμότητα επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, **εκτέλεση** εντολών shell, **δημιουργία αντιγράφων ασφαλείας** δεδομένων, **ανάγνωση** καταγραφών, μεταξύ άλλων λειτουργιών.
Ρίξτε μια ματιά στη λίστα με τις [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
## Smali
Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το ξανασυμπιέσετε.\
[**Σε αυτό το tutorial** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**.
## Other interesting tricks
* [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md)
* **Download APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
* Extract APK from device:
```bash
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
```
* Συγχωνεύστε όλα τα διαχωρισμένα και βασικά apks με [APKEditor](https://github.com/REAndroid/APKEditor):
```bash
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
```
## Στατική Ανάλυση
Πρώτα απ' όλα, για να αναλύσετε ένα APK θα πρέπει να **ρίξετε μια ματιά στον κώδικα Java** χρησιμοποιώντας έναν decompiler.\
Παρακαλώ, [**διαβάστε εδώ για να βρείτε πληροφορίες σχετικά με διάφορους διαθέσιμους decompilers**](apk-decompilers.md).
### Αναζητώντας ενδιαφέροντα στοιχεία
Απλά ρίχνοντας μια ματιά στις **αλφαβητικές σειρές** του APK μπορείτε να αναζητήσετε **κωδικούς πρόσβασης**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** κλειδιά, **κρυπτογράφηση**, **bluetooth uuids**, **tokens** και οτιδήποτε άλλο ενδιαφέρον... κοιτάξτε ακόμα και για εκτέλεση κώδικα **backdoors** ή backdoors αυθεντικοποίησης (σκληρά κωδικοποιημένα διαπιστευτήρια διαχειριστή στην εφαρμογή).
**Firebase**
Δώστε ιδιαίτερη προσοχή σε **firebase URLs** και ελέγξτε αν είναι κακώς ρυθμισμένα. [Περισσότερες πληροφορίες σχετικά με το τι είναι το Firebase και πώς να το εκμεταλλευτείτε εδώ.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml
Η **εξέταση των αρχείων \_Manifest.xml**_\*\* και \*\*_**strings.xml**\_\*\* μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας\*\*. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας decompilers ή με την αλλαγή της επέκτασης του αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το.
**Ευπάθειες** που εντοπίζονται από το **Manifest.xml** περιλαμβάνουν:
* **Debuggable Εφαρμογές**: Οι εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο αρχείο _Manifest.xml_ θέτουν σε κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
* **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που ασχολούνται με ευαίσθητες πληροφορίες για να αποτραπεί η μη εξουσιοδοτημένη δημιουργία αντιγράφων ασφαλείας μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb.
* **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP traffic για συγκεκριμένα domains.
* **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να κακοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία.
* **Content Providers και FileProviders**: Οι εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders θα πρέπει επίσης να εξεταστεί προσεκτικά.
* **Broadcast Receivers και URL Schemes**: Αυτά τα στοιχεία θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για ευπάθειες εισόδου.
* **Εκδόσεις SDK**: Τα χαρακτηριστικά `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία της μη υποστήριξης παλαιών, ευάλωτων εκδόσεων Android για λόγους ασφαλείας.
Από το αρχείο **strings.xml**, ευαίσθητες πληροφορίες όπως API κλειδιά, προσαρμοσμένα σχήματα και άλλες σημειώσεις προγραμματιστών μπορούν να ανακαλυφθούν, υπογραμμίζοντας την ανάγκη για προσεκτική ανασκόπηση αυτών των πόρων.
### Tapjacking
**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ περνά την αλληλεπίδραση στην εφαρμογή θύμα.\
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**.
Βρείτε περισσότερες πληροφορίες στο:
{% content-ref url="tapjacking.md" %}
[tapjacking.md](tapjacking.md)
{% endcontent-ref %}
### Hijacking Εργασίας
Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask`** χωρίς καμία καθορισμένη `taskAffinity` είναι ευάλωτη σε hijacking εργασίας. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή, θα μπορούσε να **υφαρπάξει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**).
Περισσότερες πληροφορίες στο:
{% content-ref url="android-task-hijacking.md" %}
[android-task-hijacking.md](android-task-hijacking.md)
{% endcontent-ref %}
### Ανασφαλής αποθήκευση δεδομένων
**Εσωτερική Αποθήκευση**
Στο Android, τα αρχεία που **αποθηκεύονται** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας είναι **επιβεβλημένο** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφάλειας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
1. **Στατική Ανάλυση:**
* **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` είναι **προσεκτικά εξετασμένη**. Αυτοί οι τρόποι **μπορούν να εκθέσουν** τα αρχεία σε **μη προγραμματισμένη ή μη εξουσιοδοτημένη πρόσβαση**.
2. **Δυναμική Ανάλυση:**
* **Επαληθεύστε** τις **άδειες** που έχουν οριστεί στα αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν οποιαδήποτε αρχεία είναι **ρυθμισμένα να είναι αναγνώσιμα ή εγγράψιμα παγκοσμίως**. Αυτό μπορεί να θέσει σε σημαντικό κίνδυνο την ασφάλεια, καθώς θα επιτρέπει σε **οποιαδήποτε εφαρμογή** εγκατασταθεί στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
**Εξωτερική Αποθήκευση**
Όταν ασχολείστε με αρχεία σε **εξωτερική αποθήκευση**, όπως οι κάρτες SD, θα πρέπει να ληφθούν ορισμένες προφυλάξεις:
1. **Προσβασιμότητα**:
* Τα αρχεία στην εξωτερική αποθήκευση είναι **παγκοσμίως αναγνώσιμα και εγγράψιμα**. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά τα αρχεία.
2. **Ανησυχίες Ασφαλείας**:
* Δεδομένης της ευκολίας πρόσβασης, συνιστάται **να μην αποθηκεύετε ευαίσθητες πληροφορίες** στην εξωτερική αποθήκευση.
* Η εξωτερική αποθήκευση μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας την λιγότερο ασφαλή.
3. **Διαχείριση Δεδομένων από Εξωτερική Αποθήκευση**:
* Πάντα **εκτελέστε έλεγχο εισόδου** στα δεδομένα που ανακτώνται από την εξωτερική αποθήκευση. Αυτό είναι κρίσιμο καθώς τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή.
* Η αποθήκευση εκτελέσιμων ή αρχείων κλάσης στην εξωτερική αποθήκευση για δυναμική φόρτωση αποθαρρύνεται έντονα.
* Εάν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από την εξωτερική αποθήκευση, βεβαιωθείτε ότι αυτά τα αρχεία είναι **υπογεγραμμένα και κρυπτογραφικά επαληθευμένα** πριν φορτωθούν δυναμικά. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ασφάλειας της εφαρμογής σας.
Η εξωτερική αποθήκευση μπορεί να **προσεγγιστεί** στο `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
{% hint style="info" %}
Αρχίζοντας από το Android 4.4 (**API 17**), η κάρτα SD έχει μια δομή καταλόγου που **περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που είναι ειδικά για αυτή την εφαρμογή**. Αυτό αποτρέπει την κακόβουλη εφαρμογή από το να αποκτήσει πρόσβαση για ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.
{% endhint %}
**Ευαίσθητα δεδομένα αποθηκευμένα σε καθαρό κείμενο**
* **Κοινές ρυθμίσεις**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα αρχεία xml στη διαδρομή `/data/data//shared_prefs/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
* **Βάσεις Δεδομένων**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα βάσεις δεδομένων sqlite στη διαδρομή `/data/data//databases/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
### Σπασμένο TLS
**Αποδοχή Όλων των Πιστοποιητικών**
Για κάποιο λόγο, μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμα και αν, για παράδειγμα, το hostname δεν ταιριάζει με γραμμές κώδικα όπως η παρακάτω:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.
### Broken Cryptography
**Κακές διαδικασίες διαχείρισης κλειδιών**
Some developers save sensitive data in the local storage and encrypt it with a key hardcoded/predictable in the code. This shouldn't be done as some reversing could allow attackers to extract the confidential information.
**Χρήση ανασφαλών και/ή παρωχημένων αλγορίθμων**
Developers shouldn't use **παρωχημένους αλγορίθμους** to perform authorisation **checks**, **store** or **send** data. Some of these algorithms are: RC4, MD4, MD5, SHA1... If **hashes** are used to store passwords for example, hashes brute-force **resistant** should be used with salt.
### Other checks
* It's recommended to **obfuscate the APK** to difficult the reverse engineer labour to attackers.
* If the app is sensitive (like bank apps), it should perform it's **own checks to see if the mobile is rooted** and act in consequence.
* If the app is sensitive (like bank apps), it should check if an **emulator** is being used.
* If the app is sensitive (like bank apps), it should **check it's own integrity before executing** it to check if it was modified.
* Use [**APKiD**](https://github.com/rednaga/APKiD) to check which compiler/packer/obfuscator was used to build the APK
### React Native Application
Read the following page to learn how to easily access javascript code of React applications:
{% content-ref url="react-native-application.md" %}
[react-native-application.md](react-native-application.md)
{% endcontent-ref %}
### Xamarin Applications
Read the following page to learn how to easily access C# code of a xamarin applications:
{% content-ref url="../xamarin-apps.md" %}
[xamarin-apps.md](../xamarin-apps.md)
{% endcontent-ref %}
### Superpacked Applications
According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.**
### Automated Static Code Analysis
The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability.
With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**.
### Secrets leaked
An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
### Bypass Biometric Authentication
{% content-ref url="bypass-biometric-authentication-android.md" %}
[bypass-biometric-authentication-android.md](bypass-biometric-authentication-android.md)
{% endcontent-ref %}
### Other interesting functions
* **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()`
* **Send SMSs**: `sendTextMessage, sendMultipartTestMessage`
* **Native functions** declared as `native`: `public native, System.loadLibrary, System.load`
* [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
### **Other tricks**
{% content-ref url="content-protocol.md" %}
[content-protocol.md](content-protocol.md)
{% endcontent-ref %}
***
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Hacking Insights**\
Engage with content that delves into the thrill and challenges of hacking
**Real-Time Hack News**\
Keep up-to-date with fast-paced hacking world through real-time news and insights
**Latest Announcements**\
Stay informed with the newest bug bounties launching and crucial platform updates
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
***
## Dynamic Analysis
> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.
### Online Dynamic analysis
You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving.
You can even **see the logs of your application** in the web and connect through **adb**.
![](<../../.gitbook/assets/image (831).png>)
Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators.
### Local Dynamic Analysis
#### Using an emulator
* [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator).
* Learn to set it up in this page:
{% content-ref url="avd-android-virtual-device.md" %}
[avd-android-virtual-device.md](avd-android-virtual-device.md)
{% endcontent-ref %}
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._)
* [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer).
{% hint style="info" %}
When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.
{% endhint %}
To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image:
![](<../../.gitbook/assets/image (277).png>)
Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools).
#### Use a physical device
You need to activate the **debugging** options and it will be cool if you can **root** it:
1. **Settings**.
2. (FromAndroid 8.0) Select **System**.
3. Select **About phone**.
4. Press **Build number** 7 times.
5. Go back and you will find the **Developer options**.
> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\
> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on.
### Unintended Data Leakage
**Logging**
Developers should be cautious of exposing **debugging information** publicly, as it can lead to sensitive data leaks. The tools [**pidcat**](https://github.com/JakeWharton/pidcat) and `adb logcat` are recommended for monitoring application logs to identify and protect sensitive information. **Pidcat** is favored for its ease of use and readability.
{% hint style="warning" %}
Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\
Anyway, it's still recommended to **not log sensitive information**.
{% endhint %}
**Copy/Paste Buffer Caching**
Android's **clipboard-based** framework enables copy-paste functionality in apps, yet poses a risk as **other applications** can **access** the clipboard, potentially exposing sensitive data. It's crucial to **disable copy/paste** functions for sensitive sections of an application, like credit card details, to prevent data leaks.
**Crash Logs**
If an application **crashes** and **saves logs**, these logs can assist attackers, particularly when the application cannot be reverse-engineered. To mitigate this risk, avoid logging on crashes, and if logs must be transmitted over the network, ensure they are sent via an SSL channel for security.
As pentester, **try to take a look to these logs**.
**Analytics Data Sent To 3rd Parties**
Applications often integrate services like Google Adsense, which can inadvertently **leak sensitive data** due to improper implementation by developers. To identify potential data leaks, it's advisable to **intercept the application's traffic** and check for any sensitive information being sent to third-party services.
### SQLite DBs
Most of the applications will use **internal SQLite databases** to save information. During the pentest take a **look** to the **databases** created, the names of **tables** and **columns** and all the **data** saved because you could find **sensitive information** (which would be a vulnerability).\
Databases should be located in `/data/data/the.package.name/databases` like `/data/data/com.mwr.example.sieve/databases`
If the database is saving confidential information and is **encrypted b**ut you can **find** the **password** inside the application it's still a **vulnerability**.
Enumerate the tables using `.tables` and enumerate the columns of the tables doing `.schema `
### Drozer (Exploit Activities, Content Providers and Services)
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\
Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections.
### Exploiting exported Activities
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Also remember that the code of an activity starts in the **`onCreate`** method.
**Authorisation bypass**
When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.**
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/#activities)
You can also start an exported activity from adb:
* PackageName is com.example.demo
* Exported ActivityName is com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**ΣΗΜΕΙΩΣΗ**: Το MobSF θα ανιχνεύσει ως κακόβουλη τη χρήση του _**singleTask/singleInstance**_ ως `android:launchMode` σε μια δραστηριότητα, αλλά λόγω [αυτού](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (API εκδόσεις < 21).
{% hint style="info" %}
Σημειώστε ότι μια παράκαμψη εξουσιοδότησης δεν είναι πάντα ευπάθεια, θα εξαρτηθεί από το πώς λειτουργεί η παράκαμψη και ποιες πληροφορίες εκτίθενται.
{% endhint %}
**Διαρροή ευαίσθητων πληροφοριών**
**Οι δραστηριότητες μπορούν επίσης να επιστρέφουν αποτελέσματα**. Εάν καταφέρετε να βρείτε μια εξαγόμενη και μη προστατευμένη δραστηριότητα που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει διαρροή ευαίσθητων πληροφοριών.
#### Tapjacking
Εάν δεν προληφθεί το tapjacking, θα μπορούσατε να εκμεταλλευτείτε τη εξαγόμενη δραστηριότητα για να κάνετε τον **χρήστη να εκτελέσει απροσδόκητες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**τι είναι το Tapjacking ακολουθήστε τον σύνδεσμο**](./#tapjacking).
### Εκμετάλλευση Παρόχων Περιεχομένου - Πρόσβαση και χειρισμός ευαίσθητων πληροφοριών
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Πάροχος Περιεχομένου.**](android-applications-basics.md#content-provider)\
Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Εάν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς θα μπορούσαν να είναι ευάλωτοι.
[**Μάθετε πώς να εκμεταλλευτείτε τους Παρόχους Περιεχομένου με το Drozer.**](drozer-tutorial/#content-providers)
### **Εκμετάλλευση Υπηρεσιών**
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Υπηρεσία.**](android-applications-basics.md#services)\
Θυμηθείτε ότι οι ενέργειες μιας Υπηρεσίας ξεκινούν στη μέθοδο `onStartCommand`.
Μια υπηρεσία είναι βασικά κάτι που **μπορεί να λάβει δεδομένα**, **να τα επεξεργαστεί** και **να επιστρέψει** (ή όχι) μια απάντηση. Έτσι, εάν μια εφαρμογή εξάγει κάποιες υπηρεσίες, θα πρέπει να **ελέγξετε** τον **κώδικα** για να κατανοήσετε τι κάνει και να **δοκιμάσετε** το **δυναμικά** για να εξάγετε εμπιστευτικές πληροφορίες, παρακάμπτοντας μέτρα αυθεντικοποίησης...\
[**Μάθετε πώς να εκμεταλλευτείτε τις Υπηρεσίες με το Drozer.**](drozer-tutorial/#services)
### **Εκμετάλλευση Δέκτες Εκπομπών**
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Δέκτης Εκπομπών.**](android-applications-basics.md#broadcast-receivers)\
Θυμηθείτε ότι οι ενέργειες ενός Δέκτη Εκπομπών ξεκινούν στη μέθοδο `onReceive`.
Ένας δέκτης εκπομπών θα περιμένει για έναν τύπο μηνύματος. Ανάλογα με το πώς ο δέκτης χειρίζεται το μήνυμα, θα μπορούσε να είναι ευάλωτος.\
[**Μάθετε πώς να εκμεταλλευτείτε τους Δέκτες Εκπομπών με το Drozer.**](./#exploiting-broadcast-receivers)
### **Εκμετάλλευση Σχημάτων / Deep links**
Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή σενάρια όπως [αυτό](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Μπορείτε να **ανοίξετε** ένα δηλωμένο **σχήμα** χρησιμοποιώντας **adb** ή έναν **περιηγητή**:
{% code overflow="wrap" %}
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
{% endcode %}
_Σημειώστε ότι μπορείτε να **παραλείψετε το όνομα πακέτου** και το κινητό θα καλέσει αυτόματα την εφαρμογή που θα πρέπει να ανοίξει αυτόν τον σύνδεσμο._
{% code overflow="wrap" %}
```markup
Click mewith alternative
```
{% endcode %}
**Κώδικας που εκτελείται**
Για να βρείτε τον **κώδικα που θα εκτελείται στην εφαρμογή**, πηγαίνετε στη δραστηριότητα που καλείται από το deeplink και αναζητήστε τη συνάρτηση **`onNewIntent`**.
![](<../../.gitbook/assets/image (436) (1) (1) (1).png>)
**Ευαίσθητες πληροφορίες**
Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι **δεν λαμβάνει ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης) μέσω παραμέτρων URL**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε **να προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!**
**Παράμετροι στη διαδρομή**
Πρέπει να **ελέγξετε επίσης αν κάποιο deep link χρησιμοποιεί μια παράμετρο μέσα στη διαδρομή** του URL όπως: `https://api.example.com/v1/users/{username}`, σε αυτή την περίπτωση μπορείτε να αναγκάσετε μια διαδρομή traversal αποκτώντας πρόσβαση σε κάτι όπως: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να είστε σε θέση να προκαλέσετε μια **Open Redirect** (αν μέρος της διαδρομής χρησιμοποιείται ως όνομα τομέα), **κατάληψη λογαριασμού** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το ευάλωτο endpoint χρησιμοποίησε τη σωστή μέθοδο) και οποιαδήποτε άλλη ευπάθεια. Περισσότερες [πληροφορίες σχετικά με αυτό εδώ](http://dphoeniixx.com/2020/12/13-2/).
**Περισσότερα παραδείγματα**
Ένα [ενδιαφέρον bug bounty report](https://hackerone.com/reports/855618) σχετικά με συνδέσμους (_/.well-known/assetlinks.json_).
### Αποτυχίες Επιθεώρησης και Επαλήθευσης Επίπεδου Μεταφοράς
* **Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά** από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση HTTP συνδέσεων.
* **Οι διαπραγματεύσεις κατά τη διάρκεια του SSL/TLS handshake είναι μερικές φορές αδύναμες**, χρησιμοποιώντας ανασφαλείς κρυπτογραφικές σουίτες. Αυτή η ευπάθεια καθιστά τη σύνδεση ευάλωτη σε επιθέσεις man-in-the-middle (MITM), επιτρέποντας στους επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
* **Διαρροή ιδιωτικών πληροφοριών** είναι ένας κίνδυνος όταν οι εφαρμογές πιστοποιούν χρησιμοποιώντας ασφαλείς διαύλους αλλά στη συνέχεια επικοινωνούν μέσω μη ασφαλών διαύλων για άλλες συναλλαγές. Αυτή η προσέγγιση αποτυγχάνει να προστατεύσει ευαίσθητα δεδομένα, όπως cookies συνεδρίας ή λεπτομέρειες χρηστών, από την παρεμβολή κακόβουλων οντοτήτων.
#### Επαλήθευση Πιστοποιητικού
Θα επικεντρωθούμε στην **επαλήθευση πιστοποιητικού**. Η ακεραιότητα του πιστοποιητικού του διακομιστή πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο γιατί οι ανασφαλείς ρυθμίσεις TLS και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορεί να θέσουν σημαντικούς κινδύνους. Για λεπτομερείς οδηγίες σχετικά με την επαλήθευση πιστοποιητικών διακομιστή και την αντιμετώπιση ευπαθειών, [**αυτή η πηγή**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει εκτενή καθοδήγηση.
#### SSL Pinning
Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που αποθηκεύεται μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
#### Επιθεώρηση Κίνησης
Για να επιθεωρήσετε την κίνηση HTTP, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κίνηση μπορεί να μην είναι ορατή μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Ρύθμιση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Ρύθμισης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το tutorial**](make-apk-accept-ca-certificate.md).
#### Παράκαμψη SSL Pinning
Όταν εφαρμόζεται το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της κίνησης HTTPS. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό:
* Αυτόματα **τροποποιήστε** το **apk** για να **παράκαμψετε** το SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το καλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν θα λειτουργήσει πάντα.
* Μπορείτε να χρησιμοποιήσετε **Frida** (που συζητείται παρακάτω) για να παρακάμψετε αυτή την προστασία. Εδώ έχετε έναν οδηγό για τη χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
* Μπορείτε επίσης να προσπαθήσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
* Μπορείτε επίσης να προσπαθήσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω)
* Αν νομίζετε ότι υπάρχει κάποια κίνηση που δεν καταγράφετε, μπορείτε να προσπαθήσετε να **προωθήσετε την κίνηση στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Αναζητώντας Κοινές Ευπάθειες Ιστού
Είναι σημαντικό να αναζητήσετε επίσης κοινές ευπάθειες ιστού μέσα στην εφαρμογή. Λεπτομερείς πληροφορίες σχετικά με την αναγνώριση και την αντιμετώπιση αυτών των ευπαθειών είναι πέρα από το πεδίο αυτής της σύνοψης αλλά καλύπτονται εκτενώς αλλού.
### Frida
[Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής οργάνωσης για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφαλείας.\
**Μπορείτε να αποκτήσετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\
Αν θέλετε να κάνετε pentest σε εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
* Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/)
* Μερικά "GUI" για ενέργειες με το Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
* Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
* Μπορείτε να βρείτε μερικά καταπληκτικά σενάρια Frida εδώ: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
* Προσπαθήστε να παρακάμψετε μηχανισμούς anti-debugging / anti-frida φορτώνοντας το Frida όπως υποδεικνύεται στο [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
### **Dump Memory - Fridump**
Ελέγξτε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες μέσα στη μνήμη που δεν θα έπρεπε να αποθηκεύει όπως κωδικούς πρόσβασης ή μνημονικά.
Χρησιμοποιώντας [**Fridump3**](https://github.com/rootbsd/fridump3) μπορείτε να κάνετε dump τη μνήμη της εφαρμογής με:
```bash
# With PID
python3 fridump3.py -u
# With name
frida-ps -Uai
python3 fridump3.py -u ""
```
Αυτό θα εκτυπώσει τη μνήμη στον φάκελο ./dump, και εκεί μπορείτε να κάνετε grep με κάτι όπως:
{% code overflow="wrap" %}
```bash
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
```
{% endcode %}
### **Ευαίσθητα δεδομένα στο Keystore**
Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτηθεί πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι pentests θα πρέπει να ελέγχουν γι' αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα.
Ακόμα και αν μια εφαρμογή αποθηκεύει δεδομένα στο keystore, τα δεδομένα θα πρέπει να είναι κρυπτογραφημένα.
Για να αποκτήσετε πρόσβαση στα δεδομένα μέσα στο keystore, μπορείτε να χρησιμοποιήσετε αυτό το σενάριο Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
```bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **Απαγόρευση Δακτυλικών Αποτυπωμάτων/Βιομετρικών**
Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να **παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων** που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:**
{% code overflow="wrap" %}
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f
```
{% endcode %}
### **Εικόνες Φόντου**
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημειώστε ότι χρειάζεστε root για να έχετε πρόσβαση σε αυτό).
Τα στιγμιότυπα συνήθως αποθηκεύονται γύρω από: **`/data/system_ce/0/snapshots`**
Το Android παρέχει έναν τρόπο να **αποτρέψει την καταγραφή οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG\_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Android Application Analyzer**
Αυτό το εργαλείο μπορεί να σας βοηθήσει να διαχειριστείτε διάφορα εργαλεία κατά τη διάρκεια της δυναμικής ανάλυσης: [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
### Intent Injection
Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα περνούν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, κάτι που μπορεί να είναι επικίνδυνο.
Ο κίνδυνος έγκειται στο να επιτρέπεται στους επιτιθέμενους να ενεργοποιούν μη εξαγόμενα components εφαρμογών ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component `WebView` που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intents.
### Essential Takeaways
* **Intent Injection** είναι παρόμοιο με το πρόβλημα Open Redirect του ιστού.
* Οι εκμεταλλεύσεις περιλαμβάνουν την παράδοση αντικειμένων `Intent` ως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς λειτουργίες.
* Μπορεί να εκθέσει μη εξαγόμενα components και content providers σε επιτιθέμενους.
* Η μετατροπή URL σε `Intent` του `WebView` μπορεί να διευκολύνει ακούσιες ενέργειες.
### Android Client Side Injections and others
Πιθανώς γνωρίζετε για αυτούς τους τύπους ευπαθειών από τον Ιστό. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια εφαρμογή Android:
* **SQL Injection:** Όταν ασχολείστε με δυναμικά queries ή Content-Providers, βεβαιωθείτε ότι χρησιμοποιείτε παραμετροποιημένα queries.
* **JavaScript Injection (XSS):** Ελέγξτε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιαδήποτε WebViews (απενεργοποιημένη από προεπιλογή). [Περισσότερες πληροφορίες εδώ](webview-attacks.md#javascript-enabled).
* **Local File Inclusion:** Οι WebViews θα πρέπει να έχουν την πρόσβαση στο σύστημα αρχείων απενεργοποιημένη (ενεργοποιημένη από προεπιλογή) - `(webview.getSettings().setAllowFileAccess(false);)`. [Περισσότερες πληροφορίες εδώ](webview-attacks.md#javascript-enabled).
* **Eternal cookies**: Σε πολλές περιπτώσεις, όταν η εφαρμογή android ολοκληρώνει τη συνεδρία, το cookie δεν ανακαλείται ή μπορεί ακόμη και να αποθηκευτεί στον δίσκο.
* [**Secure Flag** στα cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
***
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Hacking Insights**\
Engage with content that delves into the thrill and challenges of hacking
**Real-Time Hack News**\
Keep up-to-date with fast-paced hacking world through real-time news and insights
**Latest Announcements**\
Stay informed with the newest bug bounties launching and crucial platform updates
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
## Automatic Analysis
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
**Static analysis**
![](<../../.gitbook/assets/image (866).png>)
**Vulnerability assessment of the application** using a nice web-based frontend. You can also perform dynamic analysis (but you need to prepare the environment).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
```
Notice that MobSF can analyse **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Οι εφαρμογές Windows πρέπει να αναλύονται από ένα MobSF εγκατεστημένο σε έναν υπολογιστή Windows_).\
Also, if you create a **ZIP** file with the source code if an **Android** or an **IOS** app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.
MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). You can also set `VT_UPLOAD` to `False`, then the **hash** will be **upload** instead of the file.
### Assisted Dynamic analysis with MobSF
**MobSF** can also be very helpful for **dynamic analysis** in **Android**, but in that case you will need to install MobSF and **genymotion** in your host (a VM or Docker won't work). _Σημείωση: Πρέπει να **ξεκινήσετε πρώτα μια VM στο genymotion** και **μετά το MobSF.**_\
The **MobSF dynamic analyser** can:
* **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press "**Exported Activity Tester**" to obtain screenshots of all the exported activities.
* Capture **HTTPS traffic**
* Use **Frida** to obtain **runtime** **information**
From android **versions > 5**, it will **automatically start Frida** and will set global **proxy** settings to **capture** traffic. It will only capture traffic from the tested application.
**Frida**
By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\
MobSF can also **invoke exported activities**, grab **screenshots** of them and **save** them for the report.
To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\
MobSF also allows you to load your own **Frida scripts** (to send the results of your Friday scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**").
![](<../../.gitbook/assets/image (419).png>)
Moreover, you have some Auxiliary Frida functionalities:
* **Enumerate Loaded Classes**: It will print all the loaded classes
* **Capture Strings**: It will print all the capture strings while using the application (super noisy)
* **Capture String Comparisons**: Could be very useful. It will **show the 2 strings being compared** and if the result was True or False.
* **Enumerate Class Methods**: Put the class name (like "java.io.File") and it will print all the methods of the class.
* **Search Class Pattern**: Search classes by pattern
* **Trace Class Methods**: **Trace** a **whole class** (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.
Once you have selected the auxiliary module you want to use you need to press "**Start Intrumentation**" and you will see all the outputs in "**Frida Live Logs**".
**Shell**
Mobsf also brings you a shell with some **adb** commands, **MobSF commands**, and common **shell** **commands** at the bottom of the dynamic analysis page. Some interesting commands:
```bash
help
shell ls
activities
exported_activities
services
receivers
```
**HTTP εργαλεία**
Όταν η κίνηση http καταγράφεται, μπορείτε να δείτε μια άσχημη εικόνα της καταγεγραμμένης κίνησης στο "**HTTP(S) Traffic**" κάτω ή μια πιο ωραία εικόνα στο "**Start HTTPTools**" πράσινο κουμπί. Από τη δεύτερη επιλογή, μπορείτε να **στείλετε** τα **καταγεγραμμένα αιτήματα** σε **proxy** όπως το Burp ή το Owasp ZAP.\
Για να το κάνετε αυτό, _ενεργοποιήστε το Burp -->_ _απενεργοποιήστε την Παρεμβολή --> στο MobSB HTTPTools επιλέξτε το αίτημα_ --> πατήστε "**Send to Fuzzer**" --> _επιλέξτε τη διεύθυνση proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Αφού ολοκληρώσετε την δυναμική ανάλυση με το MobSF, μπορείτε να πατήσετε το "**Start Web API Fuzzer**" για να **fuzz http αιτήματα** και να αναζητήσετε ευπάθειες.
{% hint style="info" %}
Μετά την εκτέλεση μιας δυναμικής ανάλυσης με το MobSF, οι ρυθμίσεις του proxy μπορεί να είναι λανθασμένες και δεν θα μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις του proxy κάνοντας:
```
adb shell settings put global http_proxy :0
```
{% endhint %}
### Assisted Dynamic Analysis with Inspeckage
Μπορείτε να αποκτήσετε το εργαλείο από το [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
Αυτό το εργαλείο θα χρησιμοποιήσει μερικά **Hooks** για να σας ενημερώσει **τι συμβαίνει στην εφαρμογή** ενώ εκτελείτε μια **dynamic analysis**.
### [Yaazhini](https://www.vegabird.com/yaazhini/)
Αυτό είναι ένα **υπέροχο εργαλείο για να εκτελέσετε στατική ανάλυση με GUI**
![](<../../.gitbook/assets/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" deployable APK** και **ADB commands**, για να εκμεταλλευτεί ορισμένες από τις βρεθείσες ευπάθειες (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να κάνετε root τη συσκευή δοκιμής.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
* Εμφανίζει όλα τα εξαγόμενα αρχεία για εύκολη αναφορά
* Αυτόματα αποσυμπιέζει τα αρχεία APK σε μορφή Java και Smali
* Αναλύει το AndroidManifest.xml για κοινές ευπάθειες και συμπεριφορές
* Στατική ανάλυση πηγαίου κώδικα για κοινές ευπάθειες και συμπεριφορές
* Πληροφορίες συσκευής
* και άλλα
```bash
reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, που αναλύει _.apk_ αρχεία αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APK και εφαρμόζοντας μια σειρά κανόνων για να ανιχνεύσει αυτές τις ευπάθειες.
Όλοι οι κανόνες είναι κεντραρισμένοι σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή δοκιμαστής θα μπορούσε να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται.
Κατεβάστε τα τελευταία δυαδικά από τη [σελίδα λήψης](https://superanalyzer.rocks/download.html)
```
super-analyzer {apk_file}
```
### [StaCoAn](https://github.com/vincentcox/StaCoAn)
![](<../../.gitbook/assets/image (297).png>)
Το StaCoAn είναι ένα **crossplatform** εργαλείο που βοηθά προγραμματιστές, κυνηγούς bugbounty και ηθικούς χάκερ να εκτελούν [στατική ανάλυση κώδικα](https://en.wikipedia.org/wiki/Static\_program\_analysis) σε κινητές εφαρμογές.
Η έννοια είναι ότι σύρετε και αποθέτετε το αρχείο της κινητής σας εφαρμογής (ένα αρχείο .apk ή .ipa) στην εφαρμογή StaCoAn και θα δημιουργήσει μια οπτική και φορητή αναφορά για εσάς. Μπορείτε να προσαρμόσετε τις ρυθμίσεις και τις λίστες λέξεων για να αποκτήσετε μια εξατομικευμένη εμπειρία.
Κατεβάστε[ την τελευταία έκδοση](https://github.com/vincentcox/StaCoAn/releases):
```
./stacoan
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
Το AndroBugs Framework είναι ένα σύστημα ανάλυσης ευπαθειών Android που βοηθά τους προγραμματιστές ή τους χάκερ να βρουν πιθανές ευπάθειες ασφαλείας σε εφαρμογές Android.\
[Windows releases](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
```
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να ανιχνεύσει και να προειδοποιήσει τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
Η ανίχνευση πραγματοποιείται με την **στατική ανάλυση** του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως **Smali**, με τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard).
Αυτό το εργαλείο αναζητά **συνηθισμένες συμπεριφορές "κακών" εφαρμογών** όπως: Εξαγωγή τηλεφωνικών αναγνωριστικών, Παρεμβολή ροής ήχου/βίντεο, Τροποποίηση δεδομένων PIM, Εκτέλεση αυθαίρετου κώδικα...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
### [MARA Framework](https://github.com/xtiankisutsa/MARA\_Framework)
![](<../../.gitbook/assets/image (595).png>)
**MARA** είναι ένα **M**obile **A**pplication **R**everse engineering και **A**nalysis Framework. Είναι ένα εργαλείο που συγκεντρώνει κοινώς χρησιμοποιούμενα εργαλεία αντίστροφης μηχανικής και ανάλυσης εφαρμογών κινητών, για να βοηθήσει στη δοκιμή εφαρμογών κινητών ενάντια στις απειλές ασφάλειας κινητών του OWASP. Σκοπός του είναι να διευκολύνει αυτή την εργασία και να την κάνει πιο φιλική προς τους προγραμματιστές εφαρμογών κινητών και τους επαγγελματίες ασφάλειας.
Είναι ικανό να:
* Εξάγει κώδικα Java και Smali χρησιμοποιώντας διάφορα εργαλεία
* Αναλύει APKs χρησιμοποιώντας: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs\_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
* Εξάγει ιδιωτικές πληροφορίες από το APK χρησιμοποιώντας regexps.
* Αναλύει το Manifest.
* Αναλύει βρέθηκαν τομείς χρησιμοποιώντας: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) και [whatweb](https://github.com/urbanadventurer/WhatWeb)
* Αποκωδικοποιεί APK μέσω [apk-deguard.com](http://www.apk-deguard.com)
### Koodous
Χρήσιμο για την ανίχνευση κακόβουλου λογισμικού: [https://koodous.com/](https://koodous.com)
## Obfuscating/Deobfuscating code
Σημειώστε ότι ανάλογα με την υπηρεσία και τη διαμόρφωση που χρησιμοποιείτε για να αποκρύψετε τον κώδικα. Τα μυστικά μπορεί να είναι ή να μην είναι αποκρυπτογραφημένα.
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
Από [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** είναι ένα εργαλείο γραμμής εντολών ανοιχτού κώδικα που μειώνει, βελτιστοποιεί και αποκρύπτει τον κώδικα Java. Είναι ικανό να βελτιστοποιεί τον bytecode καθώς και να ανιχνεύει και να αφαιρεί μη χρησιμοποιούμενες εντολές. Το ProGuard είναι δωρεάν λογισμικό και διανέμεται υπό την άδεια GNU General Public License, έκδοση 2.
Το ProGuard διανέμεται ως μέρος του Android SDK και εκτελείται κατά την κατασκευή της εφαρμογής σε λειτουργία κυκλοφορίας.
### [DexGuard](https://www.guardsquare.com/dexguard)
Βρείτε έναν οδηγό βήμα προς βήμα για να αποκωδικοποιήσετε το apk στο [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, η λειτουργία του Dexguard ήταν:
* φορτώστε έναν πόρο ως InputStream;
* τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το αποκρυπτογραφήσετε;
* κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε λίγα λεπτά χρόνου από έναν αναλυτή;
* τροφοδοτήστε το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να αποκτήσετε ένα αρχείο DEX;
* τελικά φορτώστε το προκύπτον DEX ως Πόρο χρησιμοποιώντας τη μέθοδο `loadDex`.
### [DeGuard](http://apk-deguard.com)
**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.**
Μπορείτε να ανεβάσετε ένα αποκρυπτογραφημένο APK στην πλατφόρμα τους.
### [Simplify](https://github.com/CalebFenton/simplify)
Είναι ένα **γενικό android deobfuscator.** Το Simplify **εκτελεί εικονικά μια εφαρμογή** για να κατανοήσει τη συμπεριφορά της και στη συνέχεια **προσπαθεί να βελτιστοποιήσει τον κώδικα** ώστε να συμπεριφέρεται ταυτόχρονα αλλά να είναι πιο εύκολο για έναν άνθρωπο να κατανοήσει. Κάθε τύπος βελτιστοποίησης είναι απλός και γενικός, οπότε δεν έχει σημασία ποιος είναι ο συγκεκριμένος τύπος απόκρυψης που χρησιμοποιείται.
### [APKiD](https://github.com/rednaga/APKiD)
Το APKiD σας δίνει πληροφορίες για **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακεταριστές**, **εργαλεία απόκρυψης**, και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android.
### Manual
[Διαβάστε αυτό το tutorial για να μάθετε μερικά κόλπα σχετικά με **το πώς να αντιστρέψετε την προσαρμοσμένη απόκρυψη**](manual-deobfuscation.md)
## Labs
### [Androl4b](https://github.com/sh4hin/Androl4b)
Το AndroL4b είναι μια εικονική μηχανή ασφάλειας Android βασισμένη στο ubuntu-mate που περιλαμβάνει τη συλλογή των τελευταίων πλαισίων, tutorials και εργαστηρίων από διάφορους ειδικούς και ερευνητές ασφάλειας για αντίστροφη μηχανική και ανάλυση κακόβουλου λογισμικού.
## References
* [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
* [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Είναι μια εξαιρετική λίστα πόρων
* [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Γρήγορος οδηγός Android
* [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
* [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
* [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab\_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab\_channel=B3nacSec)
## Yet to try
* [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
* [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Hacking Insights**\
Engage with content that delves into the thrill and challenges of hacking
**Real-Time Hack News**\
Keep up-to-date with fast-paced hacking world through real-time news and insights
**Latest Announcements**\
Stay informed with the newest bug bounties launching and crucial platform updates
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}