Exploiting a debuggeable application
Exploiter une application débogable
Contourner les vérifications de root et de débogage
Cette section du post est un résumé du post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Étapes pour rendre une application Android débogable et contourner les vérifications
Rendre l'application débogable
Contenu basé sur https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Décompiler l'APK :
Utilisez l'outil APK-GUI pour décompiler l'APK.
Dans le fichier android-manifest, insérez
android:debuggable=true
pour activer le mode débogage.Recompilez, signez et zippez l'application modifiée.
Installer l'application modifiée :
Utilisez la commande :
adb install <nom_application>
.
Récupérer le nom du package :
Exécutez
adb shell pm list packages –3
pour lister les applications tierces et trouver le nom du package.
Définir l'application pour attendre la connexion du débogueur :
Commande :
adb shell am setup-debug-app –w <nom_package>
.Remarque : Cette commande doit être exécutée à chaque fois avant de démarrer l'application pour s'assurer qu'elle attend le débogueur.
Pour la persistance, utilisez
adb shell am setup-debug-app –w -–persistent <nom_package>
.Pour supprimer tous les drapeaux, utilisez
adb shell am clear-debug-app <nom_package>
.
Préparation pour le débogage dans Android Studio :
Naviguez dans Android Studio vers Fichier -> Ouvrir Profil ou APK.
Ouvrez l'APK recompilé.
Définir des points d'arrêt dans des fichiers Java clés :
Placez des points d'arrêt dans
MainActivity.java
(spécifiquement dans la méthodeonCreate
),b.java
etContextWrapper.java
.
Contourner les vérifications
L'application, à certains moments, vérifiera si elle est débogable et vérifiera également les binaires indiquant un appareil rooté. Le débogueur peut être utilisé pour modifier les informations de l'application, désactiver le bit débogable et modifier les noms des binaires recherchés pour contourner ces vérifications.
Pour la vérification de débogage :
Modifier les paramètres du drapeau :
Dans la section variable de la console du débogueur, accédez à :
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.Remarque : La représentation binaire de
flags = 814267974
est11000011100111011110
, indiquant que le "Flag_debuggable" est actif.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F1*-ckiSbWGSoc1beuxxpKbow.png&width=768&dpr=4&quality=100&sign=f015bdd2&sv=1)
Ces étapes garantissent collectivement que l'application peut être déboguée et que certaines vérifications de sécurité peuvent être contournées en utilisant le débogueur, facilitant une analyse ou une modification plus approfondie du comportement de l'application.
L'étape 2 implique de changer une valeur de drapeau en 814267972, qui est représentée en binaire comme 110000101101000000100010100.
Exploiter une vulnérabilité
Une démonstration a été fournie en utilisant une application vulnérable contenant un bouton et un textview. Initialement, l'application affiche "Crack Me". L'objectif est de modifier le message de "Try Again" à "Hacked" en temps réel, sans modifier le code source.
Vérification de la vulnérabilité
L'application a été décompliée en utilisant
apktool
pour accéder au fichierAndroidManifest.xml
.La présence de
android_debuggable="true"
dans AndroidManifest.xml indique que l'application est débogable et susceptible d'être exploitée.Il convient de noter que
apktool
est utilisé uniquement pour vérifier le statut débogable sans modifier de code.
Préparation de la configuration
Le processus impliquait de démarrer un émulateur, d'installer l'application vulnérable et d'utiliser
adb jdwp
pour identifier les ports Dalvik VM en écoute.Le JDWP (Java Debug Wire Protocol) permet de déboguer une application s'exécutant dans une VM en exposant un port unique.
Le renvoi de port était nécessaire pour le débogage à distance, suivi de l'attachement de JDB à l'application cible.
Injection de code en temps réel
L'exploitation a été réalisée en définissant des points d'arrêt et en contrôlant le flux de l'application.
Des commandes telles que
classes
etmethods <nom_classe>
ont été utilisées pour découvrir la structure de l'application.Un point d'arrêt a été défini dans la méthode
onClick
, et son exécution a été contrôlée.Les commandes
locals
,next
etset
ont été utilisées pour inspecter et modifier les variables locales, en particulier en changeant le message "Try Again" en "Hacked".Le code modifié a été exécuté en utilisant la commande
run
, modifiant avec succès la sortie de l'application en temps réel.
Cet exemple a démontré comment le comportement d'une application débogable peut être manipulé, mettant en évidence le potentiel d'exploits plus complexes comme l'obtention d'un accès shell sur l'appareil dans le contexte de l'application.
Références
Last updated