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

12 KiB

AVD - Dispositivo Virtual de Android

AVD - Dispositivo Virtual de Android

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Muchas gracias a @offsecjay por su ayuda en la creación de este contenido.

¿Qué es?

Android Studio permite ejecutar máquinas virtuales de Android que se pueden utilizar para probar APKs. Para poder utilizarlas, necesitarás:

  • Las herramientas del kit de desarrollo de software (SDK) de Android - Descargar aquí.
  • O Android Studio (con las herramientas del kit de desarrollo de software de Android) - Descargar aquí.

En Windows (en mi caso) después de instalar Android Studio, las herramientas del kit de desarrollo de software (SDK) se instalaron en: C:\Users\<NombreDeUsuario>\AppData\Local\Android\Sdk\tools

JDK

Para las máquinas MacOS, te recomiendo que instales la siguiente versión para poder utilizar los comandos de la línea de comandos mencionados en las siguientes secciones:

brew install openjdk@8

GUI

Preparar la Máquina Virtual

Si has instalado Android Studio, simplemente abre la vista principal del proyecto y accede a: Herramientas --> Administrador de AVD.

Luego, haz clic en Crear dispositivo virtual, selecciona el teléfono que deseas utilizar y haz clic en Siguiente.
En la vista actual, vas a poder seleccionar y descargar la imagen de Android que el teléfono va a ejecutar:

Así que, selecciónala y haz clic en Descargar (ahora espera hasta que se descargue la imagen).
**Una vez que se haya descargado la imagen, simplemente selecciona _**Siguiente**_ y _Finalizar_.

La máquina virtual será creada. Ahora cada vez que accedas al administrador de AVD, estará presente.

Ejecutar la Máquina Virtual

Para ejecutarla, simplemente presiona el botón de inicio.

Herramienta de Línea de Comandos

Preparar la Máquina Virtual

{% hint style="info" %} En sistemas MacOS, el ejecutable se encuentra en /Users/<nombre de usuario>/Library/Android/sdk/tools/bin {% endhint %}

En primer lugar, necesitas decidir qué teléfono quieres usar, para ver la lista de posibles teléfonos, ejecuta:

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

id: 0 or "tv_1080p"
    Name: Android TV (1080p)
    OEM : Google
    Tag : android-tv
---------
id: 1 or "tv_720p"
    Name: Android TV (720p)
    OEM : Google
    Tag : android-tv
---------
id: 2 or "wear_round"
    Name: Android Wear Round
    OEM : Google
    Tag : android-wear
---------
id: 3 or "wear_round_chin_320_290"
    Name: Android Wear Round Chin
    OEM : Google
    Tag : android-wear
---------
id: 4 or "wear_square"
    Name: Android Wear Square
    OEM : Google
    Tag : android-wear
---------
id: 5 or "Galaxy Nexus"
    Name: Galaxy Nexus
    OEM : Google
---------
id: 6 or "Nexus 10"
    Name: Nexus 10
    OEM : Google
---------
id: 7 or "Nexus 4"
    Name: Nexus 4
    OEM : Google
---------
id: 8 or "Nexus 5"
    Name: Nexus 5
    OEM : Google
---------
id: 9 or "Nexus 5X"
    Name: Nexus 5X
    OEM : Google

Una vez que hayas decidido el nombre del dispositivo que deseas utilizar, necesitas decidir qué imagen de Android deseas ejecutar en este dispositivo.
Puedes listar todas las opciones usando sdkmanager:

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

Y descargue el que desee utilizar (o todos) con:

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

Una vez que hayas descargado la imagen de Android que deseas utilizar, puedes listar todas las imágenes de Android descargadas 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

En este momento has decidido el dispositivo que deseas utilizar y has descargado la imagen de Android, por lo que puedes crear la máquina virtual utilizando:

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"

En el último comando creé una VM llamada "AVD9" usando el dispositivo "Nexus 5X" y la imagen de Android "system-images;android-28;google_apis;x86_64".
Ahora puedes listar las máquinas virtuales que has creado 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

Ejecutar Máquina Virtual

Ya hemos visto cómo se pueden listar las máquinas virtuales creadas, pero también se pueden listar usando:

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

Simplemente puedes ejecutar cualquier máquina virtual creada usando:

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

O usando opciones más avanzadas, puedes ejecutar una máquina virtual como:

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

Opciones de línea de comandos

Sin embargo, hay muchas opciones útiles de línea de comandos diferentes que se pueden utilizar para iniciar una máquina virtual. A continuación, se pueden encontrar algunas opciones interesantes, pero se puede encontrar una lista completa aquí

Arranque

  • -snapshot name : Iniciar instantánea de la VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Enumerar todas las instantáneas grabadas

Red

  • -dns-server 192.0.2.0, 192.0.2.255 : Permite indicar los servidores DNS separados por comas a la VM.
  • -http-proxy 192.168.1.12:8080 : Permite indicar un proxy HTTP para usar (muy útil para capturar el tráfico usando Burp)
  • -port 5556 : Establecer el número de puerto TCP que se utiliza para la consola y adb.
  • -ports 5556,5559 : Establecer los puertos TCP utilizados para la consola y adb.
  • -tcpdump /path/dumpfile.cap : Capturar todo el tráfico en un archivo

Sistema

  • -selinux {disabled|permissive} : Establecer el módulo de seguridad de Linux mejorado (SELinux) en modo desactivado o permisivo en un sistema operativo Linux.
  • -timezone Europe/Paris : Establecer la zona horaria para el dispositivo virtual
  • -screen {touch(default)|multi-touch|o-touch} : Establecer el modo de pantalla táctil emulado.
  • -writable-system : Use esta opción para tener una imagen de sistema escribible durante su sesión de emulación. También deberá ejecutar adb root; adb remount. Esto es muy útil para instalar un nuevo certificado en el sistema.

Instalar el certificado Burp en una máquina virtual

En primer lugar, es necesario descargar el certificado Der de Burp. Se puede hacer esto en Proxy --> Options --> Import / Export CA certificate

Exporte el certificado en formato Der y transformémoslo a una forma que Android va a poder entender. Tenga en cuenta que para configurar el certificado de burp en la máquina Android en AVD es necesario ejecutar esta máquina con la opción -writable-system.
Por ejemplo, se puede ejecutar así:

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

Entonces, para configurar el certificado de Burp, haga lo siguiente:

openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem
CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0"
mv burp_cacert.pem $CERTHASHNAME #Correct name
adb root && adb remount #Allow to write on /syste
adb push $CERTHASHNAME /sdcard/ #Upload certificate
adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correct location
adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges
adb reboot #Now, reboot the machine

Una vez que la máquina termine de reiniciarse, el certificado de Burp estará en uso por ella.

Tomar una instantánea

Puede usar la GUI para tomar una instantánea de la VM en cualquier momento:

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥