Comment décompiler un fichier Jar entier? [fermé]
9 réponses
2009: JavaDecompiler peut faire un bon travail avec un pot: depuis 0.2.5, Tous les fichiers, les fichiers JAR, sont affichés.
Voir aussi la question "Comment puis-je" décompiler " les fichiers de classe Java?" .
Le JD-Eclipse ne semble pas avoir changé depuis la fin de 2009 (voir Modifications ).
De sorte que son intégration avec la dernière éclipse (3.8, 4.2+) pourrait être problématique.
JD-Core est activement maintenu.
tous les deux sont le résultat du travail fantastique de (donc utilisateur) Emmanuel Dupuy .
2018: une option plus moderne, mentionnée dans les commentaires par David Kennedy Araujo :
JetBrains/intellij-communauté/plugins/java decompiler/moteur
Fernflower est le premier travail d'analyse décompilateur Java et probablement pour un langage de programmation 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\
tout d'abord, il est utile de se rappeler que tous les fichiers d'archives Java ( .jar
/ .war
/etc...) sont tout simplement de fantaisie .zip
fichiers , avec un peu ajouté des manifestes et des métadonnées.
Deuxièmement, pour s'attaquer à ce problème, j'utilise personnellement plusieurs outils qui traitent de ce problème à tous les niveaux:
- Jad + Jadclipse "alors qu'il travaillait dans IDE pour décompiler
.class
fichiers - WinRAR , mon outil de compression préféré supporte nativement les archives Java (encore une fois, Voir premier paragraphe).
- "Beyond Compare , mon outil préféré de diff, lorsqu'il est configuré correctement peut faire des comparaisons à la volée entre n'importe quel fichier d'archives, y compris
jar
S. Ça vaut le coup d'essayer.
L'avantage de tout ce qui précède, c'est que je n'ai pas besoin de détenir tout autre outil externe qui encombre mon environnement de travail. Tout ce dont j'aurai besoin d'un de ces fichiers peut être manipulé à l'intérieur de mon IDE ou diffusé avec d'autres fichiers nativement.
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
je pourrais être un tout petit, tout petit avec ça, mais ça devrait fonctionner plus ou moins comme annoncé. Vous devriez finir avec $JAR.tmp
contenant vos fichiers décomposés.
j'ai eu un succès raisonnable avec un outil nommé (frustrant) " JD: Java Decompiler ".
Je l'ai trouvé mieux que la plupart des décompileurs quand il s'agit de classes compilées pour Java 5 et plus . Malheureusement, il peut encore avoir quelques hoquets où JAD devrait normalement réussir.
quelque chose comme:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
peut-être?
ajouter ce qui suit: 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=
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: "151900920" some.jar [-d]"
echo " where: some.jar is the target to decompile"
echo " use -d for debug mode"
}
# check params
if [ -n "" ]
then
if [ "" == "-d" ]; then
debug=true
set -x
fi
work
else
usage
fi
- chmod +x decomplie.jar.sh / / exécutable
- ln-S./ decomplie.pot.s / usr / bin /dj
prêt à l'emploi, il suffit de taper dj your.jar
et vous obtiendrez le dossier your.jar.src
avec les sources. Utilisez l'option -d
pour le mode de débogage.
un fichier jar est juste un fichier zip avec une extension jar. Vous devriez être capable de décompresser(winzip) un pot comme un fichier zip.
Note: Cette solution ne fonctionne que pour les utilisateurs Mac et *nix.
j'ai aussi essayé de trouver Jad sans succès. Ma solution rapide a été de télécharger MacJad qui contient jad. Une fois que vous l'avez téléchargé, vous pouvez trouver jad dans [where-you-downloaded-macjad]/MacJAD/Contents/Resources/jad.