hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

8 KiB
Raw Blame History

Exploiter une application débogable

{% hint style="success" %} Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Supportez HackTricks
{% endhint %}

Contourner les vérifications de root et 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

  1. 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 zipalign l'application modifiée.
  1. Installer l'application modifiée :
  • Utilisez la commande : adb install <application_name>.
  1. 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.
  1. Configurer l'application pour attendre la connexion du débogueur :
  • Commande : adb shell am setup-debug-app w <package_name>.
  • 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 <package_name>.
  • Pour supprimer tous les drapeaux, utilisez adb shell am clear-debug-app <package_name>.
  1. Préparer le débogage dans Android Studio :
  • Naviguez dans Android Studio vers File -> Open Profile or APK.
  • Ouvrez l'APK recompilé.
  1. 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éthode onCreate), b.java, et ContextWrapper.java.

Contourner les vérifications

L'application, à certains moments, vérifiera si elle est débogable et vérifiera également la présence de 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 altérer les noms des binaires recherchés pour contourner ces vérifications.

Pour la vérification débogable :

  1. Modifier les paramètres de drapeau :
  • Dans la section des variables de la console du débogueur, naviguez vers : this mLoadedAPK -> mApplicationInfo -> flags = 814267974.
  • Remarque : La représentation binaire de flags = 814267974 est 11000011100111011110, indiquant que le "Flag_debuggable" est actif.

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

Ces étapes garantissent collectivement que l'application peut être déboguée et que certaines vérifications de sécurité peuvent être contournées à l'aide du débogueur, facilitant une analyse ou une modification plus approfondie du comportement de l'application.

L'étape 2 consiste à changer une valeur de drapeau à 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. Au départ, l'application affiche "Crack Me". L'objectif est de modifier le message de "Try Again" à "Hacked" à l'exécution, sans modifier le code source.

Vérification de la vulnérabilité

  • L'application a été décompilée à l'aide de apktool pour accéder au fichier AndroidManifest.xml.
  • La présence de android_debuggable="true" dans le AndroidManifest.xml indique que l'application est débogable et susceptible d'exploitation.
  • 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 a impliqué le lancement d'un émulateur, l'installation de l'application vulnérable et l'utilisation de adb jdwp pour identifier les ports Dalvik VM à l'é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 transfert de port était nécessaire pour le débogage à distance, suivi de l'attachement de JDB à l'application cible.

Injection de code à l'exécution

  • 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 comme classes et methods <class_name> 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 et set 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é à l'aide de 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é, soulignant 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

{% hint style="success" %} Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Supportez HackTricks
{% endhint %}