Décompiler les classes en Java

1. Introduction

Dans ce didacticiel, nous aborderons la décompilation des classes Java. Lorsque le code source n'est pas disponible, la décompilation des classes Java permet de déboguer et de comprendre le comportement du code source.

Jetons un coup d'œil aux différentes options disponibles.

2. Décompilation dans l'IDE

Étant donné que la plupart des développements sont effectués dans un environnement de développement intégré (IDE), il est logique que la décompilation ait également lieu dans un IDE.

Pour plus d'informations sur les IDE avec lesquels nous travaillerons, consultez nos articles sur le débogage dans Eclipse et la configuration d'IntelliJ IDEA.

2.1. Éclipse

Tout d'abord, dans Eclipse, nous avons besoin d'un plugin tel que Enhanced Class Decompiler (ECD). Ce plugin utilise cinq décompilateurs différents. Nous pouvons l'installer à partir du marché Eclipse, puis nous devons redémarrer Eclipse.

Ensuite, ECD nécessite une petite quantité de configuration pour associer les fichiers de classe à la visionneuse de décompilateur de classe:

De plus, nous devons associer des fichiers « .class sans source»:

Enfin, nous pouvons utiliser le décompilateur en appuyant sur Ctrl + Clic gauche sur un nom de classe . Nous voyons le décompilateur utilisé sur l'onglet fichier entre parenthèses.

Dans cet exemple, nous utilisons FernFlower:

2.2. IDÉE IntelliJ

Contrairement à Eclipse, IntelliJ IDEA fournit le décompilateur FernFlower par défaut .

Pour l'utiliser, il suffit de Ctrl + Clic gauche sur un nom de classe et d'afficher le code:

Nous pouvons également télécharger la source. Le téléchargement de la source fournira le code réel et les commentaires.

Par exemple, la classe d'annotation Component de la capture d'écran ci-dessus inclut Javadoc sur l'utilisation de Component . Nous pouvons remarquer la différence:

Bien que la décompilation soit très utile, elle ne donne pas toujours une image complète . Le code source complet nous donne une image complète.

3. Décompilation de la ligne de commande

Avant les plugins IDE, la ligne de commande était utilisée pour décompiler les classes. Les décompilateurs de ligne de commande peuvent également être utiles pour déboguer le bytecode Java sur un serveur distant qui n'est pas accessible avec un IDE ou une interface graphique.

Par exemple, nous pouvons décompiler avec JDCommandLine en utilisant une simple commande jar:

java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes

Ne laissez pas le paramètre ./classes. Il définit le répertoire de sortie.

Après une décompilation réussie, nous pouvons accéder aux fichiers source contenus dans le répertoire de sortie. Ils sont maintenant prêts à être affichés via un éditeur de texte comme Vim.

4. Conclusion

Nous avons examiné la décompilation dans les IDE Eclipse et IntelliJ IDEA, ainsi qu'une option de ligne de commande lorsqu'elles ne sont pas disponibles.

Nous avons également examiné la différence entre la liaison du code source et la décompilation.