Reconditionnement du fichier APK avec baksmali et smali

Je suis un étudiant intéressé par la sécurité Android. Jessayais de modifier un fichier APK en utilisant baksmali et smali. Cependant, je ne peux pas exécuter lapplication reconditionnée sur mon mobile. Lorsque je clique sur licône, il dit « Malheureusement, le test sest arrêté » et existe. (Même licône de lapplication a été modifiée, maintenant je vois licône Android par défaut au lieu de lancienne véritable icône colorée de lapplication)

Quelle pourrait en être la raison? En fait, je nai même pas modifié le code du fichier apk. Je viens de décompresser apk pour obtenir le fichier dex, puis je lai converti en smali en utilisant baksmali.jar, puis je suis revenu à dex en utilisant smali.jar. Enfin compressé et signé.

Ce que jai fait en détail:

  1. Décompressez le fichier apk

    $ Unzip test.apk 
  2. Convertir 1classes.dex1 en smali

    $ baksmali -x classes.dex -o smaliClasses 
  3. A reconverti les classes en classes.dex (remplacé lancien classes.dex, en fait je nai pas ajouté de nouveau code au fichier smali . Je voulais savoir si cela fonctionne en premier).

    $ smali smaliClasses -o classes.dex 
  4. Compressez tous les fichiers dans test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. Renommer test.zip en test.apk

    $ mv test.zip test.apk 

Je pense que je dois à nouveau signer lAPK, veuillez me corriger si je me trompe ici.

Modifié

:

  1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk

  2. Jai essayé dinstaller le nouvel APK reconditionné. Utilisation du shell adb. Le shell Adb a montré quil était installé avec succès. Cependant, je ne suis pas en mesure dexécuter lapplication reconditionnée sur mobile. Lapplication plante lorsque je clique dessus. Il dit « Malheureusement, le test sest arrêté ».

Pourquoi lapplication reconditionnée ne fonctionne-t-elle pas? Je ne comprends pas ce qui me manque ici?

Modifié :

Jai essayé de reconditionner la même application en utilisant apktool. Jai extrait les fichiers smali en lutilisant et reconditionné. Mais pourquoi le reconditionnement ne fonctionne pas avec baksmali, smali, zip et signapk. La fermeture éclair est-elle le vrai problème dans cette procédure? Je vois que la taille de lapplication est considérablement réduite lorsque je la compresser et la renommer en .apk par rapport au fichier apk dorigine: |

Commentaires

  • Vous devriez vérifier votre logcat pour plus dinformations, si possible, veuillez également publier le journal des plantages.
  • @xDragonZ , Jai édité le message. Cette fois, jai essayé dinstaller en utilisant  » adb install  » et signé en utilisant signapk.jar. Cette fois, lapplication a été installée sur le téléphone. Cependant, lorsque je clique sur lapplication, elle plante en disant  »  » Malheureusement, lapplication sest arrêtée « . Une chose que jai remarquée est que la taille de lapk reconditionné est inférieure à loriginal, est-ce la raison pour laquelle loutil zip est la taille? Un indice sur la raison pour laquelle lapplication plante? Comment obtenir un journal pour cela? Merci beaucoup.
  • Peut-être avez-vous également besoin de compresser le fichier?
  • Êtes-vous en train de déodexer (baksmali -x option) exprès? Il semblerait que puisque vous exécutez cette option, sans fournir un  » bootclasspath  » vous ‘ va obtenir un étrange code smali qui ne pourra peut-être pas être reconverti en fichier dex. En outre, supprimez simplement le dossier META-INF avant de compresser et essayez de faire zip -r unsigned.apk * dans le répertoire avec tout le contenu. Si le problème persiste, essayez de publier la sortie de logcat
  • Donc sur cinq réponses pas une seule nest acceptable?

Réponse

Jutilise apktool à cette fin, et une courte petite paire de scripts shell pour décompiler et recompiler les APK:

  • decompile-apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done." 
  • compile-apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build 

Lutilisation de apktool présente lavantage de pouvoir afficher et modifier toutes les ressources également comme fichier manifeste décodé.

Commentaires

  • Cest la seule méthode qui fonctionne pour moi. Jai ‘ essayé des dizaines, aucun na fonctionné. Merci beaucoup.

Réponse

Après avoir joué avec smali / baksmali, je lai fait fonctionner. Je pense que vous n’avez pas utilisé l’indicateur récursif lors de la compression de . Le dossier res était vide, ce qui a provoqué le crash. Aussi, je lance zipalign après avoir signé lapk.

Étapes:

  1. Décompressez
    $ unzip test.apk
  2. Baksmali
    $ baksmali classes.dex -o smaliClasses
  3. Smali
    $ smali smaliClasses -o classes.dex
  4. Zip -r
    $ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
  5. Jarsign
    $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
  6. Zipalign
    $ zipalign -v 4 test-patched.apk final-apk.apk
  7. Profit 🙂

Réponse

Je ne peux « pas commenter en raison de réputation, je vais donc le publier ici.

Puisque le travail est fait correctement avec lutilisation dapktool, il me semble que quelque chose ne va pas avec le processus zip.

Après en reconditionnant lapplication, pouvez-vous vérifier que le contenu du nouvel APK est identique (en ce qui concerne les noms de fichiers et la structure) avec le contenu de loriginal?

EDIT: aussi, puisque le fichier est un fichier .dex, je ne pense pas que vous ayez besoin de loption -x dans baksmali.

EDIT2: Lors du reconditionnement, vous navez pas besoin dinclure le répertoire META-INF dans le fichier zip. sera créé lors de la signature de t le fichier.

Réponse

Lutilisation de loption deodex « -x » nest pas nécessaire car vous « neffectuez pas de baksmali sur un odex. Exécutez simplement baksmali sur le fichier dex. Vous pouvez également utiliser apktool pour tout décompresser / emballer, ce qui, à mon avis, est plus facile.

Réponse

  • Pourquoi la taille du fichier a-t-elle été réduite?

    Parce que apktool la optimisé lors de la recompilation.

  • Pourquoi il a planté?

    Causes possibles du plantage:

    1. Vous ne pouvez pas exécuter toutes les étapes dans le bon ordre.

    2. Lapplication peut avoir un Contrôle CRC pour la taille du fichier.

Outil Entièrement automatisé avec interface graphique .. Il est mis à jour avec le cadre Android récent, donc aucune erreur de décompilation des ressources et meilleure manipulation.

https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

Et ce petit papier qui inclut des conseils sur linversion des applications Android et toutes les informations de base concernant la modification / la gestion dapk.

https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0

Réponse

Si vous êtes intéressé par les applications Anroid RE, vous trouverez de meilleurs outils à utiliser régulièrement.

Eh bien, lun des outils est Android Cracker Kit (que jai développé), il vous donne tout ce dont vous avez besoin: Android Cracker Kit (ACK):

Commentaires

Réponse

Jutilise APK Editor Pro pour modifier Fichiers APK directement depuis mon appareil Android!

https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro

Commentaires

  • Excellent conseil. Lapk généré ne sinstalle pas correctement avec le script de (dé) compilation ci-dessus (pourquoi?) Mais le remplacement de classes.dex la fait.

Réponse

Étape 4. Vous avez oublié de le faire de manière récursive. Il ne copiera pas les fichiers dans / res lorsque vous le compresserez. Ajoutez loption -r.

zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc 

Étape 6. Vous navez pas besoin de le signer encore une fois depuis que vous lavez réemballé avec le répertoire META-INF sur votre apk déjà. Les informations de signature se trouvent dans META-INF.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *