hacktricks/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md

207 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AVD - Android Virtual Device
{{#include ../../banners/hacktricks-training.md}}
Ευχαριστώ πολύ τον [**@offsecjay**](https://twitter.com/offsecjay) για τη βοήθειά του κατά τη δημιουργία αυτού του περιεχομένου.
## Τι είναι
Το Android Studio επιτρέπει να **τρέχετε εικονικές μηχανές Android που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε APKs**. Για να τις χρησιμοποιήσετε θα χρειαστείτε:
- Τα **εργαλεία Android SDK** - [Κατεβάστε εδώ](https://developer.android.com/studio/releases/sdk-tools).
- Ή **Android Studio** (με εργαλεία Android SDK) - [Κατεβάστε εδώ](https://developer.android.com/studio).
Στα Windows (στην περίπτωσή μου) **μετά την εγκατάσταση του Android Studio** είχα τα **εργαλεία SDK εγκατεστημένα στο**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
Στο mac μπορείτε να **κατεβάσετε τα εργαλεία SDK** και να τα έχετε στο PATH τρέχοντας:
```bash
brew tap homebrew/cask
brew install --cask android-sdk
```
Ή από το **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) που θα τα εγκαταστήσει στο `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/`
Για τα προβλήματα με την Java:
```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
```
## GUI
### Prepare Virtual Machine
Αν έχετε εγκαταστήσει το Android Studio, μπορείτε απλά να ανοίξετε την κύρια προβολή του έργου και να αποκτήσετε πρόσβαση: _**Tools**_ --> _**AVD Manager.**_
<div align="center" data-full-width="false">
<figure><img src="../../images/image (1142).png" alt="" width="293"><figcaption></figcaption></figure>
</div>
Στη συνέχεια, κάντε κλικ στο _**Create Virtual Device**_
<figure><img src="../../images/image (1143).png" alt="" width="188"><figcaption></figcaption></figure>
_**επιλέξτε** το τηλέφωνο που θέλετε να χρησιμοποιήσετε_ και κάντε κλικ στο _**Next.**_
> [!WARNING]
> Αν χρειάζεστε ένα τηλέφωνο με εγκατεστημένο το Play Store, επιλέξτε ένα με το εικονίδιο του Play Store πάνω του!
>
> <img src="../../images/image (1144).png" alt="" data-size="original">
Στην τρέχουσα προβολή θα μπορείτε να **επιλέξετε και να κατεβάσετε την εικόνα Android** που θα τρέξει το τηλέφωνο:
<figure><img src="../../images/image (1145).png" alt="" width="375"><figcaption></figcaption></figure>
Έτσι, επιλέξτε το και αν δεν έχει κατέβει, κάντε κλικ στο σύμβολο _**Download**_ δίπλα στο όνομα (**τώρα περιμένετε μέχρι να κατέβει η εικόνα).**\
Μόλις η εικόνα κατέβει, απλά επιλέξτε **`Next`** και **`Finish`**.
Η εικονική μηχανή θα δημιουργηθεί. Τώρα **κάθε φορά που αποκτάτε πρόσβαση στον AVD manager, θα είναι παρούσα**.
### Run Virtual Machine
Για να **τρέξετε** την εικονική μηχανή, απλά πατήστε το _**Start button**_.
![](<../../images/image (518).png>)
## Command Line tool
Πρώτα απ' όλα, πρέπει να **αποφασίσετε ποιο τηλέφωνο θέλετε να χρησιμοποιήσετε**, για να δείτε τη λίστα των πιθανών τηλεφώνων εκτελέστε:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device
d: 0 or "automotive_1024p_landscape"
Name: Automotive (1024p landscape)
OEM : Google
Tag : android-automotive-playstore
---------
id: 1 or "Galaxy Nexus"
Name: Galaxy Nexus
OEM : Google
---------
id: 2 or "desktop_large"
Name: Large Desktop
OEM : Google
Tag : android-desktop
---------
id: 3 or "desktop_medium"
Name: Medium Desktop
OEM : Google
Tag : android-desktop
---------
id: 4 or "Nexus 10"
Name: Nexus 10
OEM : Google
[...]
```
Αφού αποφασίσετε το όνομα της συσκευής που θέλετε να χρησιμοποιήσετε, πρέπει να **αποφασίσετε ποια εικόνα Android θέλετε να εκτελέσετε σε αυτή τη συσκευή.**\
Μπορείτε να καταγράψετε όλες τις επιλογές χρησιμοποιώντας `sdkmanager`:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
Και **κατεβάστε** αυτό (ή όλα) που θέλετε να χρησιμοποιήσετε με:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
Αφού έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **καταγράψετε όλες τις κατεβασμένες εικόνες Android** με:
```
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target
----------
id: 1 or "android-28"
Name: Android API 28
Type: Platform
API level: 28
Revision: 6
----------
id: 2 or "android-29"
Name: Android API 29
Type: Platform
API level: 29
Revision: 4
```
Αυτή τη στιγμή έχετε αποφασίσει τη συσκευή που θέλετε να χρησιμοποιήσετε και έχετε κατεβάσει την εικόνα Android, οπότε **μπορείτε να δημιουργήσετε την εικονική μηχανή χρησιμοποιώντας**:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X"
```
Στην τελευταία εντολή **δημιούργησα μια VM με το όνομα** "_AVD9_" χρησιμοποιώντας τη ** συσκευή** "_Nexus 5X_" και την **εικόνα Android** "_system-images;android-28;google_apis;x86_64_".\
Τώρα μπορείτε να **καταγράψετε τις εικονικές μηχανές** που έχετε δημιουργήσει με:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd
Name: AVD9
Device: Nexus 5X (Google)
Path: C:\Users\cpolo\.android\avd\AVD9.avd
Target: Google APIs (Google Inc.)
Based on: Android API 28 Tag/ABI: google_apis/x86_64
The following Android Virtual Devices could not be loaded:
Name: Pixel_2_API_27
Path: C:\Users\cpolo\.android\avd\Pixel_2_API_27_1.avd
Error: Google pixel_2 no longer exists as a device
```
### Εκτέλεση Εικονικής Μηχανής
Έχουμε ήδη δει πώς μπορείτε να καταγράψετε τις δημιουργημένες εικονικές μηχανές, αλλά **μπορείτε επίσης να τις καταγράψετε χρησιμοποιώντας**:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```
Μπορείτε απλά να **εκτελέσετε οποιαδήποτε εικονική μηχανή έχει δημιουργηθεί** χρησιμοποιώντας:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
```
Ή χρησιμοποιώντας πιο προηγμένες επιλογές μπορείτε να εκτελέσετε μια εικονική μηχανή όπως:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
### Επιλογές γραμμής εντολών
Ωστόσο, υπάρχουν **πολλές διαφορετικές χρήσιμες επιλογές γραμμής εντολών** που μπορείτε να χρησιμοποιήσετε για να ξεκινήσετε μια εικονική μηχανή. Παρακάτω μπορείτε να βρείτε μερικές ενδιαφέρουσες επιλογές αλλά μπορείτε [**να βρείτε μια πλήρη λίστα εδώ**](https://developer.android.com/studio/run/emulator-commandline)
**Εκκίνηση**
- `-snapshot name` : Ξεκινήστε το στιγμιότυπο VM
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Λίστα με όλα τα καταγεγραμμένα στιγμιότυπα
**Δίκτυο**
- `-dns-server 192.0.2.0, 192.0.2.255` : Επιτρέπει να υποδείξετε τους διακομιστές DNS χωρισμένους με κόμμα στη VM.
- **`-http-proxy 192.168.1.12:8080`** : Επιτρέπει να υποδείξετε έναν HTTP proxy προς χρήση (πολύ χρήσιμο για την καταγραφή της κίνησης χρησιμοποιώντας το Burp)
- `-port 5556` : Ορίστε τον αριθμό θύρας TCP που χρησιμοποιείται για την κονσόλα και το adb.
- `-ports 5556,5559` : Ορίστε τις θύρες TCP που χρησιμοποιούνται για την κονσόλα και το adb.
- **`-tcpdump /path/dumpfile.cap`** : Καταγράψτε όλη την κίνηση σε ένα αρχείο
**Σύστημα**
- `-selinux {disabled|permissive}` : Ορίστε το module ασφαλείας Security-Enhanced Linux σε κατάσταση είτε απενεργοποιημένη είτε επιτρεπτική σε ένα λειτουργικό σύστημα Linux.
- `-timezone Europe/Paris` : Ορίστε τη ζώνη ώρας για τη εικονική συσκευή
- `-screen {touch(default)|multi-touch|o-touch}` : Ορίστε τη λειτουργία οθόνης αφής που προσομοιώνεται.
- **`-writable-system`** : Χρησιμοποιήστε αυτή την επιλογή για να έχετε μια εγγράψιμη εικόνα συστήματος κατά τη διάρκεια της συνεδρίας προσομοίωσης σας. Θα χρειαστεί επίσης να εκτελέσετε `adb root; adb remount`. Αυτό είναι πολύ χρήσιμο για την εγκατάσταση ενός νέου πιστοποιητικού στο σύστημα.
## Rooting μιας συσκευής Play Store
Εάν κατεβάσατε μια συσκευή με Play Store, δεν θα μπορείτε να αποκτήσετε root άμεσα, και θα λάβετε αυτό το μήνυμα σφάλματος
```
$ adb root
adbd cannot run as root in production builds
```
Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το ριζώσω (ακολουθήστε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό εδώ**](https://www.youtube.com/watch?v=qQicUW0svB8)).
## Εγκατάσταση Πιστοποιητικού Burp
Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να εγκαταστήσετε ένα προσαρμοσμένο πιστοποιητικό CA:
{{#ref}}
install-burp-certificate.md
{{#endref}}
## Ωραίες Επιλογές AVD
### Λάβετε μια Στιγμιότυπη Εικόνα
Μπορείτε **να χρησιμοποιήσετε το GUI** για να λάβετε μια στιγμιότυπη εικόνα της VM οποιαδήποτε στιγμή:
![](<../../images/image (234).png>)
{{#include ../../banners/hacktricks-training.md}}