Quelqu'un connaît-il un décompilateur gratuit qui peut décompiler un fichier Jar entier au lieu d'une seule classe? J'ai un problème avec les sous-classes comme le nom $ 1.class name $ 2.class name.class
Quelqu'un connaît-il un décompilateur gratuit qui peut décompiler un fichier Jar entier au lieu d'une seule classe? J'ai un problème avec les sous-classes comme le nom $ 1.class name $ 2.class name.class
Réponses:
2009: JavaDecompiler peut faire du bon travail avec un pot: depuis 0.2.5, tous les fichiers, dans les fichiers JAR, sont affichés.
Voir aussi la question "Comment" décompiler "les fichiers de classe Java?" .
Le JD-Eclipse ne semble cependant pas avoir changé depuis fin 2009 (voir Modifications ).
Son intégration avec la dernière Eclipse (3.8, 4.2+) pourrait donc être problématique.
JD-Core est activement maintenu.
Les deux sont le résultat du travail fantastique d' Emmanuel Dupuy (utilisateur SO) .
2018: Une option plus moderne, mentionnée dans les commentaires de 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 intellij idea pour une commande fonctionnant avec IntelliJ IDEA récent.
Tout d'abord, il convient de se rappeler que tous les fichiers d'archive Java ( .jar
/ .war
/ etc ...) sont tous essentiellement des .zip
fichiers fantaisie , 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
fichiersjar
s. Cela vaut bien un essai.L'avantage de tout ce qui précède, c'est que je n'ai pas besoin de tenir d'autre outil externe qui encombre mon environnement de travail. Tout ce dont j'aurai besoin à partir de l'un de ces fichiers peut être géré dans mon IDE ou différent avec d'autres fichiers nativement.
S'il vous arrive d'avoir à la fois un shell bash 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 pourrais être un tout petit peu, mais cela devrait fonctionner plus ou moins comme annoncé. Vous devriez finir par $JAR.tmp
contenir vos fichiers décompilés.
javap
dans cette structure de boucle de base, et cela fonctionne pour moi.
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écompilateurs lorsqu'il s'agit de classes compilées pour Java 5 et supérieur . Malheureusement, il peut encore y avoir quelques hoquets où JAD réussirait normalement.
Quelque chose comme:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
peut être?
Insérez 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 un your.jar.src
dossier avec les sources. Utilisez l' -d
option pour le mode de débogage.
Vous l'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 chance. Ma solution rapide a été de télécharger MacJad qui contient du jad. Une fois que vous l'avez téléchargé, vous pouvez trouver jad dans [où-vous-avez-téléchargé-macjad] / MacJAD / Contents / Resources / jad.