AVD - Android Sanal Cihaz

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

Bu içeriği oluştururken yardım ettiği için @offsecjay'a çok teşekkürler.

Nedir

Android Studio, APK'leri test etmek için kullanabileceğiniz Android sanal makinelerini çalıştırmanıza olanak tanır. Bunları kullanmak için şunlara ihtiyacınız olacak:

Windows'ta (benim durumumda) Android Studio'yu kurduktan sonra SDK Tools'un kurulu olduğu yer: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

mac üzerinde SDK tools'u indirebilir ve 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; bu, bunları ~/Library/Android/sdk/cmdline-tools/latest/bin/ ve ~/Library/Android/sdk/platform-tools/ ve ~/Library/Android/sdk/emulator/ konumlarına kuracaktır

Java sorunları için:

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

GUI

Sanal Makineyi Hazırlama

Android Studio'yu yüklediyseniz, ana proje görünümünü açıp şuradan erişebilirsiniz: Tools --> AVD Manager.

Sonra Create Virtual Device öğesine tıklayın

Kullanmak istediğiniz telefonu seçin ve Next. öğesine tıklayın.

warning

Eğer Play Store yüklü bir telefona ihtiyacınız varsa Play Store simgesine sahip olanı seçin!

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

Dolayısıyla onu seçin; eğer indirilmemişse isimlerin yanındaki 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'a eriştiğinizde her zaman burada görünecek.

Sanal Makineyi Çalıştırma

Çalıştırmak için sadece Start button'a basın.

Komut Satırı Aracı

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 bunlar yüklüyse.

Ö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 görüntüsünü çalıştırmak istediğinize karar vermelisiniz.\
Tüm seçenekleri sdkmanager kullanarak listeleyebilirsiniz:

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

Ve kullanmak istediğiniz birini (veya hepsini) download ile 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, indirilen tüm Android imajlarını listeleyebilirsiniz şu komutla:

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 anda kullanmak istediğiniz cihazı belirlediniz 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 adlı bir VM oluşturdum "AVD9" ve cihaz olarak "Nexus 5X" ile Android image olarak "system-images;android-28;google_apis;x86_64" kullandım.
Ş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, eğer yüklüyse avdmanager aracını /Users/<username>/Library/Android/sdk/tools/bin/avdmanager ve emulator uygulamasını /Users/<username>/Library/Android/sdk/emulator/emulator konumlarında bulabilirsiniz.

Oluşturulan sanal makineleri nasıl listeleyebileceğimizi zaten gördük, ancak şunu kullanarak da listeleyebilirsiniz:

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

Oluşturulan herhangi bir sanal makineyi basitçe çalıştırabilirsiniz şu komutla:

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çenekleri 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; tam listeyi find a complete list here adresinde bulabilirsiniz.

Boot

  • -snapshot name : VM snapshot'ını başlat
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Tüm kayıtlı snapshot'ları listeler

Network

  • -dns-server 192.0.2.0, 192.0.2.255 : VM için DNS sunucularını virgülle ayrılmış şekilde belirtmeye izin verir.
  • -http-proxy 192.168.1.12:8080 : Kullanılacak bir HTTP proxy'sini belirtmeye izin verir (trafiği Burp ile yakalamak için çok kullanışlı).
  • 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 yakalar

System

  • -selinux {disabled|permissive} : Security-Enhanced Linux güvenlik modülünü Linux işletim sisteminde disabled veya permissive moduna 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 oturumu sırasında yazılabilir bir sistem imajı kullanmak için kullanın. Ayrıca adb root; adb remount komutlarını çalıştırmanız gerekir. Sisteme yeni bir sertifika yüklemek için çok faydalıdır.

Linux CLI setup (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 (hata ayıklanabilir, adb root'a izin verir), google_apis_playstore (rootlenemez), aosp/default (hafif).
  • Build türleri: userdebug genellikle debug-özellikli image'larda adb root sağlar. Play Store image'ları üretim derlemeleridir ve root'u engeller.
  • x86_64 hostlarda, tam sistem ARM64 emülasyonu API 28+ itibarıyla desteklenmiyor. Android 11+ için birçok ARM-only uygulamayı hızlı çalıştırmak adına uygulama başına ARM-to-x86 çevirisini içeren Google APIs/Play image'ları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 binary translation (Android 11+)

Android 11+ üzerinde Google APIs ve Play Store imajları, sistemin geri kalanını yerel x86/x86_64 tutarken her süreç için ARM uygulama ikili dosyalarını çevirebilir. Bu, masaüstünde birçok yalnızca ARM uygulamasını 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; sadece Play services'e özellikle ihtiyaç duyduğunuzda ve root eksikliğini kabul ettiğinizde kullanın.

Rooting a Play Store device

Eğer Play Store ile bir cihaz indirdiyseniz doğrudan root elde edemeyecek 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 (örneğin this video veya this one).

Burp Sertifikasını Yükleme

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

Install Burp Certificate

AVD İçin Faydalı Seçenekler

Anlık Görüntü Alma

VM'nin anlık görüntüsünü istediğiniz zaman almak için GUI'yi kullanabilirsiniz:

Kaynaklar

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