AVD - Android Virtual Device

Reading time: 10 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Veliko hvala @offsecjay na pomoći pri kreiranju ovog sadržaja.

Šta je

Android Studio omogućava pokretanje virtuelnih Android mašina koje možete koristiti za testiranje APK-ova. Da biste ih koristili, biće vam potrebno:

Na Windows-u (u mom slučaju) nakon instalacije Android Studio-a imao sam SDK Tools instalirane u: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Na mac-u možete preuzeti SDK tools i imati ih u PATH pokretanjem:

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

Ili iz Android Studio GUI kako je navedeno u https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a što će ih instalirati u ~/Library/Android/sdk/cmdline-tools/latest/bin/ i ~/Library/Android/sdk/platform-tools/ i ~/Library/Android/sdk/emulator/

Za probleme sa Javom:

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

GUI

Priprema virtuelne mašine

Ako ste instalirali Android Studio, možete samo otvoriti glavni prikaz projekta i pristupiti: Tools --> AVD Manager.

Zatim kliknite na Create Virtual Device

odaberite telefon koji želite da koristite i kliknite na Next.

warning

Ako vam treba telefon sa Play Store instaliranim, odaberite onaj sa ikonom Play Store!

U trenutnom pogledu bićete u mogućnosti da odaberete i preuzmete Android image koji će telefon pokretati:

Dakle, odaberite ga i ako nije preuzet kliknite na simbol Download pored imena (sada sačekajte dok se image ne preuzme).
Kada je image preuzet, samo odaberite Next i Finish.

Virtuelna mašina će biti kreirana. Sada će dešava se da će svaki put kada pristupite AVD Manager-u ona biti prisutna.

Pokretanje virtuelne mašine

Da biste je pokrenuli, jednostavno pritisnite Start button.

Alat komandne linije

warning

Za macOS možete pronaći alat avdmanager u /Users/<username>/Library/Android/sdk/tools/bin/avdmanager i emulator u /Users/<username>/Library/Android/sdk/emulator/emulator ako ih imate instalirane.

Pre svega treba da odlučite koji telefon želite da koristite, da biste videli listu mogućih telefona izvršite:

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

Kada odaberete ime uređaja koji želite da koristite, potrebno je da odlučite koju Android sliku želite da pokrenete na ovom uređaju.\ Možete navesti sve opcije koristeći sdkmanager:

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

I preuzmite onaj (ili sve) koje želite da koristite sa:

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

Kada preuzmete Android image koji želite da koristite, možete prikazati sve preuzete Android image-e pomoću:

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

U ovom trenutku ste odlučili koji uređaj želite da koristite i preuzeli ste Android image, tako da možete kreirati virtuelnu mašinu koristeći:

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"

U poslednjoj komandi sam kreirao VM pod imenom "AVD9" koristeći uređaj "Nexus 5X" i Android image "system-images;android-28;google_apis;x86_64".
Sada možete izlistati virtuelne mašine koje ste kreirali pomoću:

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

Pokretanje virtuelne mašine

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.

Već smo videli kako možete izlistati kreirane virtuelne mašine, ali takođe ih možete izlistati koristeći:

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

Možete jednostavno pokrenuti bilo koju kreiranu virtuelnu mašinu koristeći:

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"

Ili koristeći naprednije opcije možete pokrenuti virtuelnu mašinu kao:

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

Opcije komandne linije

Međutim, postoji mnogo različitih korisnih opcija komandne linije koje možete koristiti za pokretanje virtuelne mašine. Ispod možete pronaći neke interesantne opcije, ali možete find a complete list here

Boot

  • -snapshot name : Pokreni VM snapshot
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Prikaži sve snapshots koji su zabeleženi

Network

  • -dns-server 192.0.2.0, 192.0.2.255 : Omogućava navođenje DNS servera odvojenih zarezima za VM.
  • -http-proxy 192.168.1.12:8080 : Omogućava navođenje HTTP proxy-ja za korišćenje (veoma korisno za presretanje saobraćaja koristeći Burp)
  • Ako podešavanja proxy-ja iz nekog razloga ne rade, pokušajte da ih konfigurišete interno ili pomoću aplikacije kao što su "Super Proxy" ili "ProxyDroid".
  • -netdelay 200 : Podesi emulaciju latencije mreže u milisekundama.
  • -port 5556 : Podesi TCP port koji se koristi za konzolu i adb.
  • -ports 5556,5559 : Podesi TCP portove koji se koriste za konzolu i adb.
  • -tcpdump /path/dumpfile.cap : Snimite sav saobraćaj u fajl

System

  • -selinux {disabled|permissive} : Podesi Security-Enhanced Linux (SELinux) modul bezbednosti u disabled ili permissive režim na Linux operativnom sistemu.
  • -timezone Europe/Paris : Podesi vremensku zonu za virtuelni uređaj
  • -screen {touch(default)|multi-touch|o-touch} : Podesi emulirani režim touch ekrana.
  • -writable-system : Koristite ovu opciju da biste imali sistemsku sliku koja se može pisati tokom vaše emulacione sesije. Takođe ćete morati da pokrenete adb root; adb remount. Ovo je veoma korisno za instaliranje novog sertifikata u sistem.

Linux CLI setup (SDK/AVD quickstart)

Zvanični CLI alati olakšavaju kreiranje brzih emulatora pogodnih za debug bez 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

Beleške

  • Varijante sistemskih slika: google_apis (debuggable, omogućava adb root), google_apis_playstore (not rootable), aosp/default (lightweight).
  • Tipovi buildova: userdebug često omogućava adb root na image-ima koji podržavaju debug. Play Store image-i su produkcijske verzije i blokiraju root.
  • Na x86_64 host-ovima, full-system ARM64 emulacija nije podržana od API 28+. Za Android 11+ koristite Google APIs/Play image-e koji uključuju per-app ARM-to-x86 translaciju da biste brzo pokretali mnoge ARM-only aplikacije.

Snimci iz 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 prevođenje binarnih fajlova (Android 11+)

Google APIs i Play Store images na Android 11+ mogu da prevode ARM binarne fajlove aplikacija po procesu, dok ostatak sistema ostaje nativan x86/x86_64. Ovo je često dovoljno brzo da testirate mnoge aplikacije koje rade samo na ARM-u na desktopu.

Savet: Preferirajte Google APIs x86/x86_64 images during pentests. Play images su zgodne, ali blokiraju adb root; koristite ih samo kada vam specifično trebaju Play services i prihvatate nedostatak root.

Rooting Play Store uređaja

Ako ste preuzeli uređaj sa Play Store, nećete moći direktno da dobijete root i dobićete ovu poruku o grešci

$ adb root
adbd cannot run as root in production builds

Korišćenjem rootAVD sa Magisk uspeo sam da ga root-ujem (pogledajte, na primer, ovaj video ili ovaj).

Instalacija Burp sertifikata

Pogledajte sledeću stranicu da biste saznali kako instalirati custom CA cert:

Install Burp Certificate

Korisne AVD opcije

Napravi snapshot

Možete koristiti GUI da u bilo kom trenutku napravite snapshot VM-a:

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks