
Pour les developpeurs et pour notre culture Android il est utile de savoir comment obtenir le code source d’une application pour Android. Comment ? en la décompilant !
Les applications pour Android sont des fichiers ayant l’extension « APK ».
En réalité elles sont compactées. Nous pouvons changer cette extension par « ZIP » ou « RAR » et la décompacter.
Nous aurons ainsi l’arborescence du projet et surtout à sa racine un fichier « classes.dex » qui contient toute l’intelligence de l’application.
Mais ce fichier « .DEX » est illisible.
Nous allons voir comment le décompiler et ainsi obtenir le code source en java du projet de l’application !
Il va nous falloir deux applications, plutôt trois en comptant winRAR.
- Dex2Jar : qui transformera le fichier « classes.dex » en « classes.dex.dex2jar.jar »
- Un décompilateur Java comme JD.
JD est proposé en application indépendante et en plug-in pour Eclipse. Ici j’ai choisi la version indépendante.(JD-GUI)

Je vous propose de créer un dossier « modif_apk » à la racine de votre C: et d’y télécharger les deux archivers :
« dex2jar-0.0.7.7-SNAPSHOT.zip » et « jd-gui-0.3.3.windows.zip »
Extraire les 2 fichiers avec Winrar par un click droit sur l’archive en choississant « extraire vers » afin de créer un dossier pour les fichiers extraits.
Par exemple : le fichier « signedLatinIME.apk » qui est le clavier de Gingerbread.
Télécharger « signedLatinIME.apk » et renommer le en « signedLatinIME.rar », l’extraire avec Winrar en choisissant aussi « extraire vers »
Vous devriez avoir ça :

Dans le dossier où vous avez extrait l’application clavier de Gingerbread vous trouverez un fichier nommé : « classes.dex » qui contient le code source « compilé » .
Copiez ce fichier dans le dossier « dex2jar-0.0.7.7-SNAPSHOT ».
Le dossier « dex2jar-0.0.7.7-SNAPSHOT » devrait être comme ça :

Nous allons maintenant transformer « classe.dex » en fichier .jar qui contient le code source du projet.
Pour cela ouvrez une console DOS par « démarrer », « exécuter » puis tapez cmd. Ou alors « démarrer », « tous les programmes », « accessoires », « invite de commande ».
Dans cette console DOS tapez :
cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT dex2jar classes.dex
La console devrait vous afficher :
Microsoft Windows XP [version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:Documents and Settings>c: C:Documents and Settings>cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex version:0.0.7.7-SNAPSHOT 0 [main] INFO pxb.android.dex2jar.v3.Main - dex2jar classes.dex -> classes.dex.dex2jar.jar Done. C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT>
COPIE ECRAN de la Console DOS :

Donc maintenant dans le dossier « C:modif_apkdex2jar-0.0.7.7-SNAPSHOT » vous devez avoir un fichier : « classes.dex.dex2jar.jar » :

Maintenant nous allons transformer ce fichier en code source java de l’application.
Allez dans le dossier « C:modif_apkjd-gui-0.3.3.windows » et lancez « jd-gui.exe ».

Aller dans « File », « Open File », allez chercher le fichier « classes.dex.dex2jar.jar »:

Cliquer sur « Ouvrir » et oh incroyable le projet de l’application s’affiche dans Java Decompiler :

Cliquez sur l’image pour la voir en taille réelle.
Voila nous avons tout le code source du projet de l’application « signedLatinIME.apk ».
Amusez-vous bien
Question bête, mais est ce que l’on peut le faire avec toutes les appli ? Exemple Google map ou le market ?
Car y priori ces application ne sont pas open sources et donc avec ces manip, toutes les applis le deviennent en fait?
Qu’en est-il du droit d’auteur après?
C’est l’éternel débat sur le reverse engineering. Il ne s’agit pas de copier les applications dans leur intégralité mais plutôt d’avoir des templates d’organisation de projet, d’écriture de code, de récupérer des syntaxes comme par exemple la déclaration d’un écouteur…
donc il est possible également de les recompiler en virant les banières de pubs. de même, on peut voir si telle ou telle appli envoie des informations personnelles, dans ce cas on pourrait la modifier pour retirer les mouchards et la recompiler ?
Zut, tu as été plus rapide que moi pour publier ce genre de tuto pourtant je l’avais prévu…
Je vais en faire un autre…
bonjour,
Il ne manquerai pas des / ou des dans ces lignes :
cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT
dex2jar classes.dex
???
si tout a fait bonne remarque le copier/coller les a mangé.
Je corrige de suite
merci
Merci
J’ai le droit à :
C:modif_apkdex2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex
‘java’ n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
tu dois avoir la JRE de java installée alors
http://www.java.com/fr/download/
bah java réinstallé = pareil :
C:modif_apkde x2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex
‘java’ n’est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT
entrée
dex2jar classes.dex
entrée
il te manque un niveau de hiérarchie dans l’arborescence il me semble