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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Велика подяка @offsecjay за допомогу під час створення цього матеріалу.
Що таке
Android Studio дозволяє запускати віртуальні машини Android, які можна використовувати для тестування APK. Щоб ними користуватися, вам знадобиться:
- The Android SDK tools - Download here.
- Or Android Studio (with Android SDK tools) - Download here.
У Windows (в моєму випадку) після встановлення Android Studio у мене SDK Tools були встановлені у: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools
На mac ви можете завантажити SDK tools і додати їх у PATH, виконавши:
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:
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
GUI
Prepare Virtual Machine
Якщо ви встановили Android Studio, ви можете просто відкрити головний перегляд проекту й перейти: Tools --> AVD Manager.
.png)
Потім натисніть Create Virtual Device
.png)
select телефон, який ви хочете використовувати, і натисніть Next.
warning
Якщо вам потрібен телефон з встановленим Play Store, оберіть модель з іконкою Play Store!
.png)
У цьому вікні ви зможете select and download the Android image, який буде запускатися на телефоні:
.png)
Отже, оберіть його, і якщо він не завантажений — натисніть на 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
:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
І download той (або всі), які ви хочете використовувати з:
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, тому ви можете створити віртуальну машину, використовуючи:
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".
Тепер ви можете перелічити віртуальні машини які ви створили за допомогою:
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
, якщо вони встановлені.
Ми вже бачили, як перелічити створені віртуальні машини, але ви також можете їх перерахувати, використовуючи:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
Ви можете просто run any virtual machine created за допомогою:
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"
Або, використовуючи більш просунуті параметри, ви можете запустити віртуальну машину, наприклад:
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.
# 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
# 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:
Корисні опції AVD
Зробити знімок
Ви можете використати GUI, щоб у будь-який момент зробити знімок VM:
Посилання
- 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
Вивчайте та практикуйте 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.