Reverse engineering d'un fichier APK vers un projet

244

J'ai accidentellement effacé mon projet d' Eclipse et il ne me reste que le fichier 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?

Marko Cakic
la source
2
vous savez qu'eclipse a son propre historique de version?
eis
4
si vous écrivez quelque chose d'important pour vous, vous devez utiliser un VCS. Bitbucket a des référentiels privés gratuits.
lxknvlk
github.com/skylot/jadx
Saurabh Bhoomkar

Réponses:

287

Il existe deux outils utiles qui généreront du code Java (approximatif mais assez bon) à partir d'un fichier APK inconnu.

  1. Téléchargez l'outil dex2jar depuis dex2jar .
  2. Utilisez l'outil pour convertir le fichier APK en JAR :

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

La sortie sera similaire à:

JD GUI

rahul
la source
6
comment obtenir les fichiers de ressources
srini
26
cmd est obsolète, utilisez d2j-dex2jarplutôt (v0.0.9.15).
Fredrick Gauss
1
@sri renomme simplement le fichier apk pour le compresser et l'extraire, vous aurez les fichiers de ressources dans le resdossier
Hoang Huynh
8
@HoangHuynh vous aurez un resdossier avec des fichiers xml illisibles
S.Thiongane
6
En Macsi vous ne pouvez pas utiliser dex2jar: permission deniedfaites ceci $sudo chmod +x d2j-dex2jar.sh
Min2
81

Tout d'abord, je recommande la thisvidéo peut-elle effacer tous vos doutes

Sinon, veuillez le parcourir

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

Step 1:

Créez un nouveau dossier et placez-y le fichier .apk (que vous souhaitez décoder). Maintenant, renommez l'extension de ce .apkfichier .zip(par exemple: renommez de filename.apk en filename.zip) et enregistrez-la.

En cas de problème lors de la conversion en .zip, veuillez vous référer link

Après avoir obtenu .zip, vous obtenez maintenant des fichiers classes.dex, etc. À ce stade, vous pouvez voir les fichiers dessinables mais pas les fichiers xml et java, alors continuez. Si vous ne voyez pas les extensions passer par vérifier la configuration

Step 2:

Maintenant, extrayez ce fichier apk zip dans le même dossier. Téléchargez maintenant dex2jar à partir de celink

et extrayez-le dans le même dossier. Ouvrez maintenant l'invite de commande et modifiez le répertoire dans ce dossier.

Ensuite, écrivez dex2jar classes.dexet appuyez sur Entrée. Vous obtenez maintenant le classes.dex.dex2jarfichier dans le même dossier.

Ensuite, téléchargez le décompilateur Java

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

À ce stade, vous obtenez une 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 souhaitez décoder

  2. télécharger Apktool pour windows v1.xAndApktool

installer la fenêtre en utilisant google et mettre dans le même dossier

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

  2. Ouvrez une fenêtre de commande

  3. Accédez au répertoire racine de APKtool et tapez la commande suivante: apktool if framework-res.apk.

La commande ci-dessus devrait se traduire par 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 également les fichiers xml.

Step 4: Enfin, nous avons obtenu le res/code de projet ainsi que Java qui est notre objectif au démarrage.

P.S. Si vous n'êtes pas en mesure d'obtenir le dossier res par les étapes ci-dessus, veuillez installer de nouveaux apktool

  • Java 1.7 est-il installé? Installez Apktool 2.x
  • Java 1.6 ou supérieur est-il installé? Installez Apktool 1.x

Enjoy and happy coding

Swapnil Sonar
la source
vraiment utile. Juste quelque chose que vous n'avez pas mentionné: le apktool.jarn'est pas dans le même paquet, je l'ai obtenu d'un ancien paquet et l'ai collé dans le même répertoire que apktool.
S.Thiongane
1
j'ai inversé l'ingénierie du code, mais pourquoi le nom de la classe, la variable est comme aa, bc, etc. et aussi de nombreuses erreurs
user2934930
1
incapable de le faire en cmd
Meghal Agrawal
une autre façon de le faire?
Meghal Agrawal du
2
@ user2934930 Cela signifie que le code a été masqué à l'aide de ProGuard.
cascal
58

Pas de logiciel et pas trop d'étapes ..

Téléchargez simplement votre APK et obtenez toutes vos ressources sur ce site.

https://www.apkdecompilers.com/

Ce site Web décompilera le code incorporé dans les fichiers APK et extraira tous les autres éléments du fichier.

Remarque: je décompile mon fichier APK et j'obtiens du code en une minute à partir de ce site Web

Mise à jour 1 :

J'ai trouvé un autre site de décompilation en ligne,

http://www.javadecompilers.com/apk/ - Ne fonctionne pas en continu demandant le blocage des popups

Mise à jour 2:

J'ai trouvé l'application apk decompiler dans le Play Store,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

Nous pouvons décompiler les fichiers apk dans notre téléphone Android. et nous pouvons également voir les fichiers java et xml dans cette application

Mise à jour 3:

Nous pouvons utiliser une autre option Analyser la fonction APK de la version Android studio 2.2

Construire -> Analyser APK -> Sélectionnez votre APK -> cela donne des résultats

entrez la description de l'image ici

Ranjith Kumar
la source
3
dans la dernière méthode, nous ne pouvons pas ouvrir la classe java, affiche uniquement les noms des méthodes
Choletski
@Choletski essayez-vous le ShowJava? si non, essayez de me mettre à jour
Ranjith Kumar
@RanjithKumar est limité à 50 Mo APK taille. J'ai un 85 Mo APK à décompiler.
Ravi Sharma
1
Comment exécuter ce projet décompilé dans un studio Android? quelqu'un peut-il s'il vous plaît écrire à ce sujet.
Mayur Kukadiya
4

Pas vraiment. Il existe un certain nombre de suites de désassembleurs / décompilateurs dex comme smali ou dex2jar qui généreront 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 est pas parfait et il est très peu probable que vous puissiez recréer à 100% votre code source. Cependant, cela pourrait vous donner un endroit pour commencer à reconstruire votre arbre source.

Chris Thompson
la source
@MAC: Il a besoin d'une source et non du fichier APK !!
Shashank Kadne
2
@ShashankKadne peut-être que je ne reprends pas mes mots
MAC
3

Oui, vous pouvez récupérer votre projet. Renommez simplement le yourproject.apkfichier en yourproject.zip, et vous obtiendrez tous les fichiers à l'intérieur de ce fichier ZIP. Nous changeons l'extension de fichier de .apk en .zip. À partir de ce fichier ZIP, extrayez le classes.dexfichier et décompilez-le de la manière suivante.

Tout d'abord, vous avez besoin d'un outil pour extraire toutes les classes (compilées) du DEX dans un JAR. Il y en a un appelé dex2jar , qui est fabriqué 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 doit être assez lisible, car dex2jar applique certaines optimisations.

Étoile
la source
3

Pour la plate-forme Android, vous pouvez essayer ShowJava , disponible sur le Play Store.

Vous pouvez consulter le code généré via l'interface de l'application et la structure des fichiers et dossiers Java générés est stockée dans un ShowJavadossier dans /sdcard, à côté du .jarfichier résultant de la conversion.

L'application est gratuite avec une bannière publicitaire en bas de la vue principale, mais il existe une option d'achat intégrée (3,99 $) pour la supprimer. L'achat dans l'application n'ajoute aucune fonctionnalité à côté de la suppression de la bannière publicitaire.

Divulgation: je ne suis pas le développeur de l'application ni je suis affilié avec lui en aucune façon.

Stéphane Piriou
la source
Je l'utilise habituellement pour ... Nice app
Rahul Kushwaha
2

Suivez les étapes ci-dessous pour ce faire ou utilisez simplement apkToJava gem pour ce processus, il se charge même d'installer les outils nécessaires pour qu'il fonctionne.

  • convertir le fichier apk en zip
  • décompressez le fichier
  • en extraire classes.dex
  • utiliser dex to jar pour convertir classes.dex en fichier jar
  • utiliser jadx gui pour ouvrir le fichier jar en tant que code source java
Ajit Singh
la source
2

Si vous cherchez une alternative professionnelle, jetez un œil à JEB Decompiler de PNF Software.

Il existe une version de démonstration qui vous permettra de décompiler la plupart du code.

pseudo
la source
2

Vous trouverez ci-dessous certains des outils que vous pouvez utiliser pour effectuer la rétro-ingénierie d'un fichier APK au code source:

  1. Dex2jar
  2. Décompilateur Java
  3. Apktool
  4. Apk Analyzer
Mandeep Yadav
la source
1

Dans Android Studio 3.5, c'est tellement facile que vous pouvez le réaliser en une minute. ce qui suit est un processus par étapes.

1: Ouvrez Android Studio, appuyez sur le bouton de la fenêtre -> Tapez Android Studio -> cliquez sur l'icône pour ouvrir l'écran de démarrage du studio Android qui ressemblera à ceci.

entrez la description de l'image ici

2: Ici, vous pouvez voir une option "Profil ou débogage APK" cliquez dessus et sélectionnez votre fichier apk et appuyez sur ok.

entrez la description de l'image ici

3: Il ouvrira toutes vos classes manifestes et java en une minute selon la taille de l'apk.

entrez la description de l'image ici

C'est tout.

Imran Qamer
la source
cette solution ne me donne aucun type de fichier java
kishan verma Il y a