289 votes

Rétro-ingénierie à partir d'un fichier APK vers un projet

J'ai accidentellement effacé mon projet de Eclipse et tout ce qui me reste est le APK que j'ai transféré sur mon téléphone. Existe-t-il un moyen d'inverser le processus d'exportation d'une application vers le fichier .apk, afin que je puisse récupérer mon projet ?

2 votes

Vous savez qu'eclipse a son propre historique de versions ?

5 votes

331voto

rahul Points 1951

Il existe deux outils utiles qui génèrent du code Java (grossier mais suffisant) à partir d'un fichier APK inconnu.

  1. Téléchargez l'outil dex2jar à partir de dex2jar .

  2. Utilisez l'outil pour convertir le fichier APK en JAR : Windows :

     $ d2j-dex2jar.bat demo.apk
     dex2jar demo.apk -> ./demo-dex2jar.jar

    MacOS / Linux :

     $ d2j-dex2jar.sh -f demo.apk -o demo.jar
  3. Une fois le fichier JAR généré, utilisez JD-GUI pour ouvrir le fichier JAR. Vous verrez les fichiers Java.

Le résultat sera similaire à celui de l'enquête :

JD GUI

Vous pouvez ensuite utiliser d'autres outils pour récupérer le fichier AndroidManifest.xml et les fichiers de ressources (comme les images, les traductions, etc...) à partir du fichier APK.

  • Apktool

     $ java -jar apktool.jar -q decode -f demo.apk -o outputDir
  • AXMLParser

     $ apkinfo demo.apk
  • NinjaDroid

     $ ninjadroid demo.apk --all --extract

6 votes

Comment obtenir les fichiers de ressources

28 votes

Cmd est obsolète, utilisez d2j-dex2jar à la place (v0.0.9.15).

8 votes

@HoangHuynh vous aurez une res dossier contenant des fichiers xml illisibles

87voto

Swapnil Sonar Points 793

Tout d'abord, je recommande this vidéo mai c'est éclaircit tous vos doutes

Si ce n'est pas le cas, veuillez le parcourir

Procedure for decoding .apk files, step-by-step method:

Step 1:

Créez un nouveau dossier et mettez-y le fichier .apk (que vous voulez décoder). Maintenant, renommez l'extension de ce .apk pour .zip (par exemple, renommez le fichier nom_fichier.apk en nom_fichier.zip) et enregistrez-le.

Si vous rencontrez des problèmes lors de la conversion en .zip, veuillez vous référer à l'adresse suivante link

Après avoir obtenu le fichier .zip, vous obtenez maintenant les fichiers classes.dex, etc. A ce stade, vous êtes en mesure de voir les drawable mais pas les fichiers xml et java, alors continuez. Si vous ne voyez pas les extensions, vérifiez la configuration.

Step 2:

Maintenant, extrayez ce fichier zip apk dans le même dossier. Maintenant téléchargez dex2jar à partir de ceci link

et l'extraire dans le même dossier. Ouvrez maintenant l'invite de commande et changez de répertoire vers ce dossier.

Ensuite, écrivez dex2jar classes.dex et appuyez sur la touche Entrée. Vous obtenez alors classes.dex.dex2jar dans le même dossier.

Puis téléchargez décompilateur java

Et maintenant, double-cliquez sur jd-gui et cliquez sur ouvrir le fichier. Puis ouvrez classes.dex.dex2jar de ce dossier. Maintenant, vous obtenez les fichiers de classe et enregistrez tous ces fichiers de classe (cliquez sur le fichier puis sur "enregistrer toutes les sources" dans jd-gui) par nom de src. Extrayez ce fichier zip (classes_dex2jar.src.zip) et vous obtiendrez tous les fichiers java de l'application.

A ce stade, vous obtenez la source java mais les fichiers xml sont toujours illisibles, alors continuez.

Step 3:

Maintenant, ouvrez un autre nouveau dossier et mettez ces fichiers

  1. mettre le fichier .apk que vous voulez décoder

  2. Télécharger Apktool pour windows v1.x Et Apktool

installer window en utilisant google et mettre dans le même dossier

  1. télécharger le fichier framework-res.apk en utilisant google et le mettre dans le même dossier (tous les fichiers apk n'ont pas besoin du fichier framework-res.apk)

  2. Ouvrir une fenêtre de commande

  3. Naviguez dans le répertoire racine de APKtool et tapez la commande suivante : apktool if framework-res.apk.

La commande ci-dessus devrait donner Framework installed ... .

  1. apktool d "appName".apk ("appName" désigne l'application que vous voulez décoder) maintenant vous obtenez un dossier de fichiers dans ce dossier et maintenant vous pouvez facilement lire les fichiers xml aussi.

Step 4: Finalement, nous avons obtenu le res/ ainsi que le code java du projet qui est notre cible au départ.

P.S. Si vous n'arrivez pas à obtenir le dossier Res en suivant les étapes ci-dessus, installez un nouveau dossier. apktool

  • Java 1.7 est-il installé ? Installer Apktool 2.x
  • Java 1.6 ou plus est-il installé ? Installer Apktool 1.x

Enjoy and happy coding

0 votes

Vraiment utile. Juste une chose que vous n'avez pas mentionnée : le apktool.jar n'est pas dans le même paquet, je l'ai récupéré d'un ancien paquet et l'ai collé dans le même répertoire que apktool .

1 votes

J'ai inversé le code mais pourquoi le nom de la classe, de la variable sont comme aa, bc, e.t.c et aussi beaucoup d'erreurs

1 votes

Impossible de le faire dans cmd

5voto

Chris Thompson Points 18375

Pas vraiment. Il existe un certain nombre de suites de désassembleurs/décompilateurs dex. comme le smali ou dex2jar qui générera une sortie semi-lisible par l'homme (dans le cas de dex2jar, vous pouvez obtenir du code java en utilisant quelque chose comme JD-GUI mais le processus n'est pas parfait et il est très peu probable que vous puissiez recréer à 100% votre code source. Cependant, il pourrait potentiellement vous donner un point de départ pour reconstruire votre arbre source.

3voto

Star Points 41

Oui, vous pouvez récupérer votre projet. Il suffit de renommer le yourproject.apk pour yourproject.zip et vous obtiendrez tous les fichiers contenus dans ce fichier ZIP. Nous changeons l'extension de fichier de .apk à .zip. A partir de ce fichier ZIP, extrayez le fichier classes.dex et le décompiler de la manière suivante.

Tout d'abord, vous avez besoin d'un outil pour extraire toutes les classes (compilées) sur le DEX vers un JAR. Il en existe un appelé dex2jar qui est réalisé par un étudiant chinois.

Ensuite, vous pouvez utiliser JD-GUI pour décompiler les classes du JAR en code source. Le code source résultant devrait être assez lisible, car dex2jar applique quelques optimisations.

-2voto

Kaushik Points 6

J'ai trouvé ces étapes pour décompiler un fichier APK.

Y a-t-il un moyen d'obtenir le code source d'un fichier APK ?

Procédure de décodage des fichiers .apk, méthode étape par étape : Étape 1 :

Créez un nouveau dossier et mettez-y le fichier .apk (que vous voulez décoder). Maintenant, renommez l'extension de ce fichier .apk en .zip (par exemple, renommez nomfichier.apk en nomfichier.zip) et enregistrez-le. Vous obtenez maintenant des fichiers classes.dex, etc. A ce stade, vous êtes en mesure de voir les fichiers drawable mais pas les fichiers xml et java, alors continuez. Étape 2 :

Maintenant, extrayez ce fichier zip apk dans le même dossier (ou NOUVEAU DOSSIER). Maintenant téléchargez dex2jar à partir de ce lien http://code.google.com/p/dex2jar/ et l'extraire dans le même dossier (ou NOUVEAU DOSSIER). Déplacez le fichier classes.dex dans le dossier dex2jar. Maintenant, ouvrez l'invite de commande et changez le répertoire dans ce dossier (ou NOUVEAU DOSSIER). Puis écrivez dex2jar classes.dex et appuyez sur entrée. Vous obtenez maintenant le fichier classes.dex.dex2jar dans le même dossier. Ensuite, téléchargez le décompilateur java à partir de http://jd.benow.ca/ et maintenant double-cliquez sur jd-gui et cliquez sur ouvrir le fichier. Puis ouvrez le fichier classes.dex.dex2jar de ce dossier. Maintenant vous obtenez des fichiers de classe et enregistrez tous ces fichiers de classe (cliquez sur le fichier puis sur "enregistrer toutes les sources" dans jd-gui) par le nom src. A ce stade, vous obtenez la source java mais les fichiers xml sont toujours illisibles, alors continuez. Etape 3 :

Maintenant, ouvrez un autre nouveau dossier et mettez ces fichiers

put .apk file which you want to decode

download apktool v1.x AND apktool install window (both can be downloaded at the same location) and put in the same folder

download framework-res.apk file and put in the same folder (Not all apk file need framework-res.apk file)

Open a command window

Navigate to the root directory of APKtool and type the following command: apktool if framework-res.apk

apktool d "fname".apk ("fname" denotes filename which you want to decode)

Maintenant, vous obtenez un dossier de fichiers dans ce dossier et maintenant vous pouvez facilement lire les fichiers xml aussi. Étape 4 :

Il n'y a aucune étape à suivre, il suffit de copier le contenu des deux dossiers (dans ce cas, les deux nouveaux dossiers) dans le seul dossier.

et maintenant profitez du code source...

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