87 votes

Décompiler un APK, le modifier puis le recompiler

J'ai besoin de modifier un APK existant, de modifier les sources et de le recompiler.

  • Je peux le décompiler en utilisant dex2jar ou apktool, il fonctionne très bien.
  • A partir du fichier jar, je peux obtenir les sources java (en utilisant jd-gui)
  • Je peux ensuite modifier les fichiers java

Mais maintenant j'aimerais savoir comment recompiler les fichiers java et les remettre dans un fichier jar ! (la partie jar devrait être facile, le problème principal semble être comment recompiler les fichiers java pour Android)

Je sais qu'une autre solution est d'utiliser apktool et de modifier ensuite les fichiers smali, mais cela semble vraiment compliqué quand on veut ajouter beaucoup de code !

Mon application est un HelloWorld basique sans obfuscation.

57voto

darkheir Points 3837

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 pour des projets très simples :

  • Avec Dex2jar j'ai obtenu le Jar.

  • Avec jd-gui, je reconvertis mes Jar en fichiers Java.

  • Avec apktool, j'ai obtenu le manifeste Android et les fichiers de ressources.

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

  • Lorsque le projet est créé, je remplace toutes les ressources et le manifeste par ceux que j'ai obtenus avec apktool.

  • Je colle les fichiers java que j'ai extraits du Jar dans le dossier src (en respectant les packages)

  • Je modifie ces fichiers en fonction de mes besoins

  • Tout se compile !

/!\N- Assurez-vous que vous avez supprimé l'ancienne apk de l'appareil, une erreur se produira indiquant que la signature de l'apk n'est pas la même que celle de l'ancienne apk !

39voto

edwin Points 1974

Je sais que cette question a déjà reçu une réponse, mais j'aimerais savoir comment récupérer le code source d'un apk sans dexjar.

Il y a un décompilateur en ligne pour les applications Android

  1. Télécharger l'apk depuis la machine locale
  2. Attendez quelques instants
  3. Télécharger le code source au format zip

Je ne sais pas si c'est fiable.

@darkheir Answer est la méthode manuelle pour décompiler l'apk. Elle nous aide à comprendre les différentes phases de la création d'un Apk.

Une fois que vous avez le code source, suivez les étapes mentionnées dans la réponse acceptée.

Signaler tant de publicités sur ce lien Un autre décompilateur d'Apk en ligne @Andrew Rukin : http://www.javadecompilers.com/apk

Cela vaut quand même la peine. Chapeau aux créateurs.

19voto

Bevor Points 1713

Les réponses sont déjà quelque peu dépassées ou incomplètes. Cela fonctionne peut-être pour des apk non protégées (pas de Proguard), mais de nos jours personne ne déploie une apk non protégée. La façon dont j'ai pu modifier une (ma) apk bien protégée (Proguard, security check qui vérifie les "hacking tools", security check qui vérifie si l'application est repackagée avec le mode debug,...) est via apktool comme déjà mentionné par d'autres ici. Mais personne n'a expliqué qu'il fallait à nouveau signer l'application.

apktool d app.apk
//generates a folder with smali bytecode files. 

//Do something with it.

apktool b [folder name] -o modified.apk
//generates the modified apk.

//and then
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore modified.apk androiddebugkey
//signs the app the the debug key (the password is android)

//this apk can be installed on a device.

Dans mon test, la version originale de l'apk n'avait pas d'enregistrement. Après avoir décompilé avec apktool, j'ai échangé un fichier complet de byte code sans logging par un fichier complet de byte code avec logging, je l'ai recompilé et signé et j'ai pu l'installer sur mon appareil. Ensuite, j'ai pu voir les logs dans Android Studio lorsque j'y ai connecté l'application.

À mon avis, la décompilation avec dex2jar y JD-GUI n'est utile que pour mieux comprendre ce que font les classes, à des fins de lecture. Mais comme tout est protégé, je ne suis pas sûr que vous puissiez un jour recompiler ce code Java mal foutu pour en faire un apk fonctionnel. Si c'est le cas, faites-le moi savoir. Je pense que la seule façon est de manipuler le code byte lui-même comme mentionné dans cet exemple.

11voto

vikram wadhwa Points 127
  1. Téléchargez d'abord le dex http://code.google.com/p/dex2jar/downloads/list

  2. Extraire le fichier créé dex2jar dossier

  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 alors extrayez ce fichier zip que vous avez trouvé. classes.dex fichier

  4. Maintenant, prenez le fichier classes.dex et mettez-le dans dex2jar dossier

  5. Ouvrez maintenant la fenêtre cmd et tapez le chemin d'accès de dex2jar dossier

  6. Tapez maintenant la commande dex2jar.bat classes.dex et appuyez sur Entrée

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

  8. Ensuite, vous téléchargez l'outil de décompilation Java à partir du lien suivant http://java.decompiler.free.fr/?q=jdgui

  9. Dernière étape Ouvrir le fichier classes_dex2jar.jar dans l'outil de décompilation java, on peut maintenant voir le code de l'apk

6voto

MBH Points 538

Je sais que cette question a déjà reçu une réponse et je n'essaie pas de donner une meilleure réponse ici. Je vais simplement partager mon expérience dans ce domaine.

Une fois, j'ai perdu mon code et j'ai eu le apk uniquement. Je l'ai décompilé à l'aide de l'outil ci-dessous et j'en ai été ravi.

Ces outils DOIVENT être utilisés dans de telles situations, sinon c'est contraire à l'éthique et même parfois illégal (voler les efforts de quelqu'un d'autre). Veuillez donc les utiliser à bon escient.

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

javadecompilers.com

et pour obtenir l'apk à partir de google play, tu peux googler ou consulter ces sites :

Le jour de la publication de cette réponse, j'ai testé tous les liens et cela a fonctionné parfaitement pour moi.

NOTE : La décompilation d'Apk n'est pas efficace dans le cas d'un code protégé. En effet, la décompilation n'est pas efficace dans le cas d'un code protégé. Proguard rétrécit et obscurcit le code et renomme les classes avec des noms absurdes qui rendent le code assez difficile à comprendre.

Bonus :

Tutoriel de base pour l'utilisation de Proguard :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X