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

11 KiB

AVD - Android Virtual Device

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Thank you very much to @offsecjay for his help while creating this content.

Qué es

Android Studio permite ejecutar máquinas virtuales de Android que puedes usar para probar APKs. Para usarlas necesitarás:

En Windows (en mi caso) después de instalar Android Studio tenía las herramientas del SDK instaladas en: C:\Users\<UserName>\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 Android Studio GUI 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

Prepare Virtual Machine

Si instalaste Android Studio, solo puedes abrir la vista principal del proyecto y acceder a: Tools --> AVD Manager.

Luego, haz clic en Create Virtual Device

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

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

{% 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 Download junto al nombre (ahora espera hasta que la imagen se descargue).
Una vez que la imagen esté descargada, solo selecciona Next y Finish.

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

Run Virtual Machine

Para ejecutarla solo presiona el Start button.

Command Line tool

Primero que nada, necesitas decidir qué teléfono quieres 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 usar, necesitas decidir qué imagen de Android quieres 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 (o todos) que quieras usar 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 usar, 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 usar y has descargado la imagen de Android, así que puedes crear la máquina virtual usando:

{% 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" 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 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:

{% 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 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 : Listar todas las instantáneas grabadas

Red

  • -dns-server 192.0.2.0, 192.0.2.255 : Permitir indicar separados por comas los servidores DNS a la VM.
  • -http-proxy 192.168.1.12:8080 : Permitir indicar un proxy HTTP a usar (muy útil para capturar el tráfico usando Burp)
  • -port 5556 : Establecer el número de puerto TCP que se usa 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 Security-Enhanced Linux en 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 emulada.
  • -writable-system : Usa esta opción para tener una imagen del 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 root directamente, y recibirás este mensaje de error

$ adb root
adbd cannot run as root in production builds

Usando rootAVD con Magisk pude obtener acceso root (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 AVD Interesantes

Tomar una Instantánea

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

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}