web-dev-qa-db-fra.com

Comment "décompiler" Java fichiers de classe?

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.

556
Kip

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

  • La version finale de JSR 176, définissant les principales fonctionnalités de J2SE 5.0 (Java SE 5), a été publiée le 30 septembre 2004.
  • La dernière version Java prise en charge par JAD, le célèbre décompilateur Java écrit par M. Pavel Kouznetsov, est JDK 1..
  • La plupart des Java décompileurs téléchargeables aujourd'hui sur Internet, tels que "DJ Java Decompiler" ou "Cavaj Java Decompiler", sont alimentés par JAD: ils peuvent pas afficher Java 5 sources.

Java Decompiler (Encore un autre décompilateur Fast Java) a:

  • Support explicite pour la décompilation et l'analyse de fichiers Java 5 + ".class".
  • Une belle interface graphique:

screenshot

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.

588
VonC

Il y a quelques décompilateurs là-bas ... Une recherche rapide donne:

  1. Procyon : open-source (Apache 2) et activement développé
  2. Krakata : open-source (GPLv3) et activement développé
  3. CFR : open-source (MIT) et activement développé
  4. JAD
  5. DJ Java Decompiler
  6. Moka

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 ).

101
billjamesdev

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.

51
Marko

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:

  • CFR
    • La décompilation de la méthode est prometteuse, mais a souvent échoué. Je vais garder mes yeux sur celui-ci. Développé activement avec prise en charge des dernières fonctionnalités de Java.
  • Krakata
    • Adopte une approche différente en ce sens qu’il essaie de générer un code Java équivalent au lieu d’essayer de reconstruire le code source, ce qui pourrait l’améliorer pour le code obscurci. D'après mes tests, c'était à peu près à la hauteur de Procyon, mais c'était quand même bien d'avoir quelque chose de différent. J'ai dû utiliser l'indicateur de ligne de commande -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.
  • JD-GUI
  • JAD
    • A travaillé, mais ne supporte que Java 1.4 et inférieur. Egalement disponible en tant que plugin Eclipse . N'est plus en développement.
29
bmaupin

J'utilise JAD Decompiler .

Il existe un plugin Eclipse , jadeclipse . C'est joli Nice.

18
sakana

Procyon inclut un décompilateur. C'est FOSS.

14
Janus Troelsen

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.

13
Quinn Taylor

JD-GUI est vraiment bon. Vous pouvez simplement ouvrir un fichier JAR et parcourir le code comme si vous travailliez sur un IDE. Bon produit.

13
G Kumar

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/

11
Andrew Rukin

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.

DJ DecompilerMocha

10
Mike Pone

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+.

9
John Meagher

Jetez un oeil à cavaj .

6
Paulo Guedes

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.

http://www.varaneckas.com/jad

6
kdazzle
  • JAD est celui qui fonctionne et est simple.

  • De plus, si vous voulez juste voir les méthodes, utilisez javap.

5
Berlin Brown

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.

5
Antimony

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 .

enter image description here

4
naXa

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.

4
alexander.box

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.

1
naXa

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/

1
cjackson