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

Quel programme puis-je utiliser pour décompiler un fichier de classe? Est-ce que je vais vraiment avoir du code Java, ou est-ce que c'est 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écomposé" le fichier de classe Java pour voir comment le compilateur optimise certaines choses.

556
demandé sur Peter Mortensen 2008-11-07 19:00:03

19 réponses

Mise À Jour Février 2016:

www.javadecompilers.com listes JAD comme étant:

le plus populaire Java decompiler, mais principalement de cet âge seulement. Écrit en C++, donc très rapide.

Obsolète, non supportée et ne se décompose pas correctement Java 5 et plus tard

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

le même la liste des sites d'autres outils.

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


réponse Originale à cette question: Oct. 2008

  • La version finale de la JSR 176, de définir les principales caractéristiques de J2SE 5.0 (Java SE 5), a été publié le 30 septembre 2004.
  • la dernière version Java supportée par JAD, le fameux décomposeur Java écrit par M. Pavel Kouznetsov, est JDK 1.3 .
  • la plupart des java decompilers 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 Java decompiler rapide) a:

  • soutien Explicite pour la décompilation et à l'analyse du Java 5+ ".catégorie" fichiers de.
  • Une belle interface:

screenshot

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

Il dispose d'une ligne version de démonstration en direct qui est en fait entièrement fonctionnel! Vous pouvez simplement déposer un fichier jar sur la page et voir le code source décomposé sans rien installer.

588
répondu VonC 2017-09-15 21:45:21

il y a quelques décomposeurs dehors... 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 bien d'autres.

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

101
répondu billjamesdev 2016-11-07 15:39:35

pour voir le code source Java, Vérifiez un peu decompiler. Allez chercher jad .

si vous voulez voir les bytecodes, il suffit d'utiliser javap qui est livré avec le JDK.

51
répondu 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é:

  • CFR
    • promettant, mais échouant souvent, la décompilation par méthode. Je vais garder mes yeux sur celui-ci. Également développé activement avec le soutien des dernières fonctionnalités Java.
  • Krakatau
    • adopte une approche différente en ce qu'il essaie de produire du code Java équivalent au lieu d'essayer de reconstruire la source originale, ce qui a le potentiel de la rendre meilleure pour le code obscurci. D'après mes tests, il était à peu près sur le même pied que Procyon, mais toujours agréable d'avoir quelque chose de différent. J'ai dû utiliser le drapeau de la ligne de commande -skip pour 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
    • fonctionne, mais ne supporte que Java 1.4 et inférieur. Aussi disponible comme un plugin Eclipse . N'est plus en cours de développement.
29
répondu bmaupin 2014-12-22 16:00:27

j'utilise JAD Decompiler .

Il y a un Eclipse plugin pour ça, jadeclipse . C'est assez agréable.

18
répondu sakana 2016-07-15 13:21:08

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

14
répondu Janus Troelsen 2013-06-10 14:02:51

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

aussi, Java Decompiler est un decompiler avec à la fois une interface graphique autonome et une intégration Eclipse.

enfin, Jdec n'a pas été mentionné, bien qu'il ne soit pas aussi poli que les autres option.

13
répondu Quinn Taylor 2009-09-18 23:59:11

JD-GUI est vraiment bien. Vous pouvez simplement ouvrir un fichier JAR et parcourir le code comme si tu travailles sur un IDE. De bonnes choses.

13
répondu G Kumar 2014-02-23 16:38:21

Voici une liste des décomposeurs en date de février 2015:

Procyon , Source libre, 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 seulement, http://jd.benow.ca/

Fernflower , Source libre, https://github.com/fesh0r/fernflower ,

JAD – donné ici seulement pour raison historique. Gratuit, Pas de code source disponible, http://varaneckas.com/jad / Obsolète, non supportée et ne se décompose pas correctement Java 5 et plus tard.

, Vous pouvez tester mentionnés ci-dessus décompilation en ligne, pas de installation nécessaire et faire votre propre choix instruit.

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

11
répondu 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 de sorte que les méthodes sont nommées par une lettre ou un nombre ou un mélange aléatoire de lettres et de nombres.

DJ Decompiler Moka

10
répondu Mike Pone 2014-11-19 18:21:45

la plupart des décompileurs 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 pas vu d'outils capables de gérer correctement les classes 1.5+.

9
répondu John Meagher 2008-11-07 16:18:26

regardez cavaj .

6
répondu Paulo Guedes 2008-11-07 16:02:55

tous les liens JAD répertoriés jusqu'à présent semblent être cassés, donc j'ai trouvé ce site. Fonctionne 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
répondu kdazzle 2012-04-04 03:11:15
  • JAD est celui qui travaille et est simple.

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

5
répondu Berlin Brown 2011-03-13 05:41:45

si vous voulez voir comment le compilateur Java fait certaines choses, vous ne voulez pas décompilation, vous voulez démonter. La décompilation implique la transformation du 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 un open source Java disassembler . Contrairement À Javap, cela fonctionne même sur les classes hautement pathologiques, de sorte que vous pouvez voir ce que les outils d'obscurcissement font à vos classes aussi bien. Il peut aussi faire de la décompilation, bien que je ne le recommande pas.

5
répondu Antimony 2012-11-30 03:13:59

JAD ne fonctionne pas pour moi (Ubuntu 11.10 problème) donc je l'ai déplacé vers l'avant et sopped sur JODO . Au moins, il a du code source Java ouvert et a pu décompiler mon .la classe correctement.

je vous recommande de vérifier 'branches/generic' branche d'abord. Les malles ne sont pas stables.

4
répondu alexander.box 2013-06-25 17:52:07

Sur IntelliJ IDEA plate-forme, vous pouvez utiliser le bouton 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 célèbres outils JD-GUI .

enter image description here

4
répondu naXa 2015-10-23 08:36:03

Avec AndroChef Java Decompiler vous pouvez décompiler, apk dex, jar et java de la classe des fichiers. C'est simple et facile. AndroChef JD est basé sur FernFlower . Vous pouvez l'évaluer en 10 utilisations gratuites.

AndroChef supporte les fonctionnalités Java language comme les génériques, les enums et les annotations. Selon certaines études, AndroChef Java Decompiler est capable de décompiler 98,04% des applications Java générées avec les traditionnels Compilateurs Java - un taux de récupération très élevé. C'est un outil simple mais puissant qui vous permet de décomposer Java et Dalvik bytecode (DEX, APK) en Java source lisible.

1
répondu naXa 2015-10-23 08:44:20

pour OSX je recommande: jarzilla ou JD-GUI

ils vous permettent tous les deux de voir pot,guerre,etc. le contenu du fichier et décompose tous les fichiers de classe à l'intérieur d'eux.

Jarzilla: https://code.google.com/p/jarzilla/

JD - GUI: http://jd.benow.ca /

1
répondu cjackson 2017-02-02 16:01:12