web-dev-qa-db-fra.com

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

Le disque dur de mon ordinateur portable vient de tomber 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 à partir du moment où je l'ai envoyé à un ami.

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

1194
Frank Bozzo

Manière simple: utiliser l'outil en ligne http://www.javadecompilers.com/apk , télécharger apk et obtenir 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. Maintenant, renommez l’extension de ce fichier .apk en .Zip (par exemple, renommez nomfichier.apk en nomfichier.Zip) et enregistrez-la. Vous pouvez maintenant accéder aux fichiers classes.dex, etc. À ce stade, vous pouvez voir les fichiers enregistrables mais pas les fichiers xml et Java. Continuez.

Étape 2:

  1. Extrayez maintenant ce fichier .Zip dans le même dossier (ou NOUVEAU DOSSIER).

  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 dans ce dossier (ou dans un nouveau dossier). Puis é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 Java decompiler , double-cliquez sur jd-gui, cliquez sur le fichier ouvert, puis 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 de src. À ce stade, vous obtenez la source Java, mais les fichiers .xml sont toujours illisibles. Continuez.

Étape 3:

Maintenant, ouvrez un autre nouveau dossier

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

  2. Téléchargez la dernière version de (apktool ET fenêtre d'installation d'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 (si vous ne l'avez pas obtenez-le ici ) et ensuite

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

maintenant, vous obtenez un dossier dans ce dossier et pouvez facilement lire les fichiers XML de l'APK.

Étape 4:

Ce n'est pas une étape, copiez simplement le contenu des deux dossiers (dans ce cas, les deux nouveaux dossiers) dans le seul

et profitez du code source ...

1501
Prankul Garg

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

  1. télécharger apktool.bat (ou apktool pour Linux) et apktool_<version>.jar à partir de http: // ibotpeaches. github.io/Apktool/install/
  2. renommer le fichier jar ci-dessus en _apktool.jar_ et placer les deux fichiers dans le même dossier
  3. ouvrez une boîte à dos (_cmd.exe_) et placez-vous dans ce dossier; vérifiez qu'un environnement Java est installé (pour Linux, vérifiez également les notes concernant les bibliothèques requises)
  4. Début: _apktool decode [apk file]_

    Résultat intermédiaire : fichiers de ressources, _AndroidManifest.xml_

  5. décompressez 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_ de http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.Zip&can=2&q=
  7. faites glisser _classes.dex_ sur _dex2jar.bat_ (ou entrez _<path_to>\dex2jar.bat classes.dex_ dans une zone DOS; pour Linux, utilisez _dex2jar.sh_)

    Résultat intermédiaire : _classes_dex2jar.jar_

  8. décompressez _classes_dex2jar.jar_ (peut être facultatif en fonction du décompilateur utilisé)
  9. décompilez vos fichiers de classe (par exemple avec JD-GUI ou DJ Decompiler )

    Résultat : code source

Remarque: il est interdit de décompiler les 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 probablement obscurci

119
Trinimon

Bien que vous puissiez peut-être décompiler votre fichier APK, vous rencontrerez probablement un problème important:

ça ne va pas retourner le code que vous avez écrit. Au lieu de cela, il retournera tout ce que le compilateur aura inséré, avec des variables ayant des noms aléatoires, ainsi que des fonctions ayant des noms aléatoires. Cela pourrait prendre beaucoup plus de temps pour essayer de décompiler et de restaurer dans le code que vous aviez, que de recommencer à zéro.

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

et comment le sauvegarder.

108
Ryan Gooler

Il existe également une nouvelle application sur le Play Store avec laquelle il est possible de décompiler 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 également les visualiser sur votre ordinateur. Il ne nécessite pas de racine ou autre chose.

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

49
Cilenco

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

Je vous recommanderais d'avoir un référentiel de code même si vous êtes le seul codeur. J'utilise Project Locker pour mes propres projets. Il vous donne des repos svn et git gratuits.

27
Macarse

Ces deux articles décrivent comment combiner l'utilisation de apktool et dex2jar pour créer un fichier APK et créer un projet Eclipse capable de le construire 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 plaira à Eclipse.
  3. Créez un projet Eclipse pointez-le 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 le code source dont vous avez besoin de JDGui, collez-le dans une classe à l'intérieur d'Eclipse et modifiez-le.
  7. Supprimez cette classe du fichier jar (afin que vous n'ayez pas la même classe définie plusieurs fois)
  8. Exécuter.
22
Tom Hennen

apktool fonctionnera. Vous n'avez même pas besoin de connaître le magasin 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, fonctionnent parfaitement et il vaut peut-être la peine de les récupérer au moins. En fin de compte, vous devrez probablement réécrire votre code Java à partir de zéro.

Vous pouvez trouver apktool here . Il suffit simplement de télécharger apktool et l’assistant approprié (pour Windows, Linux ou Mac OS). Je recommande d'utiliser un outil tel que 7-Zip pour les décompresser.

20
Ryan Berger

Il y a quelques façons de le faire:

  1. Utilisez la fonctionnalité "Profile or Debug APK" dans Android Studio 3.0.

    Il vous permet d’ouvrir et d’explorer les fichiers APK dans Android Studio. Les classes sont décompilées en smali. Les ressources ne sont pas extraites et des éléments tels que "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 pourraient fonctionner avec smalidea .

    Android-studio

    select-file

    code

  2. Utilisez jadx .

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

    jdax-img

  3. Utilisez apktool .

    Apktool est un outil de ligne de commande qui extrait des ressources et décompile le code en smali pour un apk donné. Vous pouvez aussi recompiler 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...
    
12
0xcaff

Peut-être la plus facile à voir la source:

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

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

11
SKK

Ci-dessous OUTIL EN LIGNE:

http://www.javadecompilers.com/apk

il fait TOUT en un clic: décompilé . Fichiers Java + ressources + xml (dans un fichier .Zip) avec un très bon décompilateur (jadx return Java code dans endroits/fonctions où d'autres compilations renvoient des commentaires à l'intérieur d'une fonction du type "incapable de décompiler" ou du code assembleur/machine Android

6
Kamil Kiełczewski

Ce site https://www.apkdecompilers.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.

6
M. Usman Khan

Je vais vous montrer un autre moyen de décompiler les fichiers . Apk.

Vous pouvez suivre les 2 premières étapes à partir de "prankul garg". Donc, vous avez une autre opportunité:

étape 3 ':

Téléchargez le "JD-GUI", c'est facile de le trouver. Ouvrez votre fichier . Jar dans "jd-gui.exe". (Fichier> Ouvrir le fichier> 'trouvé votre . Jar fichier'). 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

2ème - Vous devez décoder le fichier . Dex (si vous le souhaitez, décodez le fichier . Apk en dex2jar, c'est possible)

3ème - Vous devez décoder . Jar fichier avec JD-GUI

6
Franklin Hirata

Je recommande personnellement Afficher Java Android App pour obtenir le code source. Vous pouvez le télécharger à partir du Play Store ou de ici

5
Codelover

Apktool pour le reverse engineering de tiers, fermés, binaires Android applications.

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

Cela permet de déboguer le code smali pas à pas. De plus, cela facilite le travail avec une application en raison de la structure de fichier semblable à celle du projet et de l’automatisation de certaines tâches répétitives telles que la construction d’apk, etc.

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

4

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écompile 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 similitude du code décompilé avec le code réel ne puisse être garantie. Il existe certains outils avancés obscurcissement du code disponibles sur le marché, qui gâchent le code pour le rendre difficile à décompiler/comprendre. par exemple. Proguard

3

apktool est LA voie à suivre. Le service en ligne apktool existe aussi: http://www.javadecompilers.com/apktool

Il est évident que certaines limitations existent en raison du service "en ligne": vous pouvez extraire et rechercher des actifs et le fichier manifeste, mais il est impossible de recompiler l’application pour le moment.

Néanmoins, c’est un moyen simple d’ouvrir l'application Android.

3
Andrew Rukin

Android studio vous propose d'analyser tous les fichiers apk.

1 - Dans le menu de construction, choisissez l’analyse apk et sélectionnez le fichier apk. 2 - Cela donnera le fichier classes.dex et d’autres fichiers. 3 - Cliquez sur classes.dex qui vous donnera la liste des dossiers, paquets, bibliothèques et fichiers. 4 - Depuis et Android paramètres du studio installer un plugin appelé "Dex to Jar" 5 - cliquez sur n'importe quel fichier d'activité de votre projet extrait et choisissez dex à jar dans le menu de construction.

Cela vous donnera le code réel de votre fichier Java.

À votre santé.

2
Rohit Patil

Le moyen le plus simple consiste à utiliser Apk OneClick Decompiler. C’est un paquet d’outils pour décompiler et désassembler les APK (paquets Android).

CARACTÉRISTIQUES

  • Toutes les fonctionnalités sont intégrées dans le menu contextuel de Windows.
  • Décompiler les classes APK en Java codes sources.
  • Démonter APK pour smali code et décoder ses ressources.
  • Installez APK pour téléphoner en faisant un clic droit.
  • Recompiler APK après avoir édité le code smali et/ou les ressources. Pendant la recompilation:
  • Optimiser les images png
  • Signer apks
  • Zipalign

EXIGENCES

Java Runtime Environment (JRE) doit être installé.

Vous pouvez le télécharger à partir de ce lien Apk OneClick Decompiler

Profitez de ça.

1
Masoud Mokhtari

Il existe une application pour cela et ne prend généralement que quelques clics et vous avez terminé. https://github.com/Nuvolect/DeepDive-Android

  1. Sélectionnez Applications, sous "Applications installées", sélectionnez votre application. Si ce n'est pas là, vous pouvez charger l'APK.
  2. Sélectionnez "Extraire APK"
  3. Sélectionnez "Déballer APK"
  4. Sélectionnez "Décompiler avec Jadx". Cela peut prendre quelques secondes ou quelques minutes en fonction de la vitesse de votre appareil.

Ensuite, vous pouvez parcourir le code source, le télécharger sur un autre ordinateur avec elFinder ou le rechercher à l'aide de Lucene.

En plus de Jadx, il possède des décompilateurs CFR et Fernflower.

1
MobileMateo

J'ai trouvé ce qui suit comme méthode la plus simple:

  1. Renommez votre app.apk en app.Zip (Changez l'extension d'apk en Zip)
  2. Extraire le fichier Zip dans un dossier
  3. Utilisez l'outil JADX pour lire le code source, présent dans le fichier classes.dex.
1
Masood Anwar

en fonction de votre condition, si votre apk Android:

Condition1: ne durcit pas (par Tencent Legu/Qihoo 360/...)

Choice1: utilisation du service en ligne

tel que:

en utilisant www.javadecompilers.com

aller à:

décoder automatiquement d'apk en Java code source

pas:

upload fichier apk + cliquez sur Run + attendez un peu de temps + cliquez sur Download pour obtenir le Zip + décompresser ->

sources/com/{yourCompanyName}/{yourProjectName}

est votre code source Java attendu

Choice2: décompiler/craquer par vous-même

utilisez l'outil associé pour décompiler/craquer vous-même:

utiliser jadx/jadx-gui convertir apk en Java sourcecode

télécharger jadx-0.9.0.Zip puis décompressez pour obtenir bin/jadx, puis:

  • mode de ligne de commande:
    • dans le terminal: jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • output_folder affichera sources et resources décodés
      • sources/com/{yourCompanyName}/{yourProjectName} est votre prévu Java sourcecode
  • Mode graphique
    • double-cliquez pour exécuter jadx-0.9.0/bin/jadx-gui (Linux jadx-gui.sh/Windows jadx-gui.bat)
    • ouvrir le fichier apk
    • il décodera automatiquement -> voir votre code source Java attendu
    • save all ou save as Gradle project

par exemple:

Condition2: durcir (par Tencent Legu/Qihoo 360/...)

la méthode principale de 3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to Java src

explication détaillée:

Étape 1: apk/app to dex

utiliser l'outil (FDex2/DumpDex) dump/hook out (un ou plusieurs) fichier dex depuis l'application en cours d'exécution

pas:

préparer l'environnement

dump out dex à partir de l'application en cours d'exécution

  • lancez FDex2 puis cliquez sur votre nom d'apk pour permettre à plus tard de capturer/déconnecter dex

  • (en téléphone/émulateur) lancez votre application
  • trouver et copier le dump out des ressources apk entières dans /data/data/com/yourCompanyName/yourProjectName
    • dans son dossier racine normalement trouvera plusieurs fichiers dex

Étape 2: dex to jar

utiliser l'outil (dex2jar) pour convertir (le fichier spécifique contenant la logique d'application) le fichier dex en fichier jar

télécharger dex2jar obtenu dex-tools-2.1-SNAPSHOT.Zip , décompressez obtenu dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh, puis

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex

par exemple:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

Étape 3: jar to Java src

utiliser un des outils:

convertir jar en Java src

pour de jar à Java effet de conversion src:

Jadx> Procyon> CRF >> JD-GUI

recommande donc d'utiliser: Jadx/jadx-gui

pas:

  • double-cliquez pour exécuter jadx-gui
  • ouvrir le fichier dex
  • File -> save all

par exemple:

exporté Java src:


Des explications plus détaillées peuvent voir mon ebook en ligne Chinois tutoriel:

0
crifan