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

11 KiB

AVD - Android Virtual Device

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Dziękuję bardzo @offsecjay za pomoc w tworzeniu tej treści.

Co to jest

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

W systemie 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:

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

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.

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

{% endhint %}

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

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

I pobierz ten (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 %}

Po pobraniu obrazu Android, którego chcesz użyć, możesz wyświetlić wszystkie pobrane obrazy Android 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ą:

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

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:

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 %}

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

{% code overflow="wrap" %}

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

{% endcode %}

Opcje wiersza poleceń

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

Uruchamianie

  • -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 działanie w 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 musiał również 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ć roota bezpośrednio i otrzymasz ten komunikat o błędzie

$ adb root
adbd cannot run as root in production builds

Using rootAVD with Magisk udało mi się uzyskać dostęp do roota (zobacz na przykład ten film lub ten).

Zainstaluj certyfikat 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 ekranu

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

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks
{% endhint %}