October 28, 2026
Pentesting/Bug Bounty d’une Application Mobile : Analyse dynamique.
Objectif : Cet article a pour but de présenter la démarche afin de réaliser l’analyse dynamique d’une application mobile dans le cadre d’un…
By Wilfried audrey Baleba
9 min read
Objectif : Cet article a pour but de présenter la démarche afin de réaliser l'analyse dynamique d'une application mobile dans le cadre d'un pentest, d'une chasse au bugs ou d'un red teaming.
INTRODUCTION
L'analyse dynamique vise à analyser l'application mobile pendant son fonctionnement donc nous avons besoin d'exécuter l'application. Ce qui n'est pas le cas dans le cadre de l'analyse statique. Une application mobile doit donc être installé sur un téléphone avant de pouvoir réaliser son analyse dynamique. Cela consiste à installer, lancer l'application et d'observer son fonctionnement (appels API, Onboarding, etc). Il ne s'agit pas uniquement d'observer mais aussi d'interagir avec cette dernière pour la comprendre et essayer de trouver des vulnérabilités dessus. Pour se faire nous avons besoin d'un téléphone android/ios physique ou virtuel pour réaliser cette activité. Il y'a un ensemble d'étape à suivre allant de la configuration de l'environnement jusqu'à éventuellement le bypass du SSL pining afin de pouvoir réaliser l'analyse dynamique.
I- ETAPE 1 : PREPARATION
Il s'agit ici de préparer l'élément sur lequel nous allons installé notre application à analyse, ainsi que notre environnement de travail. Dans le cas de cet article, nous allons utilisé un téléphone virtuel fournit par android studio. Donc nous allons sur notre PC :
- Télécharger et installer android studio sur le site officiel (https://developer.android.com/studio?hl=fr) ;
- Créer un virtual device (Télephone virtuel) sur Android Studio via le Device Manager ;
- Télécharger et installer burp suite community sur le site officiel (https://portswigger.net/burp/communitydownload) ;
- Télécharger et installer adb (Android Debug Bridge)et fastboot sur (https://developer.android.com/tools/releases/platform-tools?hl=fr ou https://android-sdk-platform-tools.fr.uptodown.com/windows ;
- Télécharger et dezipper RootAVD via le dépôt officiel (https://gitlab.com/newbit/rootAVD). Si vous avez une version plus récente de version d'android qui n'est pas pris en charge par le dépôt offciel, utilisez (https://github.com/galihlasahido/rootAVD).
- Télécharger et installer frida (pip install frida-tools) et vérifier sa version (frida — version, moi j'ai la version 17.24.3)
- Telécharger et dezipper un asset (par exemple frida-server-17.24.3-android-x86_64.xz) de frida server. La version de l'asset doit dépendre de la version de frida précédemment installée et de l'architecture de mon téléphone. Pour avoir une idée de l'architecture après avoir ouvert le dossier de adb dans le terminal, j'exécute la commande (.\adb.exe shell getprop ro.product.cpu.abi qui permet d'avoir l'architecture de mon téléphone x86_64 dans mon cas). Ensuite je me rends sur (https://github.com/frida/frida/releases) pour télécharger l'asset correspondant.
- Création un fichier .js (moi j'ai utilisé script-ssl-pinning.js) et copier le script (https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/) qui peut être utilisé pour effectuer un bypass du ssl pinning.
II- ETAPE 2: CONFIGURATION DU PROXY
A) CONFIGURATION DE BURP SUITE
L'idée c'est de configurer burp suite afin qu'il puisse écouter sur un port spécifique de son IP. Ainsi donc nous allons :
- Obtenir notre addresse IP : Nous ouvrons le powershell et exécutons la commande suivante ipconfig. Comme mon pc a juste la possibilité d'accéder à internet en utilisant une connexion wifi, je recherche la section wireless LAN adapter wi-fi, puis la sous section IPV4 Address. Ainsi mon IP est 192.168.1.105 comme le montre la figure ci-dessous :
- Configurer le proxy sur burp suite : Pour cela nous ouvrons Burp Suite, ensuite nous rendons dans le menu proxy, puis dans proxy settings, puis dans proxy listener. Nous l'éditons en définissans l'ip précedente et le port 8080, dans la section "request handling" nous cochons la case de "support invisible proxying (enable only if needed)". Les images suivantes illustrent cette configuration :
- Exporter les configurations (facultatif) : Pour eviter de refaire la même chose à chaque nouvelle ouverture de burp Suite, nous pouvons exporter au fichiers json les configurations de cette session de travail. Nous allons dans Projet > Project Settings > Save Project Settings, ensuite nous donnons le nom à notre configuration par exemple burp_mobile_pentesting.json. Ainsi à la reouverture de Burp Suite, nous chercherons juste ce fichier dans son emplacement puis nous allons le charger au démarrage. Nous pouvons voir cela dans la figure suivante :
B) CONFIGURATION DU PROXY SUR LE TELEPHONE VIRTUEL
L'objectif ici consiste à parametré le proxy sur le teléphone virtuel afin que ses paquets puisse transister sur l'application Burp Suite. Pour ce faire, nous allons procéder de la manière suivante :
- Configurer Android Studio : Il s'agira de modifier les paramètres de Android Studio afin que l'option proxy puisse être disponible sur notre téléphone virtuel. Nous nous rendons dans File > Settings > Emulator à ce stade nous allons décocher la case de "Launch in the Running Devices tool window" comme nous le montre l'image suivante :
- Démarrer notre Téléphone Virtuel (par exmple Pixel 7) : Une fois le téléphone allumé nous allons dans More (matérialisé par les trois points ) > Settings et nous définissons manuellement notre proxy en renseignant l'ip de notre PC et le port 8080. Tout ceci est représenté sur les images suivantes :
- Ajouter le proxy au wifi du téléphone : Après avoir réalisé l'étape précédente, nous devons aussi ajouter cela au niveau du wifi sur lequel le téléphone est connecté. Ainsi, nous allons dans Settings > Network & internet > Paramètre du wifi sur lequel notre téléphone est connecté > Modifier (crayon sur l'écran) > Advanced options > Proxy (nous mettons sur manuel) et par la suite nous renseignons l'ip de notre machine comme hostname et le port 8080. Les images ci-dessous résument cette configuration :
- Exporter le certificat depuis Burp Suite : Nous nous rendons dans Proxy > Proxy Settings > Proxy Listener > Import/Export CA Certificate > ensuite nous cochons la case "Certificate in DER format", nous allons sur Next. Par la suite sur select nous choississons l'emplacement de notre certificat ainsi que son nom burpcert.crt, puis sur Next encore et ce dernier a été crée. L'ensemble des images suivantes résument cette étape :
- Envoyer le certificat dans notre téléphone virtuel : Nous allons ouvrir dans le terminal notre dossier contenant adb, ensuite nous allons exécuter la commande ".\adb.exe push C:\Users\Administrator\Desktop\burpcert.crt /sdcard/Download". Si tout c'est bien passé nous pouvons constater dans l'image suivante que le fichier a bien été envoyé sur notre Pixel 7 :
- Installer le certificat de Burp Suite sur notre téléphone : Nous allons commencer par le déplacer dans le dossier "Download". Une fois que cela est fait, sur le téléphone nous dans Settings > Security &privacy > More Security &privacy > Encryption & credentials > Install a certificate > CA certificate > INSTALL ANYWAY et de là, nous allons donc dans le dossier "Download" chercher notre certificat. Nous double cliquons dessus et le certificat est installé. Les images suivantes résument cette configuration :
- Visualer la remonter des données des applications : Après avoir configuré tout ceci, nous pouvons si nous avrons notre navigateur (chrome) que le traffic s'affiche désormais sur Burp suite comme nous le montre la figure suivante :
C) CONFIGURATION DU MODE ROOT SUR LE TELEPHONE VIRTUEL
Notre objectif est de router notre téléphone afin de pouvoir l'utiliser pleine pour notre analyse. Ainsi nous allons :
- Ouvrir le dossier dezippé de RootAVD dans le terminal : L'objectif est justement de pouvoir exécuter des scripts de routage. Une fois que nous avons ouvert, nous pouvons voir les différentes options disponible dans RootAVD avec la commande .\rootAVD.bat ListAllAVDs sur les images suivantes :
- Exécuter le routage : Pour ce faire nous avons besoin d'avoir la bonne version android utilisé par notre émulateur. Nous allons Device Manager > Puis sur les trois (…) verticaux > View Details > Target nous pouvons constater la version dans notre nous en avons plusieurs (android-35, android-36, android-37.2. Dans mon cas je vais utiliser la version 35 ainsi, je vais lancer le script ".\rootAVD.bat system-images\android-35\google_apis_playstore_ps16k\x86_64\ramdisk.img". Les images suivantes résument cette situation :
- Terminer la configuration du routage : Après avoir exécuter le téléphone va s'éteindre. Nous allons le rédemarrer. Nous voyons une application Magisk installé. Nous ouvrons l'application, elle va nous demander de rédemarrer pour que l'ensemble du nécessaire soit opérationnel.
- Passer en mode root : Après que le téléphone ait redémarré, nous allons utiliser adb pour passer en mode super utilisateur. Ainsi, nous ouvrons dans le terminal powershell le dossier de notre outil adb précédemment téléchargé. Une fois que c'est fait, nous lancons l'application magisk sur notre téléphone. Ensuite la suite consiste à vérifier si nous ne sommes pas déjà en mode superutilisateur via la commande adb root. Si ce n'est pas le cas, nous allons d'abord nous connecter (adb shell) au téléphone et ensuite exécuter la commande (su) pour passer en mode super utilisateur et valider sur le téléphone. L'image suivante résume cette configuration :
III- ETAPE 3: BYPASS DU SSL PINNING
Pour le moment en observant l'image ci-dessous, on peut constater que lorsque j'ouvre une application il détecte un proxy et par conséquent ne charge plus le reste (regardons juste les event log).
L'idée est donc de pouvoir parcourir mon application sans souci et voir les requêtes et les appels api côté burp suite. Pour ce faire, je vais utiliser frida pour bypasser cette sécurité TLS, ce qui revient à bypasser le SSL PINNING. je commence par :
- Configurer frida-server : Ainsi, dans le terminal de notre outil adb, nous allons exécuter la commande "adb push asset-frida-server-path /data/local/tmp/". Donc dans mon cas, j'aurai un truc du genre ".\adb.exe push C:\Users\Administrator\Desktop\frida-server-17.24.3-android-x86_64 /data/local/tmp/". Par la suite je vais attribuer les droits (chmod 755 ./data/local/tmp/frida-server-17.24.3-android-x86_64 ) afin de pouvoir l'exécuter sur mon téléphone android et l'exécuter. L'exécuter revient à .\adb.exe shell > su > ./data/local/tmp/frida-server-17.24.3-android-x86_64 . Une fois que c'est fais je peux visualiser les processus frida avec la commande "frida-ps -U". Les images suivantes résument l'ensemble de ces configurations :
- Exécuter le script pour le bypass du ssl : Afin de pouvoir exécuter ce script nous allons d'abord renvoyer ou déplacer notre certificat qu'on avait mis dans download , nous allons le mettre plutôt dans /data/local/tmp/ ou utiliser la commande suivante depuis le terminal de notre dossier outil adb ".\adb.exe push C:\Users\Administrator\Desktop\burpcert.crt /data/local/tmp/cert-der.crt". Ensuite nous allons exécuter la commande "frida -U -f nom_du_package_application -l nom_scrip_ssl_bypass_pinning.js" dans un autre terminal. Ainsi dans notre cas, "frida -U -f com.jeuvideo.android -l C:\Users\Administrator\Desktop\script-ssl-pinning.js". Nous allons afin lancer notre script qui doit bypasser le ssl pinning. Au même moment nous devons garder l'exécution de frida-server lancé à l'étape précédente via adb dans un autre terminal. Une fois le script exécuté, nous allons donc lancer notre application et nous pouvons constater que les event log n'affiche plus ce problème TLS lié au certificat.
NB : Nous allons réaliser cette étape n fois en fonction du nombre d'application pour lesquelles nous voulons faire l'analyse dynamique. Donc si nous voulons faire l'analyse dynamique de balebajeuvideo.apk et wilfriedstreaming.apk nous allons faire cette étape deux fois.