339 votes

Comment décompiler un fichier Jar entier ?

Quelqu'un connaît-il un décompilateur gratuit capable de décompiler un fichier Jar entier au lieu d'une seule classe ? J'ai un problème avec les sous classes comme name$1.class name$2.class name.class

145 votes

N'oubliez pas deux autres choses : 1) La simple mention d'un décompilateur amènera les "plus saints que vous" à porter des jugements de valeur sur vos motivations alors qu'ils n'ont aucune idée de l'usage que vous prévoyez d'en faire, alors faites attention à qui vous parlez. 2) Le fantaisiste JavaDecompiler vous donnera un excellent rendu du code, bien disposé et facile à lire - il ne manque que les commentaires. Il est étonnamment bon, il a récupéré un fichier JAR dont la source avait été perdue depuis longtemps, avec les noms des variables. Bien sûr, nous n'obscurcissons pas nos fichiers JAR internes.

1 votes

Voir aussi les remarques dans le post Choisir et tester le décompilateur java .

10 votes

Je me suis arrêté sur ce fil de discussion tant de fois lorsque j'avais besoin d'étudier comment quelqu'un avait accompli quelque chose pour un plugin Bukkit... Ce commentaire me laisse toujours avec un sourire. J'aimerais pouvoir l'upvoter à chaque fois que je m'y arrête.

367voto

VonC Points 414372

2009 : JavaDecompiler peut faire un bon travail avec un jar : depuis la 0.2.5, tous les fichiers, dans les fichiers JAR, sont affichés.

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

Voir aussi la question "Comment "décompiler" les fichiers de classe Java ?" .

La JD-Eclipse ne semble pas avoir changé depuis la fin de l'année 2009 (cf. Changements ).
Son intégration avec les dernières versions d'Eclipse (3.8, 4.2+) pourrait donc être problématique.

JD-Core est activement maintenu.

Tous deux sont le résultat du travail fantastique de (SO user) Emmanuel Dupuy .


2018 : Une option plus moderne, mentionnée dans les commentaires por David Kennedy Araujo :

JetBrains/intellij-community/plugins/java-decompiler/engine

Fernflower est le premier décompilateur analytique réellement fonctionnel pour Java et probablement pour un langage de programmation de haut niveau en général.

java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>

java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\

Voir aussi Comment décompiler en fichiers java idée intellij pour une commande fonctionnant avec le récent IntelliJ IDEA.

5 votes

Fyi, le décompilateur java fonctionne sur Windows, mac et linux.

4 votes

@AlexS sympa :) Prochaine étape : le contrôle de version ( stackoverflow.com/questions/59561/ ) et ensuite l'intégration continue ( stackoverflow.com/questions/130592/ )

0 votes

Quelqu'un a réussi à faire fonctionner le plugin eclipse avec la dernière version d'eclipse et jdk7 ? J'ai essayé mais j'obtiens une erreur de téléchargement. JD-Gui fonctionne mais jd-eclipse semble échouer pour moi...

41voto

Yuval Adam Points 59423

Tout d'abord, il est bon de rappeler que tous les fichiers d'archives Java ( .jar / .war /etc...) sont tout ce qui est fondamentalement juste fantaisie .zip fichiers avec quelques manifestes et métadonnées ajoutés.

Deuxièmement, pour résoudre ce problème, j'utilise personnellement plusieurs outils qui traitent ce problème à tous les niveaux :

  • Jad + Jadclipse tout en travaillant dans l'IDE pour la décompilation .class fichiers
  • WinRAR En outre, mon outil de compression préféré prend en charge les archives Java de manière native (voir le premier paragraphe).
  • Au-delà de la comparaison mon outil de comparaison préféré, lorsqu'il est configuré correctement, peut effectuer des comparaisons à la volée entre n'importe quel fichier d'archive, y compris les suivants jar s. Cela vaut la peine d'essayer.

L'avantage de tout ce qui précède, c'est que je n'ai pas besoin de détenir d'autres outils externes qui encombrent mon environnement de travail. Tout ce dont j'ai besoin à partir d'un de ces fichiers peut être traité dans mon IDE ou comparé à d'autres fichiers de manière native.

0 votes

Lolz je n'arrête pas de décompresser les extensions chrome et firefox et j'ai oublié que les .jar sont juste des zips aussi :)

38voto

Chris R Points 6336

Si vous avez à la fois un shell bash et jad :

JAR=(your jar file name)
unzip -d $JAR.tmp $JAR
pushd $JAR.tmp
for f in `find . -name '*.class'`; do
    jad -d $(dirname $f) -s java -lnc $f
done
popd

Il se peut que je sois un tout petit peu à côté de la plaque, mais cela devrait fonctionner plus ou moins comme annoncé. Vous devriez vous retrouver avec $JAR.tmp contenant vos fichiers décompilés.

1 votes

Sur ubuntu, utilisez #!/bin/bash au lieu de #!/bin/sh car pushd ne fonctionne pas avec le shell par défaut d'ubuntu....

1 votes

J'utilise javap dans cette structure de boucle basique, et ça marche pour moi.

0 votes

@mossplix ou utiliser /bin/sh (plus portable) avec cd y cd - ce qui est suffisant pour ce cas d'utilisation :-)

28voto

Adam Paynter Points 22056

J'ai eu un succès raisonnable avec un outil nommé (de manière frustrante) " JD : Décompilateur Java ".

Je l'ai trouvé meilleur que la plupart des décompilateurs. lorsqu'il s'agit de classes compilées pour Java 5 et plus . Malheureusement, il peut encore avoir des ratés là où JAD devrait normalement réussir.

0 votes

Je n'ai pas pu télécharger la version Windows ou Linux de JD-GUI. Ce problème ne concerne-t-il que moi ?

0 votes

@JanusTroelsen Je l'ai supprimé. Merci de l'avoir signalé. Gardons les réponses propres :)

17voto

Bill F. Points 151

J'utilise Décompilateur Java de Secureteam Il s'agit d'un décompilateur basé sur JavaFX avec une navigation rapide et pratique dans le code. Contrairement aux autres décompilateurs avec lesquels j'ai travaillé dans le passé, il prend en charge les améliorations apportées au langage Java 5.

Vous pouvez le télécharger, ou le lancer directement depuis votre navigateur web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X