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

290 lines
16 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
# AVD - Appareil virtuel Android
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
2023-06-03 13:10:46 +00:00
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
Un grand merci à [**@offsecjay**](https://twitter.com/offsecjay) pour son aide lors de la création de ce contenu.
2020-09-10 15:57:58 +00:00
2023-06-03 13:10:46 +00:00
## Qu'est-ce que c'est
Android Studio permet d'**exécuter des machines virtuelles Android que vous pouvez utiliser pour tester les APK**. Pour les utiliser, vous aurez besoin de :
* Les **outils Android SDK** - [Téléchargez ici](https://developer.android.com/studio/releases/sdk-tools).
* Ou **Android Studio** (avec les outils Android SDK) - [Téléchargez ici](https://developer.android.com/studio).
Sous Windows (dans mon cas), **après avoir installé Android Studio**, j'ai les **outils SDK installés dans** : `C:\Users\<NomUtilisateur>\AppData\Local\Android\Sdk\tools`
2021-04-07 12:08:35 +00:00
Sous Mac, vous pouvez **télécharger les outils SDK** et les avoir dans le PATH en exécutant :
2021-04-07 12:08:35 +00:00
```bash
brew tap homebrew/cask
brew install --cask android-sdk
```
Ou à partir de l'interface graphique d'**Android Studio** comme indiqué dans [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) qui les installera dans `~/Library/Android/sdk/cmdline-tools/latest/bin/` et `~/Library/Android/sdk/platform-tools/` et `~/Library/Android/sdk/emulator/`
Pour les problèmes de Java:&#x20;
```java
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
2021-04-07 12:08:35 +00:00
```
2022-05-01 13:25:53 +00:00
## GUI
2023-06-03 13:10:46 +00:00
### Préparer la machine virtuelle
Si vous avez installé Android Studio, vous pouvez simplement ouvrir la vue principale du projet et accéder à : _**Outils**_ --> _**Gestionnaire AVD**_.
<div align="center" data-full-width="false">
<figure><img src="../../.gitbook/assets/image (670).png" alt="" width="293"><figcaption></figcaption></figure>
</div>
Ensuite, cliquez sur _**Créer un périphérique virtuel**_
<figure><img src="../../.gitbook/assets/image (671).png" alt="" width="188"><figcaption></figcaption></figure>
_**sélectionnez** le téléphone que vous souhaitez utiliser_ et cliquez sur _**Suivant**_.
{% hint style="warning" %}
Si vous avez besoin d'un téléphone avec Play Store installé, sélectionnez-en un avec l'icône Play Store !
![](<../../.gitbook/assets/image (672).png>)
{% endhint %}
Dans la vue actuelle, vous allez pouvoir **sélectionner et télécharger l'image Android** que le téléphone va exécuter :
<figure><img src="../../.gitbook/assets/image (673).png" alt="" width="375"><figcaption></figcaption></figure>
Sélectionnez donc l'image et si elle n'est pas téléchargée, cliquez sur le symbole _**Télécharger**_ à côté du nom (**maintenant attendez que l'image soit téléchargée).**\
Une fois l'image téléchargée, sélectionnez simplement **`Suivant`** et **`Terminer`**.
2023-06-03 13:10:46 +00:00
La machine virtuelle sera créée. Maintenant, **à chaque fois que vous accédez au gestionnaire AVD, elle sera présente**.
2023-06-03 13:10:46 +00:00
### Exécuter la machine virtuelle
2023-06-03 13:10:46 +00:00
Pour la **lancer**, appuyez simplement sur le _**bouton Démarrer**_.
![](<../../.gitbook/assets/image (334).png>)
2023-06-03 13:10:46 +00:00
## Outil en ligne de commande
Tout d'abord, vous devez **décider quel téléphone vous souhaitez utiliser**, afin de voir la liste des téléphones possibles, exécutez :
```
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
[...]
```
Une fois que vous avez décidé du nom de l'appareil que vous souhaitez utiliser, vous devez **décider de l'image Android que vous souhaitez exécuter sur cet appareil**.\
2023-06-03 13:10:46 +00:00
Vous pouvez lister toutes les options en utilisant `sdkmanager`:
2020-09-10 15:57:58 +00:00
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list
```
Et **téléchargez** celui (ou tous ceux) que vous souhaitez utiliser avec :
{% code overflow="wrap" %}
2020-09-10 15:57:58 +00:00
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64"
```
{% endcode %}
Une fois que vous avez téléchargé l'image Android que vous souhaitez utiliser, vous pouvez **afficher la liste de toutes les images Android téléchargées** avec la commande suivante :
```
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
```
À ce moment, vous avez décidé de l'appareil que vous souhaitez utiliser et vous avez téléchargé l'image Android, donc **vous pouvez créer la machine virtuelle en utilisant** :
{% code overflow="wrap" %}
```bash
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 %}
Dans la dernière commande, **j'ai créé une machine virtuelle nommée** "_AVD9_" en utilisant le **périphérique** "_Nexus 5X_" et l'**image Android** "_system-images;android-28;google\_apis;x86\_64_".\
Maintenant, vous pouvez **listez les machines virtuelles** que vous avez créées avec:
```bash
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
```
2023-06-03 13:10:46 +00:00
### Exécuter une machine virtuelle
Nous avons déjà vu comment vous pouvez répertorier les machines virtuelles créées, mais **vous pouvez également les répertorier en utilisant** :
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds
AVD9
Pixel_2_API_27
```
Vous pouvez simplement **exécuter n'importe quelle machine virtuelle créée** en utilisant :
{% code overflow="wrap" %}
```bash
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 en utilisant des options plus avancées, vous pouvez exécuter une machine virtuelle comme suit:
{% code overflow="wrap" %}
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
{% endcode %}
2023-06-03 13:10:46 +00:00
### Options de ligne de commande
Cependant, il existe **de nombreuses options utiles en ligne de commande** que vous pouvez utiliser pour démarrer une machine virtuelle. Ci-dessous, vous trouverez quelques options intéressantes, mais vous pouvez [**trouver une liste complète ici**](https://developer.android.com/studio/run/emulator-commandline)
2023-06-03 13:10:46 +00:00
**Démarrage**
* `-snapshot name` : Démarrer une capture instantanée de la machine virtuelle
* `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : Lister toutes les captures instantanées enregistrées
2023-06-03 13:10:46 +00:00
**Réseau**
* `-dns-server 192.0.2.0, 192.0.2.255` : Permet d'indiquer les serveurs DNS séparés par des virgules à utiliser par la machine virtuelle.
2023-06-03 13:10:46 +00:00
* **`-http-proxy 192.168.1.12:8080`** : Permet d'indiquer un proxy HTTP à utiliser (très utile pour capturer le trafic à l'aide de Burp)
* `-port 5556` : Définit le numéro de port TCP utilisé pour la console et adb.
* `-ports 5556,5559` : Définit les ports TCP utilisés pour la console et adb.
* **`-tcpdump /path/dumpfile.cap`** : Capture tout le trafic dans un fichier
2023-06-03 13:10:46 +00:00
**Système**
* `-selinux {disabled|permissive}` : Définit le module de sécurité Linux amélioré (SELinux) en mode désactivé ou permissif sur un système d'exploitation Linux.
* `-timezone Europe/Paris` : Définit le fuseau horaire pour le périphérique virtuel
* `-screen {touch(default)|multi-touch|o-touch}` : Définit le mode d'écran tactile émulé.
* **`-writable-system`** : Utilisez cette option pour avoir une image système modifiable pendant votre session d'émulation. Vous devrez également exécuter `adb root; adb remount`. Cela est très utile pour installer un nouveau certificat dans le système.
## Obtenir les droits root sur un appareil Play Store
Si vous avez téléchargé un appareil avec Play Store, vous ne pourrez pas obtenir directement les droits root et vous obtiendrez ce message d'erreur
```
$ adb root
adbd cannot run as root in production builds
```
En utilisant [rootAVD](https://github.com/newbit1/rootAVD) avec [Magisk](https://github.com/topjohnwu/Magisk), j'ai réussi à le rooter (suivez par exemple [**cette vidéo**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ou** [**celle-ci**](https://www.youtube.com/watch?v=qQicUW0svB8)).
2023-06-03 13:10:46 +00:00
## Installer le certificat Burp sur une machine virtuelle
Tout d'abord, vous devez télécharger le certificat Der à partir de Burp. Vous pouvez le faire dans _**Proxy**_ --> _**Options**_ --> _**Importer / Exporter le certificat CA**_
![](<../../.gitbook/assets/image (367).png>)
**Exportez le certificat au format Der** et **transformez-le** en une forme que **Android** pourra **comprendre**. Notez que **pour configurer le certificat Burp sur la machine Android dans AVD**, vous devez **exécuter** cette machine **avec l'option** **`-writable-system`**.\
Par exemple, vous pouvez l'exécuter comme suit:
{% code overflow="wrap" %}
```bash
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
```
{% endcode %}
2023-06-03 13:10:46 +00:00
Ensuite, pour **configurer le certificat de Burp**, faites ce qui suit :
{% code overflow="wrap" %}
```bash
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 %}
Une fois que la **machine a fini de redémarrer**, le certificat Burp sera utilisé par celle-ci !
## Installer le certificat Burp avec Magisc
Si vous avez **rooté votre appareil avec Magisc** (peut-être un émulateur) et que vous **ne pouvez pas suivre** les étapes précédentes pour installer le certificat Burp car le **système de fichiers est en lecture seule** et que vous ne pouvez pas le remonter en écriture, il existe une autre solution.
Expliqué dans [**cette vidéo**](https://www.youtube.com/watch?v=qQicUW0svB8), vous devez :
1. **Installer un certificat CA** : Faites simplement **glisser et déposer** le certificat Burp DER en **changeant l'extension** en `.crt` sur le mobile afin qu'il soit stocké dans le dossier Téléchargements, puis allez dans `Installer un certificat` -> `Certificat CA`
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
* Vérifiez que le certificat a été correctement stocké en allant dans `Certificats de confiance` -> `UTILISATEUR`
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
2. **Rendez-le fiable pour le système** : Téléchargez le module Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un fichier .zip), **glissez et déposez-le** sur le téléphone, allez dans l'application Magics sur le téléphone dans la section **`Modules`**, cliquez sur **`Installer depuis le stockage`**, sélectionnez le module `.zip` et une fois installé, **redémarrez** le téléphone :
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
* Après le redémarrage, allez dans `Certificats de confiance` -> `SYSTÈME` et vérifiez que le certificat Postswigger est présent
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
## Options AVD intéressantes
### Prendre une capture d'écran
Vous pouvez **utiliser l'interface graphique** pour prendre une capture d'écran de la machine virtuelle à tout moment :
![](<../../.gitbook/assets/image (336).png>)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
2023-06-03 13:10:46 +00:00
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-03 13:10:46 +00:00
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>