Objection Tutorial
Conseil de prime de bug : inscrivez-vous sur Intigriti, une plateforme de prime de bug premium créée par des pirates informatiques, pour les pirates informatiques ! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $ !
Introduction
objection - Exploration mobile en temps d'exécution
Objection est une boîte à outils d'exploration mobile en temps d'exécution, alimentée par Frida. Il a été construit dans le but d'aider à évaluer les applications mobiles et leur posture de sécurité sans avoir besoin d'un appareil mobile jailbreaké ou rooté.
Remarque : Il ne s'agit pas d'une forme de contournement de jailbreak / root. En utilisant objection
, vous êtes toujours limité par toutes les restrictions imposées par le bac à sable applicable auquel vous êtes confronté.
Résumé
Le but d'objection est de permettre à l'utilisateur d'appeler les principales actions offertes par Frida. Sinon, l'utilisateur devra créer un script unique pour chaque application qu'il souhaite tester.
Tutoriel
Pour ce tutoriel, je vais utiliser l'APK que vous pouvez télécharger ici :
Ou depuis son dépôt d'origine (téléchargez app-release.apk)
Installation
Connexion
Établissez une connexion ADB normale et démarrez le serveur frida sur l'appareil (et vérifiez que frida fonctionne à la fois sur le client et sur le serveur).
Si vous utilisez un appareil rooté, il est nécessaire de sélectionner l'application que vous souhaitez tester à l'intérieur de l'option --gadget. dans ce cas :
Actions de base
Toutes les commandes possibles d'objections ne seront pas répertoriées dans ce tutoriel, seulement celles que j'ai trouvées les plus utiles.
Environnement
Certaines informations intéressantes (comme des mots de passe ou des chemins d'accès) pourraient être trouvées dans l'environnement.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-a15396d7921ec411dd889b31f1a518fda22f042c%252Fimage%2520%2864%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=29817cff&sv=1)
Informations sur Frida
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-9181a7d109dccb8412635a30668d8014b6631a5a%252Fimage%2520%2865%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2ef56b29&sv=1)
Téléchargement/Téléchargement
Importer le script frida
SSLPinning
Épinglage SSL
Détection de root
Commande Exec
Captures d'écran
Analyse statique rendue dynamique
Dans une application réelle, nous devrions connaître toutes les informations découvertes dans cette partie avant d'utiliser objection grâce à l'analyse statique. Quoi qu'il en soit, de cette manière, vous pouvez peut-être voir quelque chose de nouveau car ici vous n'aurez qu'une liste complète des classes, des méthodes et des objets exportés.
Cela est également utile si, d'une manière ou d'une autre, vous êtes incapable d'obtenir un code source lisible de l'application.
Liste des activités, des récepteurs et des services
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-7e07102b4e6f87e96c3cf4594a136d3590691ab7%252Fimage%2520%2878%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b0eeedfc&sv=1)
Frida lancera une erreur si aucun n'est trouvé
Obtenir l'activité actuelle
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-74a3163d5e09a99eb2f038694ec0dbfdcac1a99b%252Fimage%2520%2873%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5303097c&sv=1)
Rechercher des classes
Commençons à rechercher des classes à l'intérieur de notre application
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-1ee9326a975e60d9b89c0e3d5fe185992cbd3fcb%252Fimage%2520%2869%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4588c327&sv=1)
Rechercher les méthodes d'une classe
Maintenant, extrayons les méthodes à l'intérieur de la classe MainActivity:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-1978dd558bcc997a2b44343ac7af9829143d0dcd%252Fimage%2520%2870%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=188273dc&sv=1)
Liste des méthodes déclarées d'une classe avec leurs paramètres
Découvrons quels paramètres les méthodes de la classe nécessitent :
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-006ca9f28c8918e23f7d6a94dcbe93bc208cbad8%252Fimage%2520%2879%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=a2ee1db4&sv=1)
Liste des classes
Vous pouvez également lister toutes les classes qui ont été chargées dans l'application actuelle :
Ceci est très utile si vous voulez accrocher la méthode d'une classe et que vous ne connaissez que le nom de la classe. Vous pouvez utiliser cette fonction pour rechercher quel module possède la classe et ensuite accrocher sa méthode.
Accrocher étant facile
Accrocher (surveiller) une méthode
À partir du code source de l'application, nous savons que la fonction sum() de MainActivity est exécutée toutes les secondes. Essayons de dumper toutes les informations possibles à chaque fois que la fonction est appelée (arguments, valeur de retour et backtrace):
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-b010358dd58a1b962e52a5c5cccc0ad3fe94e250%252Fimage%2520%2871%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=405de541&sv=1)
Accrocher (observer) une classe entière
En fait, je trouve tous les méthodes de la classe MainActivity vraiment intéressantes, accrochons-les toutes. Soyez prudent, cela pourrait faire planter une application.
Si vous jouez avec l'application pendant que la classe est accrochée, vous verrez quand chaque fonction est appelée, ses arguments et la valeur de retour.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-7db5cbb7b07bcb7fa428cbd450b13cd47f022997%252Fimage%2520%2872%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=83f823e6&sv=1)
Changer la valeur de retour booléenne d'une fonction
À partir du code source, vous pouvez voir que la fonction checkPin reçoit une String en argument et renvoie un boolean. Faisons en sorte que la fonction renvoie toujours true :
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-877c67db112f6e5b507630bf5f8ec5fc1620eb66%252Fimage%2520%2874%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4c87a71&sv=1)
Maintenant, si vous écrivez quelque chose dans la zone de texte pour le code PIN, vous verrez que tout est valide :
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-3e9c614b9566726b780aa8b994ffe0c333adf618%252Fimage%2520%2877%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ad38912c&sv=1)
Instances de classe
Recherchez et affichez les instances en direct d'une classe Java spécifique, spécifiée par un nom de classe entièrement qualifié. Out est le résultat d'une tentative d'obtention d'une valeur de chaîne pour une objection découverte qui contiendrait généralement des valeurs de propriété pour l'objet.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-bc3c40e93d4448fb6cd7847a09def112744fe463%252Fimage%2520%2880%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=b3451165&sv=1)
Keystore/Intents
Vous pouvez jouer avec le keystore et les intents en utilisant :
Mémoire
Extraction
Liste
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-2515a86824aeb76433556a4e4d4b9fcd51ba353a%252Fimage%2520%2866%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4d3e04f8&sv=1)
En bas de la liste, vous pouvez voir frida :
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-ac353e4c43f8b5470e4ab7e2a302cbb0381340c4%252Fimage%2520%2867%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9799542a&sv=1)
Vérifions ce que frida exporte :
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-2f8a8d54cec70561d458fa19b847e4c563761f1b%252Fimage%2520%2868%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=c19bf94c&sv=1)
Recherche/Écriture
Vous pouvez également rechercher et écrire dans la mémoire avec objection :
SQLite
Vous pouvez utiliser la commande sqlite
pour interagir avec les bases de données SQLite.
Exit
Ce qui me manque dans Objection
Les méthodes de hooking font parfois planter l'application (c'est aussi à cause de Frida).
Vous ne pouvez pas utiliser les instances des classes pour appeler les fonctions de l'instance. Et vous ne pouvez pas créer de nouvelles instances de classes et les utiliser pour appeler des fonctions.
Il n'y a pas de raccourci (comme celui pour sslpinnin) pour hooker toutes les méthodes de cryptographie courantes utilisées par l'application afin de voir le texte chiffré, le texte en clair, les clés, les IV et les algorithmes utilisés.
Conseil de prime de bug : inscrivez-vous sur Intigriti, une plateforme de prime de bug premium créée par des hackers, pour des hackers ! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui, et commencez à gagner des primes allant jusqu'à 100 000 $!
Last updated