Est-ce que quelqu'un connaît un décompilateur gratuit capable de décompiler un fichier Jar entier au lieu d'une classe unique? J'ai un problème avec les sous-classes telles que name $ 1.class name $ 2.class name.class
2009: JavaDecompiler peut faire du bon travail avec un jar: depuis le 0.2.5, tous les fichiers, dans les fichiers JAR, sont affichés.
Voir aussi la question "Comment" décompiler "Java fichiers de classe?" .
Le JD-Eclipse ne semble pas avoir changé depuis fin 2009 cependant (voir Changes ).
Son intégration à la dernière version d'Eclipse (3.8, 4.2+) pourrait donc poser problème.
JD-Core est activement maintenu.
Les deux sont le résultat du travail fantastique de (utilisateur SO) Emmanuel Dupuy .
2018: Une option plus moderne, mentionnée dans les commentaires par David Kennedy Araujo :
JetBrains/intellij-community/plugins/décompilateur Java/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 Java fichiers intellij idea pour une commande fonctionnant avec IntelliJ IDEA récent.
Tout d’abord, il convient de rappeler que tous les Java fichiers d’archive (.jar
/.war
/etc ...) sont tous fondamentalement fantaisistes.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:
.class
jar
s. Ça vaut le coup d'essayer.L'avantage de tout ce qui précède est que je n'ai besoin d'aucun autre outil externe qui encombrerait mon environnement de travail. Tout ce dont j'ai besoin de l'un de ces fichiers peut être manipulé dans mon IDE ou différé avec d'autres fichiers de manière native.
Si vous avez à la fois un bash Shell et un 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
Je suis peut-être un tout petit peu fou avec ça, mais ça devrait fonctionner plus ou moins comme annoncé. Vous devriez vous retrouver avec $JAR.tmp
contenant vos fichiers décompilés.
J'ai eu un succès raisonnable avec un outil nommé (frustrant) " JD: Java Decompiler ".
Je l'ai trouvé meilleur que la plupart des décompileurs lorsqu'il s'agit de classes compilées pour Java 5 et versions supérieures . Malheureusement, il peut encore y avoir des ratés où JAD réussirait normalement.
Quelque chose comme:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
peut être?
Insérer ce qui suit dans decompile.jar.sh
# Usage: decompile.jar.sh some.jar [-d]
# clean target folders
function clean_target {
rm -rf $unjar $src $jad_log
}
# clean all debug stuff
function clean_stuff {
rm -rf $unjar $jad_log
}
# the main function
function work {
jar=$1
unjar=`basename $jar.unjar`
src=`basename $jar.src`
jad_log=jad.log
clean_target
unzip -q $jar -d $unjar
jad -d $src -ff -r -lnc -o -s Java $unjar/**/*.class > $jad_log 2>&1
if [ ! $debug ]; then
clean_stuff
fi
if [ -d $src ]
then
echo "$jar has been decompiled to $src"
else
echo "Got some problems check output or run in debug mode"
fi
}
function usage {
echo "This script extract and decompile JAR file"
echo "Usage: $0 some.jar [-d]"
echo " where: some.jar is the target to decompile"
echo " use -d for debug mode"
}
# check params
if [ -n "$1" ]
then
if [ "$2" == "-d" ]; then
debug=true
set -x
fi
work $1
else
usage
fi
Prêt à l'emploi, tapez simplement dj your.jar
et vous obtiendrez le dossier your.jar.src
avec les sources. Utilisez l’option -d
pour le mode débogage.
Un fichier jar est juste un fichier Zip avec extension jar. Vous devriez être capable de décompresser (winzip) un pot comme un fichier Zip.
Vous extrayez puis utilisez jad contre le dir.
Remarque: cette solution ne fonctionne que pour les utilisateurs Mac et * nix.
J'ai aussi essayé de trouver Jad sans succès. Ma solution rapide était de télécharger MacJad qui contient du jad. Une fois téléchargé, vous pouvez trouver le jad dans [macjad où-vous avez téléchargé]/MacJAD/Sommaire/Ressources/jad.