Exploiting a debuggeable application

Exploiter une application débogable

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS HackTricks)!

Autres façons de soutenir HackTricks :

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

  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 zippez l'application modifiée.

  1. Installer l'application modifiée :

  • Utilisez la commande : adb install <nom_application>.

  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. 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>.

  1. Préparation pour le débogage dans Android Studio :

  • Naviguez dans Android Studio vers Fichier -> Ouvrir Profil ou 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 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 :

  1. 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 est 11000011100111011110, indiquant que le "Flag_debuggable" est actif.

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 fichier AndroidManifest.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 et methods <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 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é 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

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS HackTricks)!

Autres façons de soutenir HackTricks :

Last updated