AVD - Android Virtual Device

Reading time: 11 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Vielen Dank an @offsecjay für seine Hilfe bei der Erstellung dieses Inhalts.

Was ist

Android Studio ermöglicht es, Android-VMs auszuführen, die du zum Testen von APKs verwenden kannst. Um sie zu nutzen benötigst du:

Unter Windows (in meinem Fall) hatte ich nach der Installation von Android Studio die SDK Tools installiert in: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Auf macOS kannst du die SDK tools herunterladen und sie mit folgendem Befehl in den PATH aufnehmen:

bash
brew tap homebrew/cask
brew install --cask android-sdk

Oder über die Android Studio GUI, wie in https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a angegeben, die diese in ~/Library/Android/sdk/cmdline-tools/latest/bin/ und ~/Library/Android/sdk/platform-tools/ und ~/Library/Android/sdk/emulator/ installiert

Für die Java-Probleme:

java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home

GUI

Virtuelle Maschine vorbereiten

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

Then, click on Create Virtual Device

Wählen Sie das Telefon, das Sie verwenden möchten und klicken Sie auf Next.

warning

Wenn Sie ein Telefon mit installiertem Play Store benötigen, wählen Sie eines mit dem Play Store-Symbol darauf!

In der aktuellen Ansicht können Sie das Android-Image auswählen und herunterladen, das das Telefon ausführen wird:

Wählen Sie es also aus und falls es nicht heruntergeladen ist, klicken Sie auf das Download-Symbol neben dem Namen (warten Sie nun, bis das Image heruntergeladen ist).
Sobald das Image heruntergeladen ist, wählen Sie einfach Next und Finish.

Die virtuelle Maschine wird erstellt. Jetzt wird sie jedes Mal angezeigt, wenn Sie den AVD Manager aufrufen.

Virtuelle Maschine starten

Um sie zu starten, drücken Sie einfach den Start button.

Kommandozeilen-Tool

warning

Für macOS finden Sie das avdmanager-Tool in /Users/<username>/Library/Android/sdk/tools/bin/avdmanager und den emulator in /Users/<username>/Library/Android/sdk/emulator/emulator, wenn Sie sie installiert haben.

Zuerst müssen Sie entscheiden, welches Telefon Sie verwenden möchten; um die Liste der möglichen Telefone zu sehen, führen Sie aus:

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
[...]

Sobald du den Namen des Geräts, das du verwenden möchtest, festgelegt hast, musst du entscheiden, welches Android-Image du auf diesem Gerät ausführen möchtest.
Du kannst alle Optionen mit sdkmanager auflisten:

bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list

Und lade denjenigen (oder alle) herunter, die du verwenden möchtest, mit:

bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"

Sobald Sie das Android image, das Sie verwenden möchten, heruntergeladen haben, können Sie mit folgendem Befehl alle heruntergeladenen Android images auflisten:

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

In diesem Moment haben Sie das Gerät ausgewählt, das Sie verwenden möchten, und das Android image heruntergeladen, daher können Sie die virtuelle Maschine mit:

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"

Im letzten Befehl habe ich eine VM mit dem Namen "AVD9" erstellt, mit dem device "Nexus 5X" und dem Android image "system-images;android-28;google_apis;x86_64".
Jetzt können Sie die virtuellen Maschinen auflisten, die Sie erstellt haben, mit:

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

Virtuelle Maschine starten

warning

Für macOS findest du das avdmanager tool in /Users/<username>/Library/Android/sdk/tools/bin/avdmanager und den emulator in /Users/<username>/Library/Android/sdk/emulator/emulator, falls du sie installiert hast.

Wir haben bereits gesehen, wie du die erstellten virtuellen Maschinen auflisten kannst, aber du kannst sie auch mit:

bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27

Sie können einfach jede erstellte virtuelle Maschine starten mit:

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"

Oder mit fortgeschritteneren Optionen können Sie eine virtuelle Maschine wie folgt ausführen:

bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system

Befehlszeilenoptionen

Es gibt jedoch viele nützliche Befehlszeilenoptionen, die du verwenden kannst, um eine virtuelle Maschine zu starten. Unten findest du einige interessante Optionen, du kannst aber find a complete list here

Boot

  • -snapshot name : Start VM snapshot
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : List all the snapshots recorded

Netzwerk

  • -dns-server 192.0.2.0, 192.0.2.255 : Ermöglicht es, die DNS-Server kommasepariert an die VM anzugeben.
  • -http-proxy 192.168.1.12:8080 : Ermöglicht es, einen HTTP-Proxy anzugeben (sehr nützlich, um den Traffic mit Burp zu erfassen)
  • Wenn die Proxy-Einstellungen aus irgendeinem Grund nicht funktionieren, versuche, sie intern zu konfigurieren oder eine Anwendung wie "Super Proxy" oder "ProxyDroid" zu verwenden.
  • -netdelay 200 : Setzt die Netzwerklatenz-Emulation in Millisekunden.
  • -port 5556 : Setzt die TCP-Portnummer, die für die Konsole und adb verwendet wird.
  • -ports 5556,5559 : Setzt die TCP-Ports, die für die Konsole und adb verwendet werden.
  • -tcpdump /path/dumpfile.cap : Erfasst sämtlichen Traffic in einer Datei

System

  • -selinux {disabled|permissive} : Setzt das Security-Enhanced Linux Security-Modul auf disabled oder permissive Mode unter Linux.
  • -timezone Europe/Paris : Setzt die Zeitzone für das virtuelle Gerät
  • -screen {touch(default)|multi-touch|o-touch} : Setzt den emulierten Touchscreen-Modus.
  • -writable-system : Verwende diese Option, um ein beschreibbares System-Image während der Emulation zu haben. Du musst außerdem adb root; adb remount ausführen. Das ist sehr nützlich, um ein neues Zertifikat im System zu installieren.

Linux CLI setup (SDK/AVD quickstart)

Die offiziellen CLI-Tools machen es einfach, schnelle, debugbare Emulatoren ohne Android Studio zu erstellen.

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

Hinweise

  • System-Image-Varianten: google_apis (debuggable, erlaubt adb root), google_apis_playstore (nicht rootbar), aosp/default (leichtgewichtig).
  • Build-Typen: userdebug erlaubt oft adb root auf debug-fähigen Images. Play Store-Images sind Produktions-Builds und blockieren Root-Zugriff.
  • Auf x86_64-Hosts wird die Full-System-ARM64-Emulation ab API 28+ nicht unterstützt. Für Android 11+ verwende Google APIs/Play-Images, die eine per-App ARM-zu-x86-Übersetzung bieten, um viele ARM-only Apps schnell auszuführen.

Snapshots von der 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 Binärübersetzung (Android 11+)

Google APIs und Play Store images auf Android 11+ können ARM-App-Binaries pro Prozess übersetzen, während der Rest des Systems nativ x86/x86_64 bleibt. Das ist oft schnell genug, um viele ARM-only Apps auf dem Desktop zu testen.

Tipp: Bevorzuge Google APIs x86/x86_64 images während pentests. Play images sind praktisch, blockieren aber adb root; verwende sie nur, wenn du speziell Play services benötigst und das Fehlen von root akzeptierst.

Rooting eines Play Store-Geräts

Wenn du ein Gerät mit Play Store heruntergeladen hast, kannst du nicht direkt root erhalten und bekommst diese Fehlermeldung

$ adb root
adbd cannot run as root in production builds

Using rootAVD with Magisk I was able to root it (follow for example this video or this one).

Burp-Zertifikat installieren

Siehe die folgende Seite, um zu lernen, wie man ein benutzerdefiniertes CA-Zertifikat installiert:

Install Burp Certificate

Nützliche AVD-Optionen

Snapshot erstellen

Du kannst die GUI verwenden, um jederzeit einen Snapshot der VM zu erstellen:

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks