AVD - Appareil virtuel Android

Reading time: 11 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Merci beaucoup à @offsecjay pour son aide lors de la création de ce contenu.

Qu'est-ce que c'est

Android Studio permet d'exécuter des machines virtuelles Android que vous pouvez utiliser pour tester des APKs. Pour pouvoir les utiliser vous aurez besoin de :

Sur Windows (dans mon cas) aprÚs avoir installé Android Studio j'avais les SDK Tools installés dans: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Sur mac vous pouvez télécharger les SDK tools et les avoir dans le PATH en exécutant:

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

Ou depuis Android Studio GUI comme indiqué dans https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a qui les installera dans ~/Library/Android/sdk/cmdline-tools/latest/bin/ et ~/Library/Android/sdk/platform-tools/ et ~/Library/Android/sdk/emulator/

Pour les problĂšmes Java :

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

Interface graphique

Préparer la machine virtuelle

Si vous avez installé Android Studio, ouvrez simplement la vue principale du projet et accédez à : Tools --> AVD Manager.

Ensuite, cliquez sur Create Virtual Device

sélectionnez le téléphone que vous voulez utiliser et cliquez sur Next.

warning

Si vous avez besoin d'un téléphone avec Play Store installé, sélectionnez-en un avec l'icÎne Play Store !

Dans cette vue, vous pourrez sélectionner et télécharger l'image Android que le téléphone va exécuter :

Donc, sélectionnez-la et si elle n'est pas téléchargée cliquez sur le symbole Download à cÎté du nom (attendez maintenant que l'image soit téléchargée).
Une fois l'image téléchargée, sélectionnez simplement Next et Finish.

La machine virtuelle sera créée. Maintenant à chaque fois que vous ouvrirez AVD Manager elle sera présente.

Lancer la machine virtuelle

Pour la lancer, appuyez simplement sur le Start button.

Outil en ligne de commande

warning

Pour macOS, vous pouvez trouver l'outil avdmanager dans /Users/<username>/Library/Android/sdk/tools/bin/avdmanager et l'emulator dans /Users/<username>/Library/Android/sdk/emulator/emulator si vous les avez installés.

Tout d'abord, vous devez décider quel téléphone vous voulez utiliser, pour afficher la liste des téléphones possibles exécutez:

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

Une fois que vous avez choisi le nom de l'appareil que vous voulez utiliser, vous devez déterminer quelle image Android vous souhaitez exécuter sur cet appareil.
Vous pouvez lister toutes les options en utilisant sdkmanager:

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

Et téléchargez celui (ou tous) que vous souhaitez utiliser avec :

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

Une fois que vous avez téléchargé l'image Android que vous souhaitez utiliser, vous pouvez lister toutes les images Android téléchargées avec :

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

À ce stade, vous avez choisi l'appareil que vous souhaitez utiliser et vous avez tĂ©lĂ©chargĂ© l'image Android, donc vous pouvez crĂ©er la machine virtuelle en utilisant :

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"

Dans la derniÚre commande j'ai créé une VM nommée "AVD9" en utilisant le device "Nexus 5X" et l'image Android "system-images;android-28;google_apis;x86_64".
Maintenant vous pouvez lister les machines virtuelles que vous avez créées avec :

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

Lancer la machine virtuelle

warning

Pour macOS vous pouvez trouver l'outil avdmanager dans /Users/<username>/Library/Android/sdk/tools/bin/avdmanager et l'emulator dans /Users/<username>/Library/Android/sdk/emulator/emulator si vous les avez installés.

Nous avons déjà vu comment lister les machines virtuelles créées, mais vous pouvez aussi les lister en utilisant:

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

Vous pouvez simplement exécuter n'importe quelle machine virtuelle créée en utilisant :

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"

Ou en utilisant des options plus avancées, vous pouvez exécuter une machine virtuelle comme :

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

Options de ligne de commande

Cependant il existe de nombreuses options utiles en ligne de commande que vous pouvez utiliser pour lancer une machine virtuelle. Vous trouverez ci-dessous quelques options intéressantes mais vous pouvez find a complete list here

Démarrage

  • -snapshot name : DĂ©marrer un snapshot de la VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Lister tous les snapshots enregistrĂ©s

Réseau

  • -dns-server 192.0.2.0, 192.0.2.255 : Permet d'indiquer, sĂ©parĂ©s par des virgules, les serveurs DNS pour la VM.
  • -http-proxy 192.168.1.12:8080 : Permet d'indiquer un proxy HTTP Ă  utiliser (trĂšs utile pour capturer le trafic avec Burp)
  • Si les paramĂštres du proxy ne fonctionnent pas pour une raison quelconque, essayez de les configurer en interne ou en utilisant une application comme "Super Proxy" ou "ProxyDroid".
  • -netdelay 200 : DĂ©finit la latence rĂ©seau simulĂ©e en millisecondes.
  • -port 5556 : DĂ©finit le numĂ©ro de port TCP utilisĂ© pour la console et adb.
  • -ports 5556,5559 : DĂ©finit les ports TCP utilisĂ©s pour la console et adb.
  • -tcpdump /path/dumpfile.cap : Capture tout le trafic dans un fichier

SystĂšme

  • -selinux {disabled|permissive} : DĂ©finit le module de sĂ©curitĂ© Security-Enhanced Linux en mode disabled ou permissive sur un systĂšme Linux.
  • -timezone Europe/Paris : DĂ©finit le fuseau horaire pour le pĂ©riphĂ©rique virtuel
  • -screen {touch(default)|multi-touch|o-touch} : DĂ©finit le mode d'Ă©cran tactile Ă©mulĂ©.
  • -writable-system : Utilisez cette option pour disposer d'une image systĂšme en Ă©criture durant votre session d'Ă©mulation. Vous devrez aussi exĂ©cuter adb root; adb remount. Ceci est trĂšs utile pour installer un nouveau certificat dans le systĂšme.

Linux CLI setup (SDK/AVD quickstart)

Les outils CLI officiels facilitent la création d'émulateurs rapides et débogables sans 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

Notes

  • Variantes d'images systĂšme: google_apis (dĂ©boggable, permet adb root), google_apis_playstore (non rootable), aosp/default (lĂ©ger).
  • Types de build: userdebug permet souvent adb root sur les images compatibles debug. Les images Play Store sont des builds de production et bloquent l'accĂšs root.
  • Sur les hĂŽtes x86_64, l'Ă©mulation systĂšme complĂšte ARM64 n'est pas prise en charge Ă  partir de API 28+. Pour Android 11+ utilisez les images Google APIs/Play qui incluent une traduction ARM-vers-x86 par application pour exĂ©cuter rapidement de nombreuses apps rĂ©servĂ©es Ă  ARM.

Instantanés depuis la 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

Traduction binaire ARM→x86 (Android 11+)

Les images Google APIs et Play Store sur Android 11+ peuvent traduire les binaires d'applications ARM par processus tout en conservant le reste du systÚme natif x86/x86_64. C'est souvent suffisamment rapide pour tester de nombreuses applications réservées à ARM sur un desktop.

Astuce : Préférez les images Google APIs x86/x86_64 pendant les pentests. Les images Play sont pratiques mais bloquent adb root ; ne les utilisez que lorsque vous avez spécifiquement besoin des Play services et acceptez l'absence de root.

Rooting a Play Store device

Si vous avez téléchargé un appareil avec Play Store, vous ne pourrez pas obtenir le root directement, et vous obtiendrez ce message d'erreur

$ adb root
adbd cannot run as root in production builds

En utilisant rootAVD avec Magisk j'ai pu obtenir l'accĂšs root (suivez par exemple this video ou this one).

Installer le certificat Burp

Consultez la page suivante pour apprendre comment installer un certificat CA personnalisé :

Install Burp Certificate

Options utiles pour l'AVD

Prendre un snapshot

Vous pouvez utiliser la GUI pour prendre un snapshot de la VM Ă  tout moment :

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks