AVD - Android Virtual Device

Reading time: 7 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Bardzo dziękuję @offsecjay za pomoc w tworzeniu tej treści.

Co to jest

Android Studio pozwala na uruchamianie maszyn wirtualnych Android, które możesz użyć do testowania APK. Aby z nich skorzystać, będziesz potrzebować:

Na Windows (w moim przypadku) po zainstalowaniu Android Studio miałem zainstalowane narzędzia SDK w: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Na Macu możesz pobrać narzędzia SDK i mieć je w PATH, uruchamiając:

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

Lub z Android Studio GUI, jak wskazano w https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a, co zainstaluje je w ~/Library/Android/sdk/cmdline-tools/latest/bin/ oraz ~/Library/Android/sdk/platform-tools/ i ~/Library/Android/sdk/emulator/

W przypadku problemów z Javą:

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

GUI

Przygotuj Maszynę Wirtualną

Jeśli zainstalowałeś Android Studio, możesz po prostu otworzyć główny widok projektu i uzyskać dostęp do: Narzędzia --> Menadżer AVD.

Następnie kliknij na Utwórz Wirtualne Urządzenie

wybierz telefon, którego chcesz użyć i kliknij na Dalej.

warning

Jeśli potrzebujesz telefonu z zainstalowanym Sklepem Play, wybierz jeden z ikoną Sklepu Play!

W bieżącym widoku będziesz mógł wybrać i pobrać obraz Androida, który telefon będzie uruchamiał:

Więc, wybierz go, a jeśli nie jest pobrany, kliknij na symbol Pobierz obok nazwy (teraz poczekaj, aż obraz zostanie pobrany).
Gdy obraz zostanie pobrany, po prostu wybierz Dalej i Zakończ.

Maszyna wirtualna zostanie utworzona. Teraz za każdym razem, gdy uzyskasz dostęp do menedżera AVD, będzie ona obecna.

Uruchom Maszynę Wirtualną

Aby uruchomić ją, po prostu naciśnij Przycisk Start.

Narzędzie Wiersza Poleceń

Przede wszystkim musisz zdecydować, którego telefonu chcesz użyć, aby zobaczyć listę możliwych telefonów, wykonaj:

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

Gdy zdecydujesz o nazwie urządzenia, które chcesz użyć, musisz zdecydować, który obraz Androida chcesz uruchomić na tym urządzeniu.
Możesz wylistować wszystkie opcje używając sdkmanager:

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

I pobierz ten (lub wszystkie), które chcesz użyć za pomocą:

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

Gdy pobierzesz obraz Androida, który chcesz użyć, możesz wyświetlić wszystkie pobrane obrazy Androida za pomocą:

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

W tym momencie zdecydowałeś, jakiego urządzenia chcesz użyć i pobrałeś obraz Androida, więc możesz utworzyć maszynę wirtualną za pomocą:

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"

W ostatniej komendzie stworzyłem VM o nazwie "AVD9" używając urządzenia "Nexus 5X" oraz obrazu Android "system-images;android-28;google_apis;x86_64".
Teraz możesz wyświetlić listę maszyn wirtualnych, które stworzyłeś za pomocą:

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

Uruchom Maszynę Wirtualną

Już widzieliśmy, jak możesz wylistować utworzone maszyny wirtualne, ale możesz je również wylistować używając:

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

Możesz po prostu uruchomić dowolną maszynę wirtualną utworzoną za pomocą:

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"

Lub korzystając z bardziej zaawansowanych opcji, możesz uruchomić maszynę wirtualną, taką jak:

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

Opcje wiersza poleceń

Jednak istnieje wiele różnych przydatnych opcji wiersza poleceń, które możesz użyć do uruchomienia maszyny wirtualnej. Poniżej znajdziesz kilka interesujących opcji, ale możesz znaleźć pełną listę tutaj

Uruchomienie

  • -snapshot name : Uruchom snapshot VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Wyświetl wszystkie zarejestrowane snapshoty

Sieć

  • -dns-server 192.0.2.0, 192.0.2.255 : Pozwól wskazać oddzielone przecinkami serwery DNS dla VM.
  • -http-proxy 192.168.1.12:8080 : Pozwól wskazać proxy HTTP do użycia (bardzo przydatne do przechwytywania ruchu za pomocą Burp)
  • -port 5556 : Ustaw numer portu TCP używanego dla konsoli i adb.
  • -ports 5556,5559 : Ustaw porty TCP używane dla konsoli i adb.
  • -tcpdump /path/dumpfile.cap : Przechwyć cały ruch do pliku

System

  • -selinux {disabled|permissive} : Ustaw moduł zabezpieczeń Security-Enhanced Linux na tryb wyłączony lub zezwalający na systemie operacyjnym Linux.
  • -timezone Europe/Paris : Ustaw strefę czasową dla urządzenia wirtualnego
  • -screen {touch(default)|multi-touch|o-touch} : Ustaw emulowany tryb ekranu dotykowego.
  • -writable-system : Użyj tej opcji, aby mieć zapisywalny obraz systemu podczas sesji emulacji. Będziesz również musiał uruchomić adb root; adb remount. To jest bardzo przydatne do zainstalowania nowego certyfikatu w systemie.

Rootowanie urządzenia z Play Store

Jeśli pobrałeś urządzenie z Play Store, nie będziesz mógł uzyskać dostępu do roota bezpośrednio i otrzymasz ten komunikat o błędzie

$ adb root
adbd cannot run as root in production builds

Używając rootAVD z Magisk udało mi się go zrootować (zobacz na przykład ten film lub ten).

Zainstaluj certyfikat Burp

Sprawdź następującą stronę, aby dowiedzieć się, jak zainstalować niestandardowy certyfikat CA:

{{#ref}} install-burp-certificate.md {{#endref}}

Fajne opcje AVD

Zrób zrzut ekranu

Możesz użyć GUI, aby w dowolnym momencie zrobić zrzut ekranu VM:

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks