Quel programme puis-je utiliser pour décompiler un fichier de classe? Est-ce que je vais obtenir le code Java ou s'agit-il uniquement du code d'assemblage JVM?
Sur Java questions sur les performances de ce site, je vois souvent les réponses de personnes qui ont "décompilé" le fichier de classe Java pour voir comment le compilateur optimise certaines choses.
Mise à jour de février 2016:
www.javadecompilers.com répertorie JAD comme étant:
le plus populaire Java décompilateur, mais principalement de cet âge seulement. Écrit en C++, donc très vite.
Obsolète, non pris en charge et ne se décompile pas correctement Java 5 et versions ultérieures
Donc, votre kilométrage peut varier avec le récent jdk (7, 8).
Le même site liste d'autres outils.
Et javadecompiler, comme indiqué par Salvador Valencia dans les commentaires (septembre 2017), offre un SaaS où vous téléchargez le fichier .class
sur le nuage et il vous retourne le code décompilé.
Réponse originale: octobre 2008
Java Decompiler (Encore un autre décompilateur Fast Java) a:
Cela fonctionne avec les compilateurs de JDK 1.1.8 à JDK 1.7.0, et autres ( Jikes , JRockit , etc.).
Il comporte une version en ligne version démo en direct qui est en réalité entièrement fonctionnelle! Vous pouvez simplement déposer un fichier JAR sur la page et voir le code source décompilé sans rien installer.
Il y a quelques décompilateurs là-bas ... Une recherche rapide donne:
Et beaucoup plus.
Celles-ci produisent le code Java. Java est livré avec quelque chose qui vous permet de voir le code en octets JVM ( javap ).
Pour voir le code source Java, vérifiez un décompilateur. Allez chercher jad.
Si vous voulez voir des codes octets, utilisez simplement javap qui est fourni avec le JDK.
J'en ai essayé plusieurs et Procyon semblait fonctionner au mieux pour moi. Il est en cours de développement et prend en charge de nombreuses fonctionnalités des dernières versions de Java.
Ce sont les autres que j'ai essayés:
-skip
pour qu'il ne s'arrête pas en cas d'erreur. Développé activement, et assez intéressant, il est écrit en Python.J'utilise JAD Decompiler .
Il existe un plugin Eclipse , jadeclipse . C'est joli Nice.
Procyon inclut un décompilateur. C'est FOSS.
Suie est une option pour le nouveau code Java. Au moins, il a l'avantage d'être encore récemment entretenu ...
De plus, Java Decompiler est un décompilateur avec une interface graphique autonome et une intégration Eclipse.
Enfin, Jdec n'a pas été mentionné, bien que ce ne soit pas aussi poli que les autres options.
Voici une liste des décompilateurs en date de février 2015:
Procyon , open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
CFR, gratuit, pas de code source disponible, http://www.benf.org/other/cfr/ =
JD, gratuit pour un usage non commercial uniquement, http://jd.benow.ca/
Fernflower , open-source, https://github.com/fesh0r/fernflower ,
JAD - donné ici uniquement pour des raisons historiques. Gratuit, aucun code source disponible, http://varaneckas.com/jad/ périmé, non pris en charge et ne se décompile pas correctement Java 5 et versions ultérieures.
Vous pouvez tester en ligne les décompileurs susmentionnés, aucune installation requise et faire votre propre choix éclairé.
Décompilateurs Java dans le cloud: http://www.javadecompilers.com/
Il existe quelques programmes que vous pouvez utiliser. Vous obtiendrez le code Java actuel, mais parfois, le code aura été masqué, de sorte que les méthodes sont nommées avec une lettre ou un chiffre ou un mélange aléatoire de lettres et de chiffres.
La plupart des décompilateurs pour Java sont basés sur JAD . C'est un excellent outil, mais malheureusement, il n'a pas été mis à jour depuis un moment et ne gère pas très bien Java 1.5+ classes. Je n'ai pas vu d'outils capables de gérer correctement les classes 1.5+.
Jetez un oeil à cavaj .
Tous les liens JAD répertoriés jusqu'à présent semblent être cassés, alors j'ai trouvé ce site. Fonctionne très bien (pour Linux, au moins)! Sur Ubuntu 11.10, je devais télécharger le fichier statique pour une raison quelconque.
JAD est celui qui fonctionne et est simple.
De plus, si vous voulez juste voir les méthodes, utilisez javap.
Si vous voulez voir comment le compilateur Java fait certaines choses, vous ne voulez pas de décompilation, vous voulez un désassemblage. La décompilation implique la transformation du bytecode en source Java, ce qui signifie que de nombreuses informations de bas niveau sont perdues. Si vous vous interrogez sur l'optimisation du compilateur, il s'agit probablement des informations mêmes qui vous intéressent.
Quoi qu’il en soit, j’ai écrit un désassembleur open source Java . Contrairement à Javap, cela fonctionne même sur les classes très pathologiques, vous pouvez ainsi voir ce que les outils d'obfuscation font à vos classes. Il peut aussi faire la décompilation, bien que je ne le recommande pas.
Sur la plate-forme IntelliJ IDEA, vous pouvez utiliser plug-in Java Decompiler IntelliJ . Il vous permet d’afficher toutes les sources Java pendant votre processus de débogage, même si vous ne les avez pas toutes. Il est basé sur les célèbres outils JD-GUI .
JAD ne fonctionne pas pour moi (problème Ubuntu 11.10), donc j'ai avancé et arrêté sur JODO . Au moins, il possède le code source Open Java et est capable de décompiler correctement ma . Class .
Je recommande de vérifier 'branches/generic' branche en premier. Le tronc n'est pas stable.
Avec AndroChef Java Decompiler vous pouvez décompiler les fichiers de classe apk, dex, jar et Java. C'est simple et facile AndroChef JD est basé sur FernFlower . Vous pouvez l'évaluer en 10 utilisations gratuites.
AndroChef prend en charge Java les fonctionnalités du langage telles que les génériques, les énumérations et les annotations. Selon certaines études, AndroChef Java Decompiler est capable de décompiler 98,04% des Java applications générées avec les compilateurs Java traditionnels - un taux de récupération très élevé. C'est un outil simple mais puissant qui vous permet de décompiler Java et le bytecode de Dalvik (DEX, APK) en source lisible Java.
Pour OSX, je recommande: jarzilla ou JD-GUI
Ils vous permettent tous les deux de voir le bocal, la guerre, etc. contenu du fichier et décompile tous les fichiers de classe à l'intérieur d'eux.
Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/