Application Espion Téléphone
Surveillez les appels, SMS, Gps, appareil photo, photos, vidéos, Whatsapp, Facebook, etc.
En fait, en plus d'analyser les principes d'implémentation des langages java tels que les classes internes java et les énumérations, il est également utile dans certains scénarios spécifiques.Maintenant, cela se fait généralement en modifiant smali, mais cela peut aussi se faire en se basant sur le bytecode., Cet article est basé sur l'analyse précédente du bytecode Java, donc seule la méthode du bytecode est abordée.
De nombreux jeux autonomes, et même certains jeux en ligne, exécutent les opérations logiques localement. Le serveur ne reçoit que les résultats des opérations téléchargés par le client. Il existe également des applications de facturation, en fait, les fonctions sont toutes dans le code local, uniquement Mais c'est pour juger s'il y a un paiement, et s'il y a un paiement, l'entrée de fonction sera affichée.
Si nous pouvons modifier son code et changer le résultat du téléchargement ou le jugement de payer pour ce que nous voulons, nous pouvons faire ce que nous voulons.
décompiler
Application Espion Téléphone
Surveillez les appels, SMS, Gps, appareil photo, photos, vidéos, Whatsapp, Facebook, etc.
Pour modifier la logique du code de l'application, nous devons d'abord analyser quelle est la logique du code d'origine. Cependant, étant donné que le code de l'application est la propriété privée de chaque entreprise, à moins que le code ne soit divulgué, nous ne pouvons généralement pas l'obtenir. cette fois, nous ne pouvons utiliser que des techniques de décompilation.
Si vous allez sur Internet pour rechercher la technologie de décompilation d'apk, vous trouverez probablement les méthodes suivantes :
- Utilisez l'outil apktool pour extraire l'apk
- Utilisez l'outil dex2jar pour convertir des fichiers dex optimisés pour Android en classes java
- Utilisez l'outil jd-gui pour afficher le code java dans la classe
Une opération aussi lourde est en fait obsolète.Je vais présenter un outil d'opération en un clic pour tout le monde.
jadx est un outil de décompilation Android open source, son code est hébergé sur github, vous pouvez le télécharger et l'utiliser. L'utilisation est très simple, après le téléchargement, décompressez-le, puis entrez dans le répertoire bin pour exécuter jadx-gui (linux/mac ) ou jadx-gui.bat (windows), vous pouvez démarrer une interface visuelle, puis cliquer sur "Fichier - Ouvrir", et sélectionner l'application que nous voulons décompiler, vous pouvez voir le code dans l'apk
Une application de démonstration est décompilée ici, et son MainActivity.onCreate juge une variable d'indicateur, puis fait apparaître Toast. Lorsque nous installons cet apk et que nous l'exécutons, nous pouvons voir le toast apparaître : "hello world !"
D'autres applications sont similaires, vous pouvez afficher leur code de cette manière. Cependant, les applications publiées officiellement effectuent généralement des opérations d'obfuscation. À ce stade, le nom de la classe, le nom de la méthode et le nom de la variable du code que nous décompilons et traitons deviendront a, b, c est un caractère sans signification.
Mais seul le nom a changé, la logique d'exécution est exactement la même, donc tant que vous êtes assez prudent, vous pouvez toujours comprendre sa logique de code.
Jadx a une fonction puissante qui peut exporter le projet gradle, cliquez sur "Fichier/Enregistrer en tant que projet Gradle" pour exporter le projet gradle, puis modifiez la structure du répertoire, vous pouvez utiliser Android studio pour ouvrir le projet et éditer et modifier le code.
Si la compilation réussit après modification, alors notre objectif a été atteint et nous pouvons faire ce que nous voulons, mais ce projet a une forte probabilité de ne pas pouvoir compiler avec succès, et il y a beaucoup d'erreurs étranges.
Ensuite, je vais vous amener à déchiffrer pas à pas cet apk, modifier sa logique, ne pas jouer à "hello world!" mais jouer à "hello java".
Modifier le bytecode de l'application
Nous pouvons utiliser jadx pour analyser facilement la logique du code, mais si la recompilation échoue, nous devons emprunter une autre voie.
Voici la façon d'éditer directement le bytecode. Si vous suivez cette voie, il n'y aura pas d'opérations idiotes à utiliser. Allons-y étape par étape honnêtement
1. Décompressez l'apk
- apk est en fait un package compressé zip, nous pouvons changer son suffixe en.zip, puis le décompresser directement
- Nous plaçons les éléments décompressés dans le répertoire app-release-unsigned :
2. Convertir dex en pot
- Nous savons tous que la machine virtuelle Android n'est pas une machine virtuelle Java ordinaire, elle ne peut pas exécuter directement les fichiers de classe Java et doit être optimisée en fichiers dex.
- Lorsque nous modifions le bytecode, nous devons le reconvertir. Ici, nous utilisons la fonction dex2jar de l'outil dex-tools :
- Ici, je ne présente que l'utilisation des commandes sous Linux, pas sous Windows. En fait, c'est une version similaire utilisant.bat, vous pouvez rechercher par vous-même.
- Convertissez classes.dex en fichier jar :
- ~/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh classes.dex
- Il générera le fichier classes-dex2jar.jar :
3. Modifier le bytecode de la classe
- En fait, le fichier jar est également un package compressé zip, nous pouvons toujours changer directement le suffixe en zip, puis décompresser pour trouver MainActivity.class
- À ce stade, nous pouvons utiliser la commande javap mentionnée dans l'article précédent pour afficher le code à l'intérieur :
- javap -c activité principale
- Et nous pouvons voir que si nous continuons à exécuter, il affichera hello world!, et si nous sautons à 32 lignes, il affichera hello java!
- Ici, nous pouvons directement changer if_icmpne en if_icmpeq, sauter à la ligne 32 lorsqu'il est égal, sinon continuer à exécuter, de sorte que l'invite "hello world!" d'origine deviendra "hello java!"
- Si vous ouvrez le fichier de classe directement avec un éditeur, il contient des valeurs binaires.
- Alors, comment le modifions-nous?
- Ici, nous allons utiliser un autre outil jbe, le nom complet est java bytecode editor
- Après le téléchargement, décompressez-le, entrez dans le répertoire bin et utilisez la commande suivante pour ouvrir l'interface graphique :
- java ee.ioc.cs.jbe.browser.BrowserApplication
- Ouvrez MainActivity.class dans l'interface graphique et trouvez notre code MainActivity.onCreate
- Cliquez ensuite sur l'option Code Editor pour modifier le bytecode, ici nous changeons if_icmpne en if_icmpeq, puis cliquez sur Save method :
- Ceci termine notre modification logique
4. Reconditionner dex
- Ensuite, nous allons reconditionner l'apk, d'abord compresser la classe dans un zip, faire attention à la structure des répertoires :
- Changez ensuite le suffixe en jar et utilisez jar2dex pour générer dex :
- ~/dex-tools-2.1-SNAPSHOT/d2j-jar2dex.sh classes-dex2jar.jar
- Remplacez ensuite le fichier classes.dex d'origine par le fichier dex généré, puis supprimez tous les fichiers temporaires que vous venez de générer, tels que les répertoires classes-dex2jar.zip et classes-dex2jar
5. Supprimer les informations de signature
- Généralement, les applications que nous obtenons sont des applications signées. Une fois l'application signée, les informations de vérification des ressources et des codes seront enregistrées dans l'apk. Si nous modifions le fichier dex, la vérification échouera, de sorte que l'apk ne pourra pas être installé. de.
- Nous devons donc supprimer la signature d'origine. La méthode spécifique consiste à supprimer les trois fichiers du répertoire META-INF :
- CERT.RSA
- CERT.SF
- MANIFESTE.MF
6. Reconditionner l'apk
- Ensuite, le même fichier compressé génère un package compressé zip, faites attention à la structure des répertoires :
- Enfin, changez le suffixe zip en apk, et notre apk est emballé
- Étant donné que notre apk reconditionné a supprimé les informations de signature, s'il est installé directement, il échouera et nous devons le signer à nouveau.
- Vous pouvez utiliser la commande suivante pour créer un alias en tant que android.keystore, et le nom du fichier est également le fichier de signature d'android.keystore
- keytool -genkeypair -alias android.keystore -keyalg RSA -validité 400 -keystore android.keystore
- Après avoir appuyé sur Entrée, il vous permettra d'entrer des mots de passe, des informations sur le développeur, etc., et vous obtiendrez un fichier android.keystore une fois terminé.
- Ensuite, nous utilisons l'android.keystore obtenu pour signer à nouveau l'application :
- jarsigner -keystore android.keystore -signedjar release.apk app-release-unsigned.apk android.keystore
- Obtenez le release.apk signé, installons-le et exécutons-le pour voir que le toast est devenu "hello java!".