AVD - Android Virtual Device

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

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 utilizarlas necesitarás:

En Windows (en mi caso) después de instalar Android Studio tuve las Herramientas del SDK instaladas en: C:\Users\<NombreUsuario>\AppData\Local\Android\Sdk\tools

En Mac 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.

¡Si necesitas un teléfono con Play Store instalado, selecciona uno con el icono de Play Store!

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

Entonces, selecciónalo y si no está descargado 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 será creada. 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

Primero necesitas 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 usando sdkmanager:

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

Y descarga el que desees utilizar 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 usando:

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

Puedes simplemente 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 utilizando 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 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 instantánea de 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 de forma separada por comas los servidores DNS para 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 a modo deshabilitado 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 : Usa esta opción para tener una imagen de sistema escribible durante tu sesión de emulación. También necesitarás ejecutar adb root; adb remount. Esto es muy útil para instalar un nuevo certificado en el sistema.

Rootear 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 Burp

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

pageInstall Burp Certificate

Buenas Opciones de AVD

Tomar una Captura de Pantalla

Puedes utilizar la interfaz gráfica para tomar una captura de la máquina virtual en cualquier momento:

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización