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

12 KiB

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 puedes usar para probar APKs. Para poder utilizarlas, necesitarás:

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

En macOS, puedes descargar las herramientas del SDK y tenerlas en el PATH ejecutando:

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

O desde la interfaz gráfica de Android Studio como se indica en https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a, que los instalará en ~/Library/Android/sdk/cmdline-tools/latest/bin/ y ~/Library/Android/sdk/platform-tools/ y ~/Library/Android/sdk/emulator/

Para los problemas de Java:

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

GUI

Preparar Máquina Virtual

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

Luego, haz clic en Crear dispositivo virtual

selecciona el teléfono que deseas usar y haz clic en Siguiente.

{% hint style="warning" %} Si necesitas un teléfono con Play Store instalado, selecciona uno con el icono de Play Store en él!

{% endhint %}

En la vista actual podrás seleccionar y descargar la imagen de Android que el teléfono va a ejecutar:

Así que, selecciónala y si no está descargada, haz clic en el símbolo de Descargar junto al nombre (ahora espera hasta que se descargue la imagen).
Una vez descargada la imagen, simplemente selecciona Siguiente y Finalizar.

La máquina virtual se creará. Ahora cada vez que accedas al administrador AVD estará presente.

Ejecutar Máquina Virtual

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

Herramienta de Línea de Comandos

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

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

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

Y descarga el que desees usar (o todos) 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 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:

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

En el último comando creé una VM llamada "AVD9" utilizando 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 puedes listar las máquinas virtuales creadas, pero también puedes listarlas 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 utilizando:

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

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

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

Opciones de línea de comandos

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

Arranque

  • -snapshot name : Iniciar una instantánea de la máquina virtual
  • -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 para la máquina virtual.
  • -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 : Establece el número de puerto TCP que se utiliza para la consola y adb.
  • -ports 5556,5559 : Establece los puertos TCP utilizados para la consola y adb.
  • -tcpdump /path/dumpfile.cap : Captura todo el tráfico en un archivo

Sistema

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

Hacer root a un dispositivo de Play Store

Si descargaste un dispositivo con Play Store, no podrás obtener acceso root directamente y recibirás este mensaje de error.

$ adb root
adbd cannot run as root in production builds

Usando rootAVD con Magisk pude rootearlo (sigue por ejemplo este video o este otro).

Instalar Certificado de Burp

Consulta la siguiente página para aprender cómo instalar un certificado CA personalizado:

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

Opciones útiles de AVD

Tomar una instantánea

Puedes usar la interfaz gráfica para tomar una instantánea de la máquina virtual en cualquier momento:

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