AVD - Android Virtual Device

Reading time: 10 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Thank you very much to @offsecjay for his help while creating this content.

What is

Android Studio allows to run virtual machines of Android that you can use to test APKs. In order to use them you will need:

Windows'ta (benim durumumda) Android Studio'yu kurduktan sonra SDK Tools'ın şu konumda yüklü olduğunu gördüm: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Mac'te SDK tools'u indirip PATH'e eklemek için şu komutu çalıştırabilirsiniz:

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

Veya Android Studio GUI üzerinden, https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a adresinde belirtildiği gibi, bunları ~/Library/Android/sdk/cmdline-tools/latest/bin/ ve ~/Library/Android/sdk/platform-tools/ ve ~/Library/Android/sdk/emulator/ dizinlerine kuracaktır

Java sorunları için:

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.

Then, click on Create Virtual Device

kullanmak istediğiniz telefonu seçin ve Next.'e tıklayın.

warning

If you need a phone with Play Store installed select one with the Play Store icon on it!

Bu görünümde telefonun çalıştıracağı Android imajını seçip indirebileceksiniz:

O yüzden seçin ve indirilmemişse adın yanında bulunan Download simgesine tıklayın (görüntü indirilene kadar bekleyin).
Görüntü indirildikten sonra sadece Next ve Finish'i seçin.

Sanal makine oluşturulacak. Artık AVD manager'ı her açtığınızda burada olacaktır.

Run Virtual Machine

Çalıştırmak için sadece Start button tuşuna basın.

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.

Öncelikle hangi telefonu kullanmak istediğinize karar vermeniz gerekiyor; kullanılabilir telefonların listesini görmek için şu komutu çalıştırın:

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

Kullanmak istediğiniz cihazın adını belirledikten sonra, bu cihazda hangi Android imajını çalıştırmak istediğinize karar vermelisiniz.\
Tüm seçenekleri sdkmanager ile listeleyebilirsiniz:

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

Ve kullanmak istediğiniz (veya hepsini) indirin:

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

Kullanmak istediğiniz Android imajını indirdikten sonra indirilmiş tüm Android imajlarını listeleyebilirsiniz:

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

Bu noktada kullanmak istediğiniz cihazı seçtiniz ve Android imajını indirdiniz, bu yüzden sanal makineyi şu şekilde oluşturabilirsiniz:

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"

Son komutta adında bir VM oluşturdum "AVD9" ; cihaz olarak "Nexus 5X" ve Android imajı olarak "system-images;android-28;google_apis;x86_64" kullanıldı.
Şimdi oluşturduğunuz sanal makineleri listeleyebilirsiniz şu komutla:

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

Sanal Makineyi Çalıştır

warning

macOS için avdmanager aracını /Users/<username>/Library/Android/sdk/tools/bin/avdmanager ve emulator/Users/<username>/Library/Android/sdk/emulator/emulator içinde bulabilirsiniz, eğer yüklülerse.

Oluşturduğunuz sanal makineleri nasıl listeleyebileceğinizi zaten gördük, ancak bunları şu komutla da listeleyebilirsiniz:

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

Aşağıdakileri kullanarak oluşturulan herhangi bir sanal makineyi basitçe çalıştırabilirsiniz:

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"

Veya daha gelişmiş seçenekler kullanarak şu gibi bir sanal makine çalıştırabilirsiniz:

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

Komut satırı seçenekleri

Ancak sanal makineyi başlatmak için kullanabileceğiniz birçok farklı komut satırı yararlı seçeneği vardır. Aşağıda bazı ilginç seçenekleri bulabilirsiniz fakat find a complete list here

Başlangıç

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

  • -dns-server 192.0.2.0, 192.0.2.255 : VM için virgülle ayrılmış DNS sunucularını belirtmeye izin verir.
  • -http-proxy 192.168.1.12:8080 : Kullanılacak bir HTTP proxy belirtmeyi sağlar (trafik yakalamak için Burp kullanırken çok faydalı)
  • If the proxy settings aren't working for some reason, try to configure them internally or using an pplication like "Super Proxy" or "ProxyDroid".
  • -netdelay 200 : Ağ gecikmesi emülasyonunu milisaniye cinsinden ayarlar.
  • -port 5556 : Konsol ve adb için kullanılan TCP port numarasını ayarlar.
  • -ports 5556,5559 : Konsol ve adb için kullanılan TCP portlarını ayarlar.
  • -tcpdump /path/dumpfile.cap : Tüm trafiği bir dosyaya kaydeder.

Sistem

  • -selinux {disabled|permissive} : Linux işletim sisteminde Security-Enhanced Linux güvenlik modülünü disabled veya permissive moda ayarlar.
  • -timezone Europe/Paris : Sanal cihaz için zaman dilimini ayarlar
  • -screen {touch(default)|multi-touch|o-touch} : Emüle edilmiş dokunmatik ekran modunu ayarlar.
  • -writable-system : Bu seçeneği emülasyon oturumunuz sırasında yazılabilir bir sistem görüntüsü elde etmek için kullanın. Ayrıca adb root; adb remount komutlarını çalıştırmanız gerekir. Bu, sisteme yeni bir sertifika yüklemek için çok faydalıdır.

Linux CLI kurulumu (SDK/AVD quickstart)

Resmi CLI araçları, Android Studio olmadan hızlı, hata ayıklanabilir emülatörler oluşturmayı kolaylaştırır.

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

Notlar

  • Sistem image varyantları: google_apis (debuggable, allows adb root), google_apis_playstore (not rootable), aosp/default (lightweight).
  • Build türleri: userdebug genellikle debug-capable imajlarda adb root sağlar. Play Store imajları üretim build'leri olup root'u engeller.
  • x86_64 host'larda, tam sistem ARM64 emülasyonu API 28+'ten itibaren desteklenmiyor. Android 11+ için, birçok ARM-only uygulamayı hızlı çalıştırmak üzere per-app ARM-to-x86 translation içeren Google APIs/Play imajlarını kullanın.

CLI'den Anlık Görüntüler

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 ikili çeviri (Android 11+)

Android 11+ üzerinde Google APIs ve Play Store imajları, sistemin geri kalanını yerel x86/x86_64 tutarken işlem başına ARM uygulama ikili dosyalarını çevirebilir. Bu, birçok yalnızca ARM uygulamasını masaüstünde test etmek için genellikle yeterince hızlıdır.

İpucu: pentests sırasında Google APIs x86/x86_64 imajlarını tercih edin. Play imajları kullanışlıdır ama adb root'u engeller; yalnızca Play services'e özellikle ihtiyaç duyduğunuzda ve root eksikliğini kabul ettiğinizde bunları kullanın.

Play Store cihazına root verme

Eğer Play Store olan bir cihaz indirdiyseniz doğrudan root alamayacaksınız ve şu hata mesajını alacaksınız

$ adb root
adbd cannot run as root in production builds

rootAVD ile Magisk kullanarak cihazı root yapabildim (örnek olarak this video veya this one videolarını izleyin).

Burp Sertifikasını Yükleme

Özel bir CA sertifikasının nasıl yükleneceğini öğrenmek için aşağıdaki sayfayı inceleyin:

Install Burp Certificate

Faydalı AVD Seçenekleri

Snapshot (Anlık Görüntü) Al

GUI'yi kullanarak VM'in istediğiniz zaman bir snapshot'ını alabilirsiniz:

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin