web-dev-qa-db-fra.com

Décompiler un APK, le modifier puis le recompiler

Je dois modifier un fichier APK existant, modifier les sources, puis le recompiler.

  • Je peux le décompiler en utilisant dex2jar ou apktool, cela fonctionne très bien
  • À partir du fichier jar, je peux obtenir les sources Java (en utilisant jd-gui)
  • Ensuite, je peux modifier les fichiers Java

Mais maintenant, je voudrais savoir comment recompiler les fichiers Java et les replacer dans un fichier jar! (La partie jar devrait être simple, le problème principal semble être comment Java pour Android)

Je sais qu'une autre solution consiste à utiliser apktool, puis à modifier les fichiers smali, mais cela semble vraiment compliqué lorsque nous voulons ajouter beaucoup de code!

Mon application est une base de HelloWorld sans obscurcissement.

60
darkheir

Grâce à Chris Jester-Young, j'ai réussi à le faire fonctionner!

Je pense que la façon dont j'ai réussi à le faire ne fonctionnera que sur des projets très simples:

  • Avec Dex2jar j'ai obtenu le Jar.
  • Avec jd-gui, je reconvertis mon fichier Jar en fichiers Java.
  • Avec apktool, j’ai eu le Android le manifeste et les fichiers de ressources

  • Dans Eclipse, je crée un nouveau projet avec les mêmes paramètres que l'ancien (vérification de toutes les informations du fichier manifeste).

  • Lorsque le projet est créé, je remplace toutes les ressources et le manifeste par ceux obtenus avec apktool
  • Je colle les fichiers Java que j'ai extraits du fichier Jar dans le dossier src (en respectant les paquets)
  • Je modifie ces fichiers avec ce dont j'ai besoin
  • Tout est en train de compiler!

/!\assurez-vous que vous avez supprimé l’ancien apk de l’appareil, une erreur sera générée indiquant que la signature d’apk n’est pas la même que l’ancienne!

38
darkheir

Je sais que cette question a toujours une réponse, je voudrais passer une information sur la façon d’obtenir le code source d’apk avec dexjar.

Il y a un décompilateur en ligne pour Android apks

  1. Upload apk depuis la machine locale
  2. Attends quelques instants
  3. Télécharger le code source au format Zip

Je ne sais pas à quel point c'est fiable.

@ darkheir La réponse est le moyen manuel de décompiler un apk. Cela nous aide à comprendre les différentes phases de la création d'Apk.

Une fois que vous avez le code source, suivez l’étape mentionnée dans la réponse acceptée.

Un autre compilateur Apk en ligne @ Andrew Rukin : http://www.javadecompilers.com/apk

Toujours la peine. Chapeau aux créateurs.

33
edwin
  1. Téléchargez d’abord l’outil dex2jar à partir du lien suivant http://code.google.com/p/dex2jar/downloads/list

  2. Extraire le fichier qu'il crée le dossier dex2jar

  3. Maintenant, vous choisissez votre fichier apk et changez son extension .apk en .Zip après avoir changé l'extension, il semble que ce soit un fichier Zip, puis extrayez ce fichier Zip que vous avez trouvé dans le fichier classes.dex.

  4. Maintenant, sélectionnez le fichier classes.dex et mettez-le dans le dossier dex2jar

  5. Maintenant, ouvrez la fenêtre cmd et tapez le chemin du dossier dex2jar

  6. Maintenant, tapez la commande dex2jar.bat classes.dex Et appuyez sur Entrée

  7. Ouvrez maintenant le dossier dex2jar Dans lequel vous avez trouvé le fichier classes_dex2jar.jar

  8. Ensuite, vous téléchargez le Java à partir du lien suivant http://Java.decompiler.free.fr/?q=jdgui

  9. Dernière étape Ouvrez le fichier classes_dex2jar.jar Dans Java, vous pouvez maintenant voir le code apk.

8
vikram wadhwa

Je sais que cette question a reçu une réponse et je ne cherche pas à donner une meilleure réponse ici. Je vais juste partager mon expérience dans ce sujet.

Une fois, j'ai perdu mon code et je n'avais que le fichier apk. Je l'ai décompilé en utilisant l'outil ci-dessous et ça a fait ma journée.

Ces outils DOIVENT être utilisés dans une telle situation, sinon, c'est contraire à l'éthique et même parfois c'est illégal (voler les efforts de quelqu'un d'autre). Alors s'il vous plaît utilisez-le à bon escient.

Ce sont mes outils préférés pour le faire:

javadecompilers.com

et pour obtenir l'apk de Google Play, vous pouvez le rechercher sur Google ou consulter ces sites:

À la date d'affichage de cette réponse, j'ai testé tous les liens et cela a fonctionné parfaitement pour moi.

REMARQUE: Apk Décompiler n'est pas efficace en cas de code progressif. Parce que Proguard rétrécit et obscurcit le code et renomme les classes en noms non-sens, ce qui rend assez difficile la compréhension du code.

Bonus:

Tutoriel de base sur l’utilisation de Proguard :

2
MBH

dex2jar avec jd-gui donnera tous les Java mais ils ne sont pas exactement les mêmes. Ce sont des fichiers .class presque équivalents. (pas 100%). Donc, si vous voulez changer le code d'un fichier apk:

  • décompiler en utilisant apktool

  • apktool générera un fichier smali (version d'assemblage de dex) pour chaque fichier Java portant le même nom).

  • smali est compréhensible pour l’être humain, apportez des modifications au fichier concerné, recompilez-vous en utilisant le même apktool (apktool b Nw.apk <Folder Containing Modified Files>)

1
Pradeep Tiwari