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.
Grazie mille a @offsecjay per il suo aiuto nella creazione di questo contenuto.
Cos'è
Android Studio permette di eseguire macchine virtuali Android che puoi usare per testare APKs. Per usarle avrai bisogno di:
- Gli Android SDK tools - Download here.
- Oppure Android Studio (con Android SDK tools) - Download here.
Su Windows (nel mio caso) dopo aver installato Android Studio avevo gli SDK Tools installati in: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools
Su mac puoi scaricare gli SDK tools e averli nel PATH eseguendo:
brew tap homebrew/cask
brew install --cask android-sdk
Oppure da 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
GUI
Prepare Virtual Machine
If you installed Android Studio, you can just open the main project view and access: Tools --> AVD Manager.
.png)
Then, click on Create Virtual Device
.png)
seleziona il telefono che vuoi usare e fai clic su Next.
warning
If you need a phone with Play Store installed select one with the Play Store icon on it!
.png)
Nella vista corrente potrai selezionare e scaricare l'immagine Android che il telefono eseguirà:
.png)
Quindi, selezionala e se non è scaricata fai clic sul simbolo Download accanto al nome (adesso aspetta fino al completamento del download dell'immagine).
Una volta scaricata l'immagine, seleziona semplicemente Next
e Finish
.
La virtual machine verrà creata. Ora ogni volta che accederai all'AVD manager sarà presente.
Run Virtual Machine
In order to run it just press the 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.
First of all you need to decide which phone you want to use, in order to see the list of possible phones execute:
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 download 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 il dispositivo che vuoi 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"
Nel comando precedente ho creato una VM chiamata "AVD9" usando il dispositivo "Nexus 5X" e l'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
Eseguire 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 puoi 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 avviare 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 da riga di comando
Tuttavia ci sono molte diverse opzioni utili da riga di comando che puoi usare per avviare una macchina virtuale. Qui sotto puoi trovare 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
: Permette di indicare, separati da virgola, i server DNS per la VM.-http-proxy 192.168.1.12:8080
: Permette 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à del touch screen emulato.-writable-system
: Usa questa opzione per avere un'immagine di sistema scrivibile durante la sessione di emulazione. Dovrai inoltre 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 debugabili 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 di system image: google_apis (debuggable, permette adb root), google_apis_playstore (non rootable), aosp/default (leggera).
- Tipi di build: userdebug spesso permette
adb root
su immagini con capacità di debug. Le immagini Play Store sono build di produzione e bloccano il root. - Su host x86_64, l'emulazione full-system ARM64 non è supportata da API 28+. Per Android 11+ usa le immagini Google APIs/Play che includono la traduzione per-app ARM-to-x86 per eseguire molte app ARM-only rapidamente.
Snapshots 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
Traduzione binaria ARM→x86 (Android 11+)
Le immagini Google APIs e Play Store su Android 11+ possono tradurre i binari ARM delle app per processo mantenendo il resto del sistema nativo x86/x86_64. Questo è spesso abbastanza veloce per testare molte app che girano solo su ARM su desktop.
Consiglio: Preferisci le immagini Google APIs x86/x86_64 durante i pentests. Le immagini Play sono comode ma bloccano
adb root
; usale solo quando richiedi specificamente i Play services e accetti la mancanza di root.
Rooting a Play Store device
Se hai scaricato un dispositivo con Play Store non potrai ottenere root direttamente e otterrai questo messaggio di errore
$ adb root
adbd cannot run as root in production builds
Using rootAVD with Magisk sono riuscito ad ottenere il root (segui ad esempio this video o this one).
Installare il certificato di Burp
Consulta la pagina seguente per imparare come installare un certificato CA personalizzato:
Opzioni utili per AVD
Creare uno snapshot
Puoi usare la GUI per creare uno snapshot della VM in qualsiasi momento:
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.