AVD - Android Virtual Device

Reading time: 7 minutes

tip

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

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

Дуже дякую @offsecjay за його допомогу під час створення цього контенту.

Що таке

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

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

У mac ви можете завантажити інструменти SDK і додати їх у 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

Підготовка віртуальної машини

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

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

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

warning

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

У поточному вигляді ви зможете вибрати та завантажити образ Android, який буде використовувати телефон:

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

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

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

Щоб запустити її, просто натисніть на Start button.

Інструмент командного рядка

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

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

І завантажте той (або всі), який ви хочете використовувати за допомогою:

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

Після того, як ви завантажили зображення Android, яке хочете використовувати, ви можете переглянути всі завантажені зображення Android за допомогою:

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, тому ви можете створити віртуальну машину, використовуючи:

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"

В останній команді я створив ВМ з ім'ям "AVD9" за допомогою пристрою "Nexus 5X" та образу Android "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

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

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

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

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

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

Опції командного рядка

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

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

  • -snapshot name : Запустити знімок ВМ
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Переглянути всі записані знімки

Мережа

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

Система

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

Рутування пристрою з Play Store

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

$ adb root
adbd cannot run as root in production builds

Використовуючи rootAVD з Magisk, я зміг отримати root-доступ (слідкуйте, наприклад, за цим відео або цим).

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

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

Install Burp Certificate

Гарні параметри AVD

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

Ви можете використовувати GUI для створення знімка віртуальної машини в будь-який час:

tip

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

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