AVD - Android Virtual Device

Reading time: 11 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

Ευχαριστώ πολύ τον @offsecjay για τη βοήθειά του κατά τη δημιουργία αυτού του περιεχομένου.

Τι είναι

Android Studio επιτρέπει να τρέχετε εικονικές συσκευές Android που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε APKs. Για να τις χρησιμοποιήσετε θα χρειαστείτε:

Σε Windows (στην περίπτωσή μου) μετά την εγκατάσταση του Android Studio τα SDK Tools ήταν εγκατεστημένα στο: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Σε mac μπορείτε να κατεβάσετε τα SDK tools και να τα έχετε στο 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 το οποίο θα τα εγκαταστήσει σε ~/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

Προετοιμασία Εικονικής Μηχανής

If you installed Android Studio, you can just open the main project view and access: Tools --> AVD Manager.

Then, click on Create Virtual Device

select the phone you want to use and click on Next.

warning

If you need a phone with Play Store installed select one with the Play Store icon on it!

Στην τρέχουσα προβολή θα μπορείτε να select and download the Android image που θα τρέχει το τηλέφωνο:

Έτσι, επιλέξτε το και αν δεν είναι κατεβασμένο κάντε κλικ στο σύμβολο Download δίπλα στο όνομα (now wait until the image is downloaded).
Μόλις η εικόνα κατέβει, απλά επιλέξτε Next και Finish.

Η εικονική μηχανή θα δημιουργηθεί. Τώρα every time that you access AVD manager it will be present.

Run Virtual Machine

Για να την run πατήστε απλά το Start button.

Command Line tool

warning

For macOS you can find the avdmanager tool in /Users/<username>/Library/Android/sdk/tools/bin/avdmanager and the emulator in /Users/<username>/Library/Android/sdk/emulator/emulator if you have them installed.

Πρώτα απ' όλα πρέπει να decide which phone you want to use, για να δείτε τη λίστα με τα δυνατά τηλέφωνα εκτελέστε:

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 image, οπότε μπορείς να δημιουργήσεις την εικονική μηχανή χρησιμοποιώντας:

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

Εκτέλεση Εικονικής Μηχανής

warning

Για macOS μπορείτε να βρείτε το εργαλείο avdmanager στο /Users/<username>/Library/Android/sdk/tools/bin/avdmanager και το emulator στο /Users/<username>/Library/Android/sdk/emulator/emulator αν τα έχετε εγκαταστήσει.

Έχουμε ήδη δει πώς μπορείτε να απαριθμήσετε τις δημιουργημένες εικονικές μηχανές, αλλά μπορείτε επίσης να τις απαριθμήσετε χρησιμοποιώντας:

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

Επιλογές γραμμής εντολών

Ωστόσο υπάρχουν πολλές διαφορετικές χρήσιμες επιλογές γραμμής εντολών που μπορείτε να χρησιμοποιήσετε για να ξεκινήσετε μια εικονική μηχανή. Παρακάτω μπορείτε να βρείτε μερικές ενδιαφέρουσες επιλογές αλλά μπορείτε find a complete list here

Εκκίνηση

  • -snapshot name : Εκκίνηση snapshot της VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Εμφανίζει όλα τα καταγεγραμμένα snapshots

Δίκτυο

  • -dns-server 192.0.2.0, 192.0.2.255 : Επιτρέπει να υποδείξετε τους DNS servers στην VM, χωρισμένους με κόμμα.
  • -http-proxy 192.168.1.12:8080 : Επιτρέπει να ορίσετε έναν HTTP proxy για χρήση (πολύ χρήσιμο για την καταγραφή της κυκλοφορίας με χρήση του Burp)
  • Εάν οι ρυθμίσεις proxy δεν λειτουργούν για κάποιο λόγο, δοκιμάστε να τις ρυθμίσετε εσωτερικά ή χρησιμοποιώντας μια εφαρμογή όπως "Super Proxy" ή "ProxyDroid".
  • -netdelay 200 : Ρυθμίζει την προσομοίωση καθυστέρησης δικτύου σε milliseconds.
  • -port 5556 : Ορίζει τον αριθμό θύρας TCP που χρησιμοποιείται για το console και το adb.
  • -ports 5556,5559 : Ορίζει τις TCP θύρες που χρησιμοποιούνται για το console και το adb.
  • -tcpdump /path/dumpfile.cap : Καταγράφει όλη την κίνηση σε ένα αρχείο

Σύστημα

  • -selinux {disabled|permissive} : Θέτει το Security-Enhanced Linux security module είτε σε disabled είτε σε permissive mode σε ένα λειτουργικό σύστημα Linux.
  • -timezone Europe/Paris : Ορίζει τη ζώνη ώρας για τη virtual συσκευή
  • -screen {touch(default)|multi-touch|o-touch} : Ορίζει τη λειτουργία προσομοιωμένης οθόνης αφής.
  • -writable-system : Χρησιμοποιήστε αυτήν την επιλογή για να έχετε ένα writable system image κατά τη διάρκεια της συνεδρίας emulation. Θα χρειαστεί επίσης να τρέξετε adb root; adb remount. Αυτό είναι πολύ χρήσιμο για να εγκαταστήσετε ένα νέο πιστοποιητικό στο σύστημα.

Εγκατάσταση Linux CLI (SDK/AVD quickstart)

Τα επίσημα εργαλεία CLI διευκολύνουν τη δημιουργία γρήγορων, debuggable emulators χωρίς Android Studio.

bash
# Directory layout
mkdir -p ~/Android/cmdline-tools/latest

# Download commandline tools (Linux)
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip
unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest
rm /tmp/cmdline-tools.zip

# Env vars (add to ~/.bashrc or ~/.zshrc)
export ANDROID_HOME=$HOME/Android
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH

# Install core SDK components
sdkmanager --install "platform-tools" "emulator"

# Install a debuggable x86_64 system image (Android 11 / API 30)
sdkmanager --install "system-images;android-30;google_apis;x86_64"

# Create an AVD and run it with a writable /system & snapshot name
avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel"
emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap

# Verify root (debuggable images allow `adb root`)
adb root
adb shell whoami  # expect: root

Σημειώσεις

  • Παραλλαγές system image: google_apis (debuggable, επιτρέπει adb root), google_apis_playstore (όχι rootable), aosp/default (ελαφρύ).
  • Τύποι build: userdebug συχνά επιτρέπει adb root σε debug-capable images. Play Store images είναι production builds και μπλοκάρουν το root.
  • Σε hosts x86_64, η full-system ARM64 emulation δεν υποστηρίζεται από API 28+. Για Android 11+ χρησιμοποιήστε Google APIs/Play images που περιλαμβάνουν per-app ARM-to-x86 translation για να τρέξετε πολλές ARM-only apps γρήγορα.

Στιγμιότυπα από CLI

bash
# Save a clean snapshot from the running emulator
adb -s emulator-5554 emu avd snapshot save my_clean_setup

# Boot from a named snapshot (if it exists)
emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup

ARM→x86 μετάφραση δυαδικών (Android 11+)

Τα Google APIs και οι εικόνες Play Store στο Android 11+ μπορούν να μεταφράσουν ARM app binaries ανά διαδικασία, διατηρώντας το υπόλοιπο σύστημα native x86/x86_64. Αυτό είναι συχνά αρκετά γρήγορο για να δοκιμάσετε πολλές εφαρμογές που τρέχουν μόνο σε ARM σε desktop.

Συμβουλή: Προτιμήστε εικόνες Google APIs x86/x86_64 κατά τη διάρκεια pentests. Οι εικόνες Play είναι βολικές αλλά εμποδίζουν το adb root; χρησιμοποιήστε τις μόνο όταν χρειάζεστε συγκεκριμένα Play services και αποδέχεστε την έλλειψη root.

Rooting μιας συσκευής με Play Store

Αν κατεβάσατε μια συσκευή με Play Store δεν θα μπορέσετε να πάρετε root απευθείας, και θα λάβετε αυτό το μήνυμα σφάλματος

$ adb root
adbd cannot run as root in production builds

Χρησιμοποιώντας rootAVD με Magisk κατάφερα να το κάνω root (ακολούθησε για παράδειγμα αυτό το βίντεο ή αυτό).

Εγκατάσταση πιστοποιητικού Burp

Δες την παρακάτω σελίδα για να μάθεις πώς να εγκαταστήσεις ένα custom CA cert:

Install Burp Certificate

Χρήσιμες επιλογές AVD

Δημιούργησε ένα snapshot

Μπορείς να χρησιμοποιήσεις το GUI για να πάρεις ένα snapshot της VM οποιαδήποτε στιγμή:

Αναφορές

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