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

215 lines
9.0 KiB
Markdown

# AVD - Android Virtual Device
{{#include ../../banners/hacktricks-training.md}}
Hvala puno [**@offsecjay**](https://twitter.com/offsecjay) na pomoći prilikom kreiranja ovog sadržaja.
## Šta je
Android Studio omogućava **pokretanje virtuelnih mašina Android koje možete koristiti za testiranje APK-ova**. Da biste ih koristili, biće vam potrebni:
- **Android SDK alati** - [Preuzmite ovde](https://developer.android.com/studio/releases/sdk-tools).
- Ili **Android Studio** (sa Android SDK alatima) - [Preuzmite ovde](https://developer.android.com/studio).
Na Windows-u (u mom slučaju) **nakon instalacije Android Studio** imao sam **SDK alate instalirane u**: `C:\Users\<UserName>\AppData\Local\Android\Sdk\tools`
Na mac-u možete **preuzeti SDK alate** i imati ih u PATH pokretanjem:
```bash
brew tap homebrew/cask
brew install --cask android-sdk
```
Ili iz **Android Studio GUI** kao što je naznačeno u [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) što će ih instalirati u `~/Library/Android/sdk/cmdline-tools/latest/bin/` i `~/Library/Android/sdk/platform-tools/` i `~/Library/Android/sdk/emulator/`
Za Java probleme:
```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
```
## GUI
### Pripremite Virtuelnu Mašinu
Ako ste instalirali Android Studio, možete jednostavno otvoriti glavni prikaz projekta i pristupiti: _**Tools**_ --> _**AVD Manager.**_
<div align="center" data-full-width="false">
<figure><img src="../../images/image (1142).png" alt="" width="293"><figcaption></figcaption></figure>
</div>
Zatim, kliknite na _**Create Virtual Device**_
<figure><img src="../../images/image (1143).png" alt="" width="188"><figcaption></figcaption></figure>
_**izaberite** telefon koji želite da koristite_ i kliknite na _**Next.**_
> [!WARNING]
> Ako vam je potreban telefon sa instaliranim Play Store-om, izaberite onaj sa ikonom Play Store-a!
>
> <img src="../../images/image (1144).png" alt="" data-size="original">
U trenutnom prikazu moći ćete da **izaberete i preuzmete Android sliku** koju će telefon koristiti:
<figure><img src="../../images/image (1145).png" alt="" width="375"><figcaption></figcaption></figure>
Dakle, izaberite je i ako nije preuzeta, kliknite na _**Download**_ simbol pored imena (**sada sačekajte da se slika preuzme).**\
Kada se slika preuzme, jednostavno izaberite **`Next`** i **`Finish`**.
Virtuelna mašina će biti kreirana. Sada **svaki put kada pristupite AVD manager-u, biće prisutna**.
### Pokrenite Virtuelnu Mašinu
Da biste je **pokrenuli**, jednostavno pritisnite _**Start button**_.
![](<../../images/image (518).png>)
## Alat za Komandnu Liniju
> [!WARNING]
> Za macOS možete pronaći `avdmanager` alat u `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` i `emulator` u `/Users/<username>/Library/Android/sdk/emulator/emulator` ako ste ih instalirali.
Prvo što treba da uradite je da **odlučite koji telefon želite da koristite**, da biste videli listu mogućih telefona, izvršite:
```
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
[...]
```
Kada odlučite ime uređaja koji želite da koristite, potrebno je **odlučiti koju Android sliku želite da pokrenete na ovom uređaju.**\
Možete navesti sve opcije koristeći `sdkmanager`:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
I **preuzmite** onaj (ili sve) koje želite da koristite sa:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
Kada preuzmete Android sliku koju želite da koristite, možete **prikazati sve preuzete Android slike** sa:
```
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
```
U ovom trenutku ste odlučili koji uređaj želite da koristite i preuzeli ste Android sliku, tako da **možete kreirati virtuelnu mašinu koristeći**:
```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"
```
U poslednjoj komandi **napravio sam VM nazvan** "_AVD9_" koristeći **uređaj** "_Nexus 5X_" i **Android sliku** "_system-images;android-28;google_apis;x86_64_".\
Sada možete **prikazati virtuelne mašine** koje ste napravili sa:
```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
```
### Pokreni Virtuelnu Mašinu
> [!WARNING]
> Za macOS možete pronaći alat `avdmanager` u `/Users/<username>/Library/Android/sdk/tools/bin/avdmanager` i `emulator` u `/Users/<username>/Library/Android/sdk/emulator/emulator` ako ste ih instalirali.
Već smo videli kako možete da navedete kreirane virtuelne mašine, ali **takođe ih možete navesti koristeći**:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```
Možete jednostavno **pokrenuti svaku virtuelnu mašinu kreiranu** koristeći:
```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"
```
Ili koristeći naprednije opcije, možete pokrenuti virtuelnu mašinu kao što je:
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
### Opcije komandne linije
Međutim, postoji **mnogo različitih korisnih opcija komandne linije** koje možete koristiti za pokretanje virtuelne mašine. Ispod možete pronaći neke zanimljive opcije, ali možete [**pronaći kompletnu listu ovde**](https://developer.android.com/studio/run/emulator-commandline)
**Pokretanje**
- `-snapshot name` : Pokreni VM snapshot
- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Prikaži sve snimke koji su zabeleženi
**Mreža**
- `-dns-server 192.0.2.0, 192.0.2.255` : Omogućava da se navedu DNS serveri za VM odvojeni zarezom.
- **`-http-proxy 192.168.1.12:8080`** : Omogućava da se navede HTTP proxy koji će se koristiti (veoma korisno za hvatanje saobraćaja koristeći Burp)
- Ako postavke proxy-a ne rade iz nekog razloga, pokušajte da ih konfigurišete interno ili koristeći aplikaciju kao što je "Super Proxy" ili "ProxyDroid".
- `-netdelay 200` : Postavi emulaciju latencije mreže u milisekundama.
- `-port 5556` : Postavi TCP broj porta koji se koristi za konzolu i adb.
- `-ports 5556,5559` : Postavi TCP portove koji se koriste za konzolu i adb.
- **`-tcpdump /path/dumpfile.cap`** : Hvata sav saobraćaj u datoteku
**Sistem**
- `-selinux {disabled|permissive}` : Postavi Security-Enhanced Linux sigurnosni modul na onemogućen ili permisivan režim na Linux operativnom sistemu.
- `-timezone Europe/Paris` : Postavi vremensku zonu za virtuelni uređaj
- `-screen {touch(default)|multi-touch|o-touch}` : Postavi emulirani režim dodirnog ekrana.
- **`-writable-system`** : Koristite ovu opciju da imate zapisivu sistemsku sliku tokom vaše emulacione sesije. Takođe ćete morati da pokrenete `adb root; adb remount`. Ovo je veoma korisno za instalaciju novog sertifikata u sistem.
## Rootovanje uređaja sa Play Store-a
Ako ste preuzeli uređaj sa Play Store-om, nećete moći da dobijete root direktno, i dobićete ovu poruku o grešci
```
$ adb root
adbd cannot run as root in production builds
```
Koristeći [rootAVD](https://github.com/newbit1/rootAVD) sa [Magisk](https://github.com/topjohnwu/Magisk) uspeo sam da ga rootujem (pratite na primer [**ovaj video**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ili** [**ovaj**](https://www.youtube.com/watch?v=qQicUW0svB8)).
## Instalirajte Burp Sertifikat
Proverite sledeću stranicu da biste saznali kako da instalirate prilagođeni CA sertifikat:
{{#ref}}
install-burp-certificate.md
{{#endref}}
## Lepi AVD Opcije
### Napravite Snimak
Možete **koristiti GUI** da napravite snimak VM-a u bilo kojem trenutku:
![](<../../images/image (234).png>)
{{#include ../../banners/hacktricks-training.md}}