hacktricks/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md
2024-02-10 13:03:23 +00:00

11 KiB

AVD - Dispositivo Virtuale Android

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Grazie mille a @offsecjay per il suo aiuto nella creazione di questo contenuto.

Cosa è

Android Studio consente di eseguire macchine virtuali di Android che è possibile utilizzare per testare gli APK. Per utilizzarle avrai bisogno di:

In Windows (nel mio caso) dopo aver installato Android Studio ho avuto gli SDK Tools installati in: C:\Users\<UserName>\AppData\Local\Android\Sdk\tools

Su Mac puoi scaricare gli strumenti SDK e averli nel PATH eseguendo:

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

O da Android Studio GUI come indicato in https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a che li installerà in ~/Library/Android/sdk/cmdline-tools/latest/bin/ e ~/Library/Android/sdk/platform-tools/ e ~/Library/Android/sdk/emulator/

Per i problemi di Java:

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

GUI

Prepara la macchina virtuale

Se hai installato Android Studio, puoi semplicemente aprire la vista principale del progetto e accedere a: Strumenti --> AVD Manager.

Quindi, fai clic su Crea dispositivo virtuale

seleziona il telefono che desideri utilizzare e fai clic su Avanti.

{% hint style="warning" %} Se hai bisogno di un telefono con Play Store installato, seleziona uno con l'icona del Play Store!

{% endhint %}

Nella vista corrente sarai in grado di selezionare e scaricare l'immagine di Android che il telefono eseguirà:

Quindi, selezionala e se non è stata scaricata fai clic sul simbolo Download accanto al nome (ora attendi fino a quando l'immagine viene scaricata).
Una volta scaricata l'immagine, seleziona semplicemente Avanti e Fine.

La macchina virtuale verrà creata. Ora ogni volta che accedi a AVD Manager sarà presente.

Esegui la macchina virtuale

Per eseguirla, basta premere il pulsante Start.

Strumento da riga di comando

Prima di tutto devi decidere quale telefono vuoi utilizzare, per vedere l'elenco dei telefoni possibili esegui:

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

Una volta che hai deciso il nome del dispositivo che desideri utilizzare, devi decidere quale immagine Android desideri eseguire su questo dispositivo.
Puoi elencare tutte le opzioni utilizzando sdkmanager:

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

E scarica quello (o tutti) che desideri utilizzare con:

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

Una volta che hai scaricato l'immagine Android che desideri utilizzare, puoi elencare tutte le immagini Android scaricate con:

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

In questo momento hai deciso il dispositivo che desideri utilizzare e hai scaricato l'immagine di Android, quindi puoi creare la macchina virtuale utilizzando:

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

Nell'ultimo comando ho creato una VM chiamata "AVD9" utilizzando il dispositivo "Nexus 5X" e l'immagine Android "system-images;android-28;google_apis;x86_64".
Ora puoi elencare le macchine virtuali che hai creato con:

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

Esegui la macchina virtuale

Abbiamo già visto come è possibile elencare le macchine virtuali create, ma puoi anche elencarle utilizzando:

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

Puoi semplicemente eseguire qualsiasi macchina virtuale creata utilizzando:

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

Oppure, utilizzando opzioni più avanzate, è possibile eseguire una macchina virtuale come:

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

Opzioni della riga di comando

Tuttavia ci sono molte diverse opzioni utili della riga di comando che puoi utilizzare per avviare una macchina virtuale. Di seguito puoi trovare alcune opzioni interessanti ma puoi trovare un elenco completo qui

Avvio

  • -snapshot name : Avvia uno snapshot della VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Elenca tutti gli snapshot registrati

Rete

  • -dns-server 192.0.2.0, 192.0.2.255 : Permette di indicare i server DNS separati da virgola alla VM.
  • -http-proxy 192.168.1.12:8080 : Permette di indicare un proxy HTTP da utilizzare (molto utile per catturare il traffico utilizzando Burp)
  • -port 5556 : Imposta il numero di porta TCP utilizzato per la console e adb.
  • -ports 5556,5559 : Imposta le porte TCP utilizzate per la console e adb.
  • -tcpdump /path/dumpfile.cap : Cattura tutto il traffico in un file

Sistema

  • -selinux {disabled|permissive} : Imposta il modulo di sicurezza Linux Security-Enhanced su modalità disabilitata o permissiva su un sistema operativo Linux.
  • -timezone Europe/Paris : Imposta il fuso orario per il dispositivo virtuale
  • -screen {touch(default)|multi-touch|o-touch} : Imposta la modalità di emulazione del touchscreen.
  • -writable-system : Utilizza questa opzione per avere un'immagine di sistema scrivibile durante la sessione di emulazione. Dovrai anche eseguire adb root; adb remount. Questo è molto utile per installare un nuovo certificato nel sistema.

Ottenere i permessi di root su un dispositivo Play Store

Se hai scaricato un dispositivo con Play Store, non sarai in grado di ottenere direttamente i permessi di root e riceverai questo messaggio di errore

$ adb root
adbd cannot run as root in production builds

Utilizzando rootAVD con Magisk sono riuscito a eseguire il root (segui ad esempio questo video o questo).

Installa il Certificato Burp

Consulta la seguente pagina per imparare come installare un certificato CA personalizzato:

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

Belle Opzioni AVD

Fare uno Snapshot

Puoi utilizzare l'interfaccia grafica per fare uno snapshot della VM in qualsiasi momento:

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: