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

15 KiB

AVD - Dispositivo Virtual Android

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

Muito obrigado a @offsecjay por sua ajuda na criação deste conteúdo.

O que é

O Android Studio permite executar máquinas virtuais do Android que você pode usar para testar APKs. Para usá-las, você precisará de:

  • As ferramentas do Android SDK - Baixe aqui.
  • Ou o Android Studio (com as ferramentas do Android SDK) - Baixe aqui.

No Windows (no meu caso), após instalar o Android Studio, as Ferramentas do SDK foram instaladas em: C:\Users\<NomeDoUsuário>\AppData\Local\Android\Sdk\tools

No Mac, você pode baixar as ferramentas do SDK e tê-las no PATH executando:

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

Ou a partir da interface gráfica do Android Studio, conforme indicado em https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a, que irá instalá-los em ~/Library/Android/sdk/cmdline-tools/latest/bin/ e ~/Library/Android/sdk/platform-tools/ e ~/Library/Android/sdk/emulator/

Para os problemas de Java:

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

GUI

Preparar Máquina Virtual

Se você instalou o Android Studio, você pode simplesmente abrir a visualização principal do projeto e acessar: Ferramentas --> Gerenciador AVD.

Em seguida, clique em Criar Dispositivo Virtual

selecione o telefone que você deseja usar e clique em Avançar.

{% hint style="warning" %} Se você precisa de um telefone com o Play Store instalado, selecione um com o ícone do Play Store nele!

{% endhint %}

Na visualização atual, você poderá selecionar e baixar a imagem do Android que o telefone vai executar:

Portanto, selecione-o e se ele não estiver baixado, clique no símbolo Download ao lado do nome (agora aguarde até que a imagem seja baixada).
Assim que a imagem for baixada, basta selecionar Avançar e Concluir.

A máquina virtual será criada. Agora, sempre que você acessar o gerenciador AVD, ela estará presente.

Executar Máquina Virtual

Para executá-la, basta pressionar o botão Iniciar.

Ferramenta de Linha de Comando

Antes de tudo, você precisa decidir qual telefone você deseja usar, para ver a lista de telefones possíveis, execute:

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

Uma vez que você tenha decidido o nome do dispositivo que deseja usar, você precisa decidir qual imagem do Android você deseja executar neste dispositivo.
Você pode listar todas as opções usando sdkmanager:

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

E baixe aquele (ou todos) que você deseja usar com:

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

Depois de baixar a imagem do Android que você deseja usar, você pode listar todas as imagens do Android baixadas com:

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

Neste momento, você decidiu o dispositivo que deseja usar e baixou a imagem do Android, então você pode criar a 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 %}

No último comando, criei uma VM chamada "AVD9" usando o dispositivo "Nexus 5X" e a imagem do Android "system-images;android-28;google_apis;x86_64".
Agora você pode listar as máquinas virtuais que você criou com:

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

Executar Máquina Virtual

Já vimos como você pode listar as máquinas virtuais criadas, mas você também pode listá-las usando:

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

Você pode simplesmente executar qualquer máquina virtual criada 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 %}

Ou usando opções mais avançadas, você pode executar uma 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 %}

Opções de linha de comando

No entanto, existem muitas opções úteis de linha de comando diferentes que você pode usar para iniciar uma máquina virtual. Abaixo você pode encontrar algumas opções interessantes, mas você pode encontrar uma lista completa aqui

Inicialização

  • -snapshot name : Iniciar snapshot da VM
  • -snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img : Listar todos os snapshots gravados

Rede

  • -dns-server 192.0.2.0, 192.0.2.255 : Permite indicar os servidores DNS separados por vírgula para a VM.
  • -http-proxy 192.168.1.12:8080 : Permite indicar um proxy HTTP a ser usado (muito útil para capturar o tráfego usando o Burp)
  • -port 5556 : Define o número da porta TCP usado para o console e adb.
  • -ports 5556,5559 : Define as portas TCP usadas para o console e adb.
  • -tcpdump /path/dumpfile.cap : Captura todo o tráfego em um arquivo

Sistema

  • -selinux {disabled|permissive} : Define o módulo de segurança do Linux Security-Enhanced Linux para o modo desativado ou permissivo em um sistema operacional Linux.
  • -timezone Europe/Paris : Define o fuso horário para o dispositivo virtual
  • -screen {touch(default)|multi-touch|o-touch} : Define o modo de tela sensível ao toque emulado.
  • -writable-system : Use esta opção para ter uma imagem do sistema gravável durante sua sessão de emulação. Você também precisará executar adb root; adb remount. Isso é muito útil para instalar um novo certificado no sistema.

Fazendo root em um dispositivo da Play Store

Se você baixou um dispositivo com a Play Store, você não poderá obter acesso root diretamente e receberá esta mensagem de erro

$ adb root
adbd cannot run as root in production builds

Usando rootAVD com Magisk, consegui fazer o root (siga, por exemplo, este vídeo ou este).

Instalar o certificado Burp em uma Máquina Virtual

Primeiro, você precisa baixar o certificado Der do Burp. Você pode fazer isso em Proxy --> Opções --> Importar/Exportar certificado CA

Exporte o certificado no formato Der e vamos transformá-lo em um formato que o Android será capaz de entender. Note que para configurar o certificado burp na máquina Android no AVD, você precisa executar esta máquina com a opção -writable-system.
Por exemplo, você pode executá-lo assim:

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

Em seguida, para configurar o certificado do Burp, faça o seguinte:

{% code overflow="wrap" %}

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 && sleep 2 && 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

{% endcode %}

Uma vez que a máquina terminar de reiniciar, o certificado do Burp estará em uso por ela!

Instalar o Certificado do Burp com Magisc

Se você fez root no seu dispositivo com Magisc (talvez um emulador) e não consegue seguir as etapas anteriores para instalar o certificado do Burp porque o sistema de arquivos é somente leitura e você não pode remontá-lo como gravável, há outra maneira.

Explicado neste vídeo, você precisa:

  1. Instalar um certificado CA: Basta arrastar e soltar o certificado DER do Burp alterando a extensão para .crt no celular para que ele seja armazenado na pasta Downloads e vá para Instalar um certificado -> Certificado CA
  • Verifique se o certificado foi armazenado corretamente indo para Credenciais confiáveis -> USUÁRIO
  1. Torná-lo confiável pelo sistema: Baixe o módulo Magisc MagiskTrustUserCerts (um arquivo .zip), arraste e solte-o no telefone, vá para o aplicativo Magics no telefone para a seção Módulos, clique em Instalar a partir do armazenamento, selecione o módulo .zip e uma vez instalado, reinicie o telefone:
  • Após reiniciar, vá para Credenciais confiáveis -> SISTEMA e verifique se o certificado do Postswigger está lá

Ótimas Opções AVD

Tirar um Snapshot

Você pode usar a interface gráfica para tirar um snapshot da VM a qualquer momento:

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