Comment puis-je" décompiler " les fichiers de classe Java? [fermé]


Quel programme puis-je utiliser pour décompiler un fichier de classe? Vais-je réellement obtenir du code Java, ou est-ce juste du code d'assemblage JVM?

Sur les questions de performance Java sur ce site, je vois souvent des réponses de personnes qui ont "décompilé" le fichier de classe Java pour voir comment le compilateur optimise certaines choses.

Author: Peter Mortensen, 2008-11-07

19 answers

Mise à jour février 2016:

Www.javadecompilers.com liste JAD comme étant:

Le décompilateur Java le plus populaire, mais principalement de cet âge seulement. Écrit en C++, donc très rapide.
Obsolète, non pris en charge et ne décompile pas correctement Java 5 et versions ultérieures

Votre kilométrage peut donc varier avec le jdk récent (7, 8).

Le même site liste d'autres outils.

Et javadecompiler, comme l'a noté Salvador Valence dans les commentaires (septembre 2017), offre un SaaS où vous téléchargez le fichier .class dans le cloud et il vous renvoie le code décompilé.


Réponse originale: Oct. 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.3.
  • La plupart des décompilateurs Java téléchargeables aujourd'hui sur Internet, tels que "DJ Java Decompiler" ou "Cavaj Java Decompiler", sont alimentés par JAD: ils ne peuvent pas afficher les sources Java 5.

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

  • Prise en charge explicite de la décompilation et de l'analyse Java 5+ ".catégorie" fichiers de.
  • Une belle interface graphique:

capture

Il fonctionne avec les compilateurs de JDK 1.1.8 jusqu'à JDK 1.7.0, et d'autres (Jikes , JRockit, etc.).

Il dispose d'une version de démonstration en ligne en direct qui est en fait 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
Author: VonC, 2017-09-15 21:45:21

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

  1. Procyon: open-source (Apache 2) et activement développé
  2. Krakatau : 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 d'autres.

Ceux-ci produisent du code Java. Java est livré avec quelque chose qui vous permet voir le code d'octet JVM (javap ).

 101
Author: billjamesdev, 2016-11-07 15:39:35

Pour voir le code source Java, vérifiez un décompilateur. Aller chercher jad.

Si vous voulez voir les bytecodes, utilisez simplement javap qui vient avec le JDK.

 51
Author: Marko, 2008-11-07 16:03:51

J'en ai essayé plusieurs, et Procyon semble fonctionner le mieux pour moi. Il est en développement actif et prend en charge de nombreuses fonctionnalités des dernières versions de Java.

Ce sont les autres que j'ai essayés:

  • CFR
    • Méthode de décompilation prometteuse, mais souvent ratée. Je vais garder mes yeux sur celui-ci. Également activement développé avec le support des dernières fonctionnalités Java.
  • Krakatau
    • Adopte une approche différente en ce sens il essaie de produire du code Java équivalent au lieu d'essayer de reconstruire la source d'origine, ce qui a le potentiel de le rendre meilleur pour le code obscurci. De mes tests, il était à peu près à égalité avec Procyon, mais toujours agréable d'avoir quelque chose de différent. J'ai dû utiliser l'indicateur de ligne de commande -skip afin qu'il ne s'arrête pas sur les erreurs. Activement développé, et assez intéressant, il est écrit en Python.
  • JD-GUI
  • JAD
    • A fonctionné, mais ne prend en charge que Java 1.4 et ci-dessous. Aussi disponible en tant que plugin Eclipse. N'est plus en cours de développement.
 29
Author: bmaupin, 2014-12-22 16:00:27

J'utilise JAD Decompiler.

Il existe un plugin Eclipsepour cela, jadeclipse. C'est assez agréable.

 18
Author: sakana, 2016-07-15 13:21:08

Procyon comprend un décompilateur. Il est des logiciels libres.

 14
Author: Janus Troelsen, 2013-06-10 14:02:51

Suie est une option pour le code Java plus récent. Au moins il a l'avantage d'être encore récemment entretenu...

Aussi, Décompilateur Java 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 d'autres options.

 13
Author: Quinn Taylor, 2009-09-18 23:59:11

JD-GUI est vraiment bon. Vous pouvez simplement ouvrir un fichier JAR et parcourir le code comme si vous travaillez sur une IDE. De bonnes choses.

 13
Author: G Kumar, 2014-02-23 16:38:21

Voici une liste de décompilateurs à partir 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 utilisation non-commerciale uniquement, http://jd.benow.ca/

Il s'agit d'un logiciel libre. https://github.com/fesh0r/fernflower ,

JAD {[4] – - donné ici seulement pour des raisons historiques. Gratuit, pas de code source disponible, http://varaneckas.com/jad / Obsolète, non pris en charge et ne décompile pas correctement Java 5 et versions ultérieures.

Vous pouvez tester les décompilateurs mentionnés ci-dessus en ligne, aucune installation requise et faire votre propre choix éclairé.

Java décompilation dans le cloud: http://www.javadecompilers.com/

 11
Author: Andrew Rukin, 2017-12-24 11:19:51

Il y a quelques programmes que vous pouvez utiliser. Vous obtiendrez le code Java réel, mais parfois le code aura été obscurci afin que les méthodes soient nommées par une lettre ou un nombre ou un mélange aléatoire de lettres et de chiffres.

DJ Decompiler Moka

 10
Author: Mike Pone, 2014-11-19 18:21:45

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 certain temps et ne gère pas très bien les classes Java 1.5+. Je n'ai vu aucun outil qui gérera correctement les classes 1.5+.

 9
Author: John Meagher, 2008-11-07 16:18:26

Jetez un oeil àcavaj .

 6
Author: Paulo Guedes, 2008-11-07 16:02:55

Tous les liens JAD répertoriés jusqu'à présent semblent être cassés, j'ai donc trouvé ce site. Fonctionne très bien (pour Linux, au moins)! Sur Ubuntu 11.10, j'ai dû télécharger le statique pour une raison quelconque.

Http://www.varaneckas.com/jad

 6
Author: kdazzle, 2012-04-04 03:11:15
  • JAD est celui qui fonctionne et est simple.

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

 5
Author: Berlin Brown, 2011-03-13 05:41:45

Si vous voulez voir comment le compilateur Java fait certaines choses, vous ne voulez pas la décompilation, vous voulez le désassemblage. La décompilation implique de transformer le bytecode en source Java, ce qui signifie que beaucoup d'informations de bas niveau sont perdues, et si vous vous interrogez sur l'optimisation du compilateur, c'est probablement l'information même qui vous intéresse.

Quoi qu'il en soit, il se trouve que j'ai écrit undésassembleur Java open source . Contrairement à Javap, cela fonctionne même sur très pathologique classes, afin que vous puissiez voir ce que les outils d'obscurcissement font également à vos classes. Il peut également faire de la décompilation, bien que je ne le recommande pas.

 5
Author: Antimony, 2012-11-30 03:13:59

JAD ne fonctionne pas pour moi (problème Ubuntu 11.10), j'ai donc avancé et sauté sur JODO. Au moins, il a ouvert le code source Java et a pu décompiler mon .classe correctement.

Je recommande de vérifier d'abord 'branches/generic' branch. Les troncs ne sont pas stables.

 4
Author: alexander.box, 2013-06-25 17:52:07

Sur la plate-forme IntelliJ IDEA, vous pouvez utiliser Java Decompiler IntelliJ Plugin. 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 fameux outils JD-GUI .

entrez la description de l'image ici

 4
Author: naXa, 2015-10-23 08:36:03

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 les fonctionnalités du langage Java 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 applications Java générées avec des compilateurs Java traditionnels - un taux de récupération très élevé. Il est simple mais outil puissant qui vous permet de décompiler Java et Dalvik bytecode (DEX, APK) en source Java lisible.

 1
Author: naXa, 2015-10-23 08:44:20

Pour OSX je recommande: jarzilla ou JD-GUI

Ils vous permettent tous les deux de voir jar,war,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
Author: cjackson, 2017-02-02 16:01:12