AVD - Android Virtual Device
Reading time: 10 minutes
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Un grazie enorme a @offsecjay per il suo aiuto nella creazione di questo contenuto.
Che cos'è
Android Studio permette di eseguire macchine virtuali Android che puoi usare per testare APK. Per usarle avrai bisogno di:
- Gli Android SDK tools - Download here.
- Oppure Android Studio (con Android SDK tools) - Download here.
In Windows (nel mio caso), dopo aver installato Android Studio, ho trovato gli SDK Tools installati in: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools
Su mac puoi scaricare gli SDK tools e aggiungerli al PATH eseguendo:
brew tap homebrew/cask
brew install --cask android-sdk
Oppure tramite Android Studio GUI come indicato in https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a che li installerà in ~/Library/Android/sdk/cmdline-tools/latest/bin/ e ~/Library/Android/sdk/platform-tools/ e ~/Library/Android/sdk/emulator/
Per i problemi Java:
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
Interfaccia grafica (GUI)
Preparare la macchina virtuale
Se hai installato Android Studio, puoi semplicemente aprire la vista principale del progetto e accedere: Tools --> AVD Manager.
.png)
Poi, clicca su Create Virtual Device
.png)
seleziona il telefono che vuoi usare e clicca su Next.
warning
Se hai bisogno di un telefono con Play Store installato seleziona uno con l'icona di Play Store!
Nella vista corrente potrai selezionare e scaricare l'immagine Android che il telefono andrà a eseguire:
.png)
Quindi, selezionala e, se non è scaricata, clicca sul simbolo Download accanto al nome (attendi ora finché l'immagine non è scaricata).
Una volta che l'immagine è stata scaricata, seleziona semplicemente Next e Finish.
La macchina virtuale verrà creata. Ora ogni volta che accederai all'AVD Manager sarà presente.
Eseguire la macchina virtuale
Per eseguirla premi semplicemente il Start button.
.png)
Strumento da riga di comando
warning
Per macOS puoi trovare lo strumento avdmanager in /Users/<username>/Library/Android/sdk/tools/bin/avdmanager e l'emulator in /Users/<username>/Library/Android/sdk/emulator/emulator se li hai installati.
Prima di tutto devi decidere quale telefono vuoi usare, per vedere la lista dei telefoni possibili esegui:
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
[...]
Una volta deciso il nome del dispositivo che vuoi usare, devi decidere quale immagine Android vuoi eseguire su questo dispositivo.
Puoi elencare tutte le opzioni usando sdkmanager:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
E scarica quello (o tutti quelli) che vuoi usare con:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
Una volta scaricata l'immagine Android che vuoi usare, puoi elencare tutte le immagini Android scaricate con:
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
A questo punto hai deciso quale dispositivo utilizzare e hai scaricato l'immagine Android, quindi puoi creare la macchina virtuale usando:
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"
Nell'ultimo comando ho creato una VM chiamata "AVD9" utilizzando il dispositivo "Nexus 5X" e la immagine Android "system-images;android-28;google_apis;x86_64".
Ora puoi elencare le macchine virtuali che hai creato con:
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
Avvia la macchina virtuale
warning
Per macOS puoi trovare lo strumento avdmanager in /Users/<username>/Library/Android/sdk/tools/bin/avdmanager e l'emulator in /Users/<username>/Library/Android/sdk/emulator/emulator se li hai installati.
Abbiamo già visto come elencare le macchine virtuali create, ma puoi anche elencarle usando:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
Puoi semplicemente eseguire qualsiasi macchina virtuale creata usando:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
Oppure, usando opzioni più avanzate, puoi eseguire una macchina virtuale come:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
Opzioni della riga di comando
Tuttavia esistono molte opzioni utili da riga di comando che puoi usare per avviare una macchina virtuale. Qui sotto trovi alcune opzioni interessanti, ma puoi find a complete list here
Avvio
-snapshot name: Avvia uno snapshot della VM-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img: Elenca tutti gli snapshot registrati
Rete
-dns-server 192.0.2.0, 192.0.2.255: Consente di indicare, separati da virgola, i server DNS per la VM.-http-proxy 192.168.1.12:8080: Consente di indicare un proxy HTTP da usare (molto utile per catturare il traffico usando Burp)- Se le impostazioni del proxy non funzionano per qualche motivo, prova a configurarle internamente o usando un'applicazione come "Super Proxy" o "ProxyDroid".
-netdelay 200: Imposta l'emulazione della latenza di rete in millisecondi.-port 5556: Imposta il numero di porta TCP usato per la console e adb.-ports 5556,5559: Imposta le porte TCP usate per la console e adb.-tcpdump /path/dumpfile.cap: Cattura tutto il traffico in un file
Sistema
-selinux {disabled|permissive}: Imposta il modulo di sicurezza Security-Enhanced Linux in modalità disabled o permissive su un sistema operativo Linux.-timezone Europe/Paris: Imposta il fuso orario per il dispositivo virtuale-screen {touch(default)|multi-touch|o-touch}: Imposta la modalità touch screen emulata.-writable-system: Usa questa opzione per avere un'immagine di sistema scrivibile durante la sessione di emulazione. Dovrai anche eseguireadb root; adb remount. Questo è molto utile per installare un nuovo certificato nel sistema.
Configurazione CLI Linux (SDK/AVD quickstart)
Gli strumenti CLI ufficiali rendono facile creare emulatori veloci e facilmente debuggabili senza Android Studio.
# 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
Note
- Varianti delle immagini di sistema: google_apis (debuggable, permette adb root), google_apis_playstore (non rootabile), aosp/default (leggero).
- Tipi di build: userdebug spesso permette
adb rootsu immagini abilitate per il debug. Le immagini Play Store sono build di produzione e bloccano il root. - Su host x86_64, l'emulazione ARM64 full-system non è supportata da API 28+. Per Android 11+ usa immagini Google APIs/Play che includono la traduzione per-app ARM-to-x86 per eseguire molte app solo ARM rapidamente.
Snapshot dalla CLI
# 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 traduzione binaria (Android 11+)
Le immagini Google APIs e Play Store su Android 11+ possono tradurre i binari delle app ARM per processo mantenendo il resto del sistema nativo x86/x86_64. Questo è spesso abbastanza veloce per testare molte app solo ARM su desktop.
Suggerimento: Preferisci le immagini Google APIs x86/x86_64 durante pentests. Le immagini Play sono comode ma bloccano
adb root; usale solo quando richiedi specificamente Play services e accetti la mancanza di root.
Rooting a Play Store device
Se hai scaricato un dispositivo con Play Store non sarai in grado di ottenere root direttamente, e riceverai questo messaggio di errore
$ adb root
adbd cannot run as root in production builds
Using rootAVD with Magisk sono riuscito a ottenere i permessi di root (segui ad esempio this video o this one).
Installare il certificato Burp
Consulta la seguente pagina per imparare come installare un certificato CA personalizzato:
Opzioni AVD utili
Creare uno snapshot
Puoi usare la GUI per creare uno snapshot della VM in qualsiasi momento:
.png)
Riferimenti
- Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa
- Android Emulator command line
- Run ARM apps on the Android Emulator (x86 translation)
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks