hacktricks/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md

11 KiB

AVD - Android Virtual Device

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Dziękujemy bardzo @offsecjay za pomoc przy tworzeniu tego treści.

Co to jest

Android Studio pozwala uruchamiać wirtualne maszyny Androida, które można użyć do testowania plików APK. Aby ich użyć, będziesz potrzebować:

W systemie Windows (w moim przypadku) po zainstalowaniu Android Studio narzędzia SDK są zainstalowane w: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

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

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, które zainstalują je w ~/Library/Android/sdk/cmdline-tools/latest/bin/ oraz ~/Library/Android/sdk/platform-tools/ i ~/Library/Android/sdk/emulator/

Dla problemów związanych z Javą:

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

GUI

Przygotuj wirtualną maszynę

Jeśli zainstalowałeś Android Studio, możesz po prostu otworzyć widok głównego projektu i przejść do: Narzędzia --> Menedżer AVD.

Następnie kliknij Utwórz wirtualne urządzenie

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

{% hint style="warning" %} Jeśli potrzebujesz telefon z zainstalowanym Sklepem Play, wybierz ten z ikoną Sklepu Play!

{% endhint %}

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

Wybierz go, a jeśli nie został jeszcze pobrany, kliknij na symbol Pobierz obok nazwy (teraz poczekaj, aż obraz zostanie pobrany).
Gdy obraz zostanie pobrany, po prostu wybierz Dalej i Zakończ.

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

Uruchomienie wirtualnej maszyny

Aby ją uruchomić, po prostu naciśnij przycisk Uruchom.

Narzędzie wiersza poleceń

Po pierwsze musisz zdecydować, który telefon 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 już zdecydujesz, jaką nazwę urządzenia chcesz użyć, musisz zdecydować, który obraz Androida chcesz uruchomić na tym urządzeniu.
Możesz wymienić wszystkie opcje, używając sdkmanager:

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

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

{% code overflow="wrap" %}

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

{% endcode %}

Gdy już pobierzesz obraz Androida, który chcesz użyć, możesz wyświetlić listę wszystkich pobranych obrazów 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ś się na urządzenie, które chcesz użyć, i pobrałeś obraz Androida, więc możesz utworzyć maszynę wirtualną, używając:

{% code overflow="wrap" %}

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"

{% endcode %}

W ostatniej komendzie utworzyłem maszynę wirtualną o nazwie "AVD9" korzystając z urządzenia "Nexus 5X" i obrazu Androida "system-images;android-28;google_apis;x86_64".
Teraz możesz wyświetlić listę maszyn wirtualnych, które utworzyłeś za pomocą:

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żna wyświetlić utworzone maszyny wirtualne, ale możesz je również wyświetlić za pomocą:

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ą:

{% code overflow="wrap" %}

C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName"
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9"

{% endcode %}

Możesz także użyć bardziej zaawansowanych opcji, takich jak uruchomienie maszyny wirtualnej:

{% code overflow="wrap" %}

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żna użyć do uruchomienia maszyny wirtualnej. Poniżej znajdziesz kilka interesujących opcji, ale możesz znaleźć pełną listę tutaj

Uruchamianie

  • -snapshot name : Uruchomienie migawki maszyny wirtualnej
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Wyświetlenie wszystkich zarejestrowanych migawek

Sieć

  • -dns-server 192.0.2.0, 192.0.2.255 : Pozwala wskazać oddzielone przecinkami serwery DNS dla maszyny wirtualnej.
  • -http-proxy 192.168.1.12:8080 : Pozwala wskazać serwer proxy HTTP do użycia (bardzo przydatne do przechwytywania ruchu za pomocą Burp)
  • -port 5556 : Ustawia numer portu TCP używany do konsoli i adb.
  • -ports 5556,5559 : Ustawia numery portów TCP używane do konsoli i adb.
  • -tcpdump /path/dumpfile.cap : Przechwytuje cały ruch w pliku

System

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

Rootowanie urządzenia z Google Play

Jeśli pobrałeś urządzenie z Google Play, nie będziesz mógł uzyskać bezpośrednio uprawnień roota, i otrzymasz ten komunikat błędu

$ 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).

Instalacja Certyfikatu Burp

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

{% content-ref url="install-burp-certificate.md" %} install-burp-certificate.md {% endcontent-ref %}

Fajne Opcje AVD

Zrób Zrzut

Możesz użyć interfejsu graficznego do zrobienia zrzutu maszyny wirtualnej w dowolnym momencie:

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: