AVD - Android Virtual Device

Reading time: 10 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Велика подяка @offsecjay за допомогу під час створення цього матеріалу.

Що таке

Android Studio дозволяє запускати віртуальні машини Android, які можна використовувати для тестування APK. Щоб ними користуватися, вам знадобиться:

У Windows (в моєму випадку) після встановлення Android Studio у мене SDK Tools були встановлені у: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

На mac ви можете завантажити SDK tools і додати їх у PATH, виконавши:

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

Або з Android Studio GUI, як вказано в https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a, що встановить їх у ~/Library/Android/sdk/cmdline-tools/latest/bin/ і ~/Library/Android/sdk/platform-tools/ і ~/Library/Android/sdk/emulator/

Для проблем з Java:

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

GUI

Prepare Virtual Machine

Якщо ви встановили Android Studio, ви можете просто відкрити головний перегляд проекту й перейти: Tools --> AVD Manager.

Потім натисніть Create Virtual Device

select телефон, який ви хочете використовувати, і натисніть Next.

warning

Якщо вам потрібен телефон з встановленим Play Store, оберіть модель з іконкою Play Store!

У цьому вікні ви зможете select and download the Android image, який буде запускатися на телефоні:

Отже, оберіть його, і якщо він не завантажений — натисніть на Download символ поруч із назвою (тепер зачекайте, поки образ буде завантажено).
Після завантаження образу просто виберіть Next та Finish.

Віртуальна машина буде створена. Тепер кожного разу, коли ви відкриватимете AVD Manager, вона буде присутня.

Run Virtual Machine

Щоб її запустити, просто натисніть 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.

Перш за все вам потрібно вирішити, який телефон ви хочете використовувати; щоб побачити список можливих телефонів, виконайте:

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

Після того, як ви оберете ім'я пристрою, який хочете використовувати, вам потрібно вирішити, який образ Android ви хочете запустити на цьому пристрої.\
Ви можете перелічити всі варіанти за допомогою sdkmanager:

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

І download той (або всі), які ви хочете використовувати з:

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

Після того, як ви завантажили Android image, який хочете використовувати, ви можете list all the downloaded Android images за допомогою:

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

Наразі ви визначилися з пристроєм, який хочете використовувати, і завантажили Android image, тому ви можете створити віртуальну машину, використовуючи:

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"

У останній команді було створено VM з ім'ям "AVD9" з використанням пристрою "Nexus 5X" та Android image "system-images;android-28;google_apis;x86_64".
Тепер ви можете перелічити віртуальні машини які ви створили за допомогою:

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

Запуск віртуальної машини

warning

Для macOS ви можете знайти інструмент avdmanager за шляхом /Users/<username>/Library/Android/sdk/tools/bin/avdmanager та emulator за шляхом /Users/<username>/Library/Android/sdk/emulator/emulator, якщо вони встановлені.

Ми вже бачили, як перелічити створені віртуальні машини, але ви також можете їх перерахувати, використовуючи:

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

Ви можете просто run any virtual machine created за допомогою:

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"

Або, використовуючи більш просунуті параметри, ви можете запустити віртуальну машину, наприклад:

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

Параметри командного рядка

Однак існує безліч корисних опцій командного рядка, які можна використовувати для запуску віртуальної машини. Нижче наведено кілька цікавих опцій, але повний список можна find a complete list here

Завантаження

  • -snapshot name : Запустити snapshot VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Перелік усіх записаних snapshots

Мережа

  • -dns-server 192.0.2.0, 192.0.2.255 : Дозволяє вказати через кому DNS-сервери для віртуальної машини.
  • -http-proxy 192.168.1.12:8080 : Дозволяє вказати HTTP-проксі для використання (дуже корисно для перехоплення трафіку за допомогою Burp)
  • 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 : Встановити емуляцію затримки мережі в мілісекундах.
  • -port 5556 : Встановити TCP-порт, який використовується для консолі та adb.
  • -ports 5556,5559 : Встановити TCP-порти, які використовуються для консолі та adb.
  • -tcpdump /path/dumpfile.cap : Захопити весь трафік у файл

Система

  • -selinux {disabled|permissive} : Встановити модуль Security-Enhanced Linux (SELinux) у режим disabled або permissive на операційній системі Linux.
  • -timezone Europe/Paris : Встановити часовий пояс для віртуального пристрою
  • -screen {touch(default)|multi-touch|o-touch} : Встановити режим емуляції сенсорного екрану.
  • -writable-system : Використовуйте цю опцію, щоб мати записуваний системний образ під час сеансу емуляції. Також потрібно виконати adb root; adb remount. Це дуже корисно для встановлення нового сертифікату в системі.

Налаштування CLI для Linux (SDK/AVD quickstart)

Офіційні інструменти CLI полегшують створення швидких, зручних для дебагу емулаторів без 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

Примітки

  • Варіанти системних образів: google_apis (дозволяє налагодження, дозволяє adb root), google_apis_playstore (не rootable), aosp/default (легкий).
  • Типи збірок: userdebug часто дозволяє adb root на образах з підтримкою налагодження. Play Store images — це production-збірки і блокують root.
  • На хостах x86_64 повноцінна емуляція ARM64 не підтримується з API 28+. Для Android 11+ використовуйте Google APIs/Play images, які включають per-app ARM-to-x86 translation, щоб швидко запускати багато ARM-only apps.

Знімки з 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 бінарний переклад (Android 11+)

Google APIs and Play Store images on Android 11+ can translate ARM app binaries per process while keeping the rest of the system native x86/x86_64. Це часто достатньо швидко, щоб тестувати багато ARM-only додатків на десктопі.

Порада: Prefer Google APIs x86/x86_64 images during pentests. Play images are convenient but block adb root; use them only when you specifically require Play services and accept the lack of root.

Rooting a Play Store device

Якщо ви завантажили пристрій з Play Store, ви не зможете отримати root безпосередньо, і отримаєте це повідомлення про помилку

$ adb root
adbd cannot run as root in production builds

За допомогою rootAVD та Magisk мені вдалося отримати root (наприклад, дивіться this video або this one).

Встановлення сертифікату Burp

Перегляньте наступну сторінку, щоб дізнатися, як встановити власний сертифікат CA:

Install Burp Certificate

Корисні опції AVD

Зробити знімок

Ви можете використати GUI, щоб у будь-який момент зробити знімок VM:

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks