Comment «décompiler» les fichiers de classe Java? [fermé]

556

Quel programme puis-je utiliser pour décompiler un fichier de classe? Vais-je réellement obtenir du code Java ou s'agit-il simplement d'un 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.

Kip
la source
4
L'art de la «décompilation» peut également être considéré comme une ingénierie inverse. Bien que parfois, lors de l'ingénierie inverse, vous n'avez pas toujours accès aux binaires.
Makach
Personne n'a mentionné bytecodeviewer.com , qui peut décompiler en source java et en bytecode (car la source java est basée sur JAD).
Fernando Gonzalez Sanchez

Réponses:

588

Mise à jour février 2016:

www.javadecompilers.com répertorie JAD comme étant:

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

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

Le même site répertorie d'autres outils.

Et javadecompiler, comme l'a noté Salvador Valencia dans les commentaires (septembre 2017), propose un SaaS où vous téléchargez le .classfichier 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.

Décompilateur Java (encore un autre décompilateur Java rapide) a:

  • Prise en charge explicite de la décompilation et de l'analyse des fichiers «.class» Java 5+ .
  • Une belle interface graphique:

capture d'écran

Il fonctionne avec les compilateurs de JDK 1.1.8 à JDK 1.7.0 et 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.

VonC
la source
5
+1 Il convient de mentionner qu'il est également modularisé, de sorte que le noyau (implémenté en C ++) peut être exploité ailleurs.
Quinn Taylor
1
jd-gui-0.3.3 également disponible ici
amaidment
1
Dans le cas où l'on a installé le plug-in de décompilation java Eclipse sur Eclipse Juno, et Eclipse a commencé à se bloquer sur l'initialisation de Marketplace DND forçant à tuer tout le processus: la suppression du jd. *. Jar du répertoire des plug-ins Eclipse vient de le corriger pour moi.
LSerni
4
@Rishi de la même manière que vous protégez votre propriété intellectuelle dans n'importe quelle langue ou plate-forme - de bons avocats. DRM n'est qu'un pansement.
Antimony
1
Il propose désormais SaaS où vous téléchargez le fichier .class dans le cloud et vous renvoie le code décompilé. A travaillé pour un POJO simple.
Salvador Valence
101

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

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

billjamesdev
la source
2
Puis-je également ajouter que Procyon, CFR, JAD et DJ sont disponibles en tant que service Web: javadecompilers.com
Andrew Rukin
javadecompilers.com - mon bouc de sauvetage!
MarcoZen
kpdus.com/jad.html est un lien AD
marcinj
Merci @marcinj, j'ai trouvé un autre lien qui contient des liens pour le télécharger.
billjamesdev
51

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

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

Marko
la source
5
Je recommanderais plutôt l'un des décompilateurs open source, car ils sont activement développés. Utilisez plutôt Procyon , le décompilateur CFR ou Krakatau (Python).
Janus Troelsen
29

J'en ai essayé plusieurs, et Procyon a semblé fonctionner le 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
    • Décompilation de méthode prometteuse mais souvent ratée. Je garderai un œil sur celui-ci. Également activement développé avec prise en charge des dernières fonctionnalités Java.
  • Krakatau
    • Adopte une approche différente en ce sens qu'il essaie de produire du code Java équivalent au lieu d'essayer de reconstruire la source d'origine, ce qui a le potentiel de l'améliorer pour le code obscurci. D'après mes tests, c'était à peu près à égalité avec Procyon, mais toujours agréable d'avoir quelque chose de différent. J'ai dû utiliser l' -skipindicateur de ligne de commande 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
    • Fonctionné, mais ne prend en charge que Java 1.4 et versions antérieures. Également disponible en tant que plugin Eclipse . N'est plus en cours de développement.
bmaupin
la source
1
Notez que la IGNORE_EXCEPTIONSchose a maintenant été changée en drapeau de ligne de commande -skip.
Antimony
14

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

Janus Troelsen
la source
13

La suie est une option pour le code Java plus récent. 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 qu'il ne soit pas aussi raffiné que les autres options.

Quinn Taylor
la source
Savez-vous comment décompiler un fichier de classe concret avec Soot? Je ne suis pas sûr que ce soit possible ...
Janus Troelsen
12

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

G Kumar
la source
11

Voici une liste de 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/ obsolète, non pris en charge et ne décompile pas correctement Java 5 et ultérieures.

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

Décompilateurs Java dans le cloud: http://www.javadecompilers.com/

Andrew Rukin
la source
1
Procyon fonctionne mieux !!!!
MarcoZen
10

Il existe 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 chiffre ou un mélange aléatoire de lettres et de chiffres.

DJ Decompiler Mocha

Mike Pone
la source
9

La plupart des décompilateurs pour Java sont basés sur JAD . C'est un excellent outil, mais malheureusement 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 capable de gérer correctement les classes 1.5+.

John Meagher
la source
3
Et voilà: je viens de poster une réponse à votre réponse;) JDK1.5 et plus pris en charge!
VonC
"Je n'ai vu aucun outil capable de gérer correctement 1,5+ classes" - Procion, Fernflower, JDCore et CFR (celui-ci gère Java 8!)
Andrew Rukin
6

Jetez un oeil à cavaj .

Paulo Guedes
la source
3
Cela utilise également en jaddessous.
Quinn Taylor
6

Tous les liens JAD répertoriés jusqu'à présent semblent être rompus, 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

kdazzle
la source
5
  • JAD est celui qui fonctionne et est simple.

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

Berlin Brown
la source
5

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 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, ce sont probablement les informations mêmes qui vous intéressent.

Quoi qu'il en soit, il se trouve que j'ai écrit un désassembleur Java open source . Contrairement à Javap, cela fonctionne même sur des classes hautement pathologiques, vous pouvez donc voir ce que les outils d'obscurcissement font également à vos classes. Il peut également effectuer une décompilation, mais je ne le recommanderais pas.

Antimoine
la source
4

JAD ne fonctionne pas pour moi (problème Ubuntu 11.10), j'ai donc avancé et arrêté JODO . Au moins, il a du code source Open Java et a pu décompiler correctement ma classe .

Je recommande de vérifier d'abord la branche «branches / générique» . Le tronc n'est pas stable.

alexander.box
la source
1
JODO est sporadiquement maintenu tandis que CFR et Procyon sont activement développés et prennent en charge JDK 8.
Janus Troelsen du
4

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

entrez la description de l'image ici

naXa
la source
@ NoOP Êtes-vous un robot? Ou tout simplement ne pas prêter attention à un sujet de révision?
naXa
Désolé pour cela, à première vue, il semble que la réponse ne soit que le lien. Peut-être que vous devriez ajouter plus de détails et que votre réponse n'est conforme qu'au titre de la question et non au contenu de la question.
ashiquzzaman33
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article.
Kristijan Iliev
@Chris avez-vous essayé la solution suggérée? Avez-vous même lu la question ?
naXa
1
@ NoOP est désolé d'être impoli = (je suis submergé par le nombre de critiques qui n'y prêtent pas attention.
naXa
1

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 comme 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é. C'est un outil simple mais puissant qui vous permet de décompiler les bytecodes Java et Dalvik (DEX, APK) en source Java lisible.

naXa
la source
1
@Dimitrius, veuillez lire attentivement les réponses lors d'un examen. Comment imaginez-vous inclure un FernFlower ou AndroChef ici?
naXa