Est-il possible d’obtenir le code source à partir d’un fichier APK?

Le disque dur de mon ordinateur portable est tombé en panne et j’ai perdu tout le code source d’une application sur laquelle je travaillais depuis deux mois. Tout ce que j’ai est le fichier APK qui est stocké dans mon email quand je l’ai envoyé à un ami.

Est-il possible d’extraire mon code source de ce fichier APK?

Manière simple: utilisez l’outil en ligne http://www.javadecomstackrs.com/apk , téléchargez apk et obtenez le code source.


Procédure de décodage des fichiers .apk, méthode pas à pas:

Étape 1:

  1. Créez un nouveau dossier et copiez le fichier .apk que vous souhaitez décoder.

  2. Renommez maintenant l’extension de ce fichier .apk en .zip (par exemple, renommez filename.apk en filename.zip) et enregistrez-le. Maintenant, vous pouvez accéder aux fichiers classes.dex, etc. A ce stade, vous pouvez voir les fichiers tirables, mais pas les fichiers XML et Java, alors continuez.

Étape 2:

  1. Maintenant, extrayez ce fichier .zip dans le même dossier (ou NEW FOLDER).

  2. Téléchargez dex2jar et extrayez-le dans le même dossier (ou NEW FOLDER).

  3. Déplacez le fichier classes.dex dans le dossier dex2jar.

  4. Ouvrez maintenant l’invite de commande et changez de répertoire pour ce dossier (ou NEW FOLDER). Ensuite, écrivez d2j-dex2jar classes.dex (pour le terminal mac ou ubuntu écrivez ./d2j-dex2jar.sh classes.dex ) et appuyez sur Entrée. Vous avez maintenant le fichier classes.dex.dex2jar dans le même dossier.

  5. Téléchargez le décompilateur Java , double-cliquez sur jd-gui, cliquez sur ouvrir le fichier et ouvrez le fichier classes.dex.dex2jar de ce dossier: vous obtenez maintenant les fichiers de classe.

  6. Enregistrez tous ces fichiers de classe (dans jd-gui, cliquez sur Fichier -> Enregistrer toutes les sources) par nom src. A ce stade, vous obtenez le source java, mais les fichiers .xml sont toujours illisibles, alors continuez.

Étape 3:

Ouvrez maintenant un autre nouveau dossier

  1. Mettez dans le fichier .apk que vous souhaitez décoder

  2. Téléchargez la dernière version de la fenêtre d’ installation d’ apktool AND apktool (les deux peuvent être téléchargés à partir du même lien) et placez-les dans le même dossier

  3. Ouvrir une fenêtre de commande

  4. Maintenant, lancez la commande comme apktool if framework-res.apk et suivant

  5. apktool d myApp.apk (où myApp.apk indique le nom du fichier que vous souhaitez décoder)

maintenant vous obtenez un dossier de fichiers dans ce dossier et pouvez facilement lire les fichiers XML de l’apk.

Étape 4:

Il ne suffit pas de copier le contenu des deux dossiers (dans ce cas les deux nouveaux dossiers) dans le dossier unique

et profiter du code source …

Ceci est une description alternative – juste au cas où quelqu’un serait coincé avec la description ci-dessus. Suis les étapes:

  1. téléchargez apktool.bat (ou apktool pour Linux) et apktool_.jar depuis http://ibotpeaches.github.io/Apktool/install/
  2. Renommez le fichier jar ci-dessus en apktool.jar et mettez les deux fichiers dans le même dossier

  3. ouvrez une boîte de cmd.exe ( cmd.exe ) et changez dans ce dossier; vérifiez qu’un environnement Java est installé (pour Linux, vérifiez également les notes concernant les bibliothèques requirejses)
  4. Début: apktool decode [apk file]

    Résultat intermédiaire : fichiers de ressources, AndroidManifest.xml

  5. décompresser le fichier APK avec un décompresseur de votre choix

    Résultat intermédiaire : classes.dex

  6. téléchargez et extrayez dex2jar-0.0.9.15.zip depuis http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. faites glisser et déposez classes.dex sur dex2jar.bat (ou entrez \dex2jar.bat classes.dex dans une boîte DOS; pour Linux, utilisez dex2jar.sh )

    Résultat intermédiaire : classes_dex2jar.jar

  8. décompresser classes_dex2jar.jar (peut être facultatif selon le décompilateur utilisé)
  9. décomstackr vos fichiers de classe (par exemple avec JD-GUI ou DJ Decomstackr )

    Résultat : code source

Remarque: il est interdit de décomstackr des packages tiers; ce guide est destiné à récupérer le code source personnel à partir d’un fichier APK uniquement; enfin, le code résultant sera très probablement masqué

Bien que vous puissiez décomstackr votre fichier APK , vous rencontrerez probablement un gros problème:

ça ne va pas retourner le code que vous avez écrit. Au lieu de cela, il va retourner ce que le compilateur a mis en place, avec des variables avec des noms aléatoires, ainsi que des fonctions avec des noms aléatoires. Cela pourrait prendre beaucoup plus de temps pour essayer de décomstackr et de restaurer le code que vous en aviez, que de recommencer.

Malheureusement, de telles choses ont tué de nombreux projets.
Pour l’avenir, je recommande fortement l’apprentissage d’un système de contrôle de version, comme CVS , SVN et git, etc.

et comment le sauvegarder.

Il existe également une nouvelle application sur le Play Store avec laquelle il est possible de décomstackr un apk (applications système également) et d’afficher le code source directement sur votre smartphone. Il enregistre les fichiers sur votre carte SD afin que vous puissiez les visualiser sur votre ordinateur. Il ne nécessite pas root ou autre chose.

Installez-vous et amusez-vous. Je pense que c’est le moyen le plus simple de décomstackr une application.

apktool est la meilleure chose que vous pouvez essayer. J’ai sauvegardé du XML, mais honnêtement, je ne sais pas comment cela fonctionnera avec le code .java.

Je vous recommande d’avoir un référentiel de code même si vous êtes le seul codeur. J’ai utilisé Project Locker pour mes propres projets. Cela vous donne gratuitement svn et git repos.

Ces deux articles décrivent comment combiner l’utilisation de apktool et dex2jar pour prendre un fichier APK et créer un projet Eclipse capable de le générer et de l’exécuter.

http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

En gros, vous:

  1. Utilisez apktool pour extraire les fichiers de ressources de l’apk
  2. Utilisez dex2jar pour obtenir un fichier jar contenant les classes dans un format qui va plaire à Eclipse.
  3. Créer un projet Eclipse le pointer sur les fichiers de ressources et le nouveau fichier jar
  4. Ouvrez le fichier jar avec un utilitaire zip et supprimez les ressources existantes
  5. Ouvrez le fichier jar avec JDGui pour afficher le code source
  6. Prenez n’importe quel code source de JDGui , collez-le dans une classe à l’intérieur d’Eclipse et modifiez-le
  7. Supprimez cette classe du fichier jar (afin de ne pas avoir la même classe définie plusieurs fois)
  8. Exécuter.

apktool fonctionnera. Vous n’avez même pas besoin de connaître le fichier de clés pour extraire le code source (ce qui est un peu effrayant). Le principal inconvénient est que la source est présentée au format Smali au lieu de Java. D’autres fichiers, tels que l’icône et main.xml, passent parfaitement bien et il peut être utile de récupérer ces fichiers. En fin de compte, vous devrez probablement réécrire votre code Java à partir de rien.

Vous pouvez trouver apktool ici . Il suffit de télécharger apktool et l’aide appropriée (pour Windows, Linux ou Mac OS). Je recommande d’utiliser un outil tel que 7-zip pour les déballer.

Il y a quelques façons de le faire:

  1. Utilisez la fonctionnalité «Profil ou débogage APK» dans Android Studio 3.0.

    Il vous permet d’ouvrir et d’explorer APK dans Android Studio. Les classes sont décompilées en smali. Les ressources ne sont pas extraites et des choses comme “Aller à la définition”, “Rechercher toutes les références” et le débogage ne fonctionnent pas sans le code source (android studio 3.0 canary 9). Certaines fonctionnalités supplémentaires de smali peuvent fonctionner avec smalidea .

    studio android

    choisir le dossier

    code

  2. Utilisez jadx .

    Jadx décomstack le code dans un fichier APK donné en fichiers source Java.

    jdax-img

  3. Utilisez apktool .

    Apktool est un outil en ligne de commande qui extrait les ressources et décomstack le code en smali pour un apk donné. Vous pouvez également recomstackr en utilisant apktool. En voici un exemple en action:

     $ apktool d test.apk I: Using Apktool 2.2.4 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: 1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files... $ apktool b test I: Using Apktool 2.2.4 on test I: Checking whether sources has changed... I: Smaling smali folder into classes.dex... I: Checking whether resources has changed... I: Building resources... I: Building apk file... I: Copying unknown files/dir... 

Peut-être le plus facile de voir la source:

Dans Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decomstack .
Vous verrez son code source.

Linf pour référence:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

Je vais vous montrer une autre façon de décomstackr les fichiers .apk .

Vous pouvez suivre les 2 premières étapes depuis ” prankul garg “. Donc, vous avez une autre opportunité:

Étape 3′:

Téléchargez le “JD-GUI” , c’est facile de trouver celui-ci. Ouvrez votre fichier .jar dans “jd-gui.exe”. (Fichier> Ouvrir le fichier> ‘a trouvé votre fichier .jar ‘). Après cette procédure, vous pouvez enregistrer toutes les ressources dans un fichier .zip .

Alors,

1er – Vous devez renommer le fichier .apk en .zip

2nd – Vous devez décoder le fichier .dex (si vous voulez, décoder le fichier .apk en dex2jar , c’est possible)

3ème – Vous devez décoder le fichier .jar avec JD-GUI

Ci-dessous outil en ligne:

http://www.javadecomstackrs.com/apk

il fait tout en un clic: fichiers .java décompilés + ressources + xml (dans un fichier .zip) avec un très bon décompilateur (jadx retourne du code java dans les lieux / fonctions où d’autres comstacknt des commentaires à l’intérieur de la fonction code assembleur / machine android)

Apktool pour l’ingénierie inverse des applications Android fermées, binarys.

Il peut décoder les ressources à une forme presque originale et les reconstruire après quelques modifications.

Il est possible de déboguer le code smali pas à pas. En outre, il est plus facile de travailler avec une application grâce à la structure de fichiers de type projet et à l’automatisation de tâches répétitives telles que la création de fichiers apk, etc.

http://ibotpeaches.github.io/Apktool/

Personnellement, je recommande Show Java Android App pour obtenir le code source. Vous pouvez le télécharger depuis Play Store ou d’ ici

apktool est la voie à suivre. Le service apktool en ligne existe également: http://www.javadecomstackrs.com/apktool

Certaines limitations existent évidemment en raison du service «nature en ligne»: vous pouvez extraire et rechercher des actifs et le fichier manifeste, mais il est impossible de recomstackr l’application pour le moment.

Néanmoins, il s’agit d’un moyen facile d’ouvrir l’application Android.

Ce site https://www.apkdecomstackrs.com/ l’a fait automatiquement.

J’ai d’abord essayé le site mentionné dans la réponse acceptée, mais cela n’a pas fonctionné pour moi.

Vous pouvez essayer DexPatcher . Il s’intègre même avec Android Studio. Il utilise Apktool et Dex2Jar en interne.
Vous pouvez également utiliser ces outils indépendamment. Apktool décomstack apk et extrait les fichiers .dex, qui peuvent ensuite être convertis en jar à l’aide de Dex2Jar. Jar peut être décompilé en utilisant JD-GUI . Vous pouvez voir le code Java à l’aide de cet outil. Bien que la similarité du code décompilé au code réel ne puisse être garantie. Il existe sur le marché des outils avancés d’ obscurcissement du code , qui gâchent le code pour le rendre difficile à décomstackr / à comprendre. par exemple. Proguard