Comment décompiler un fichier Jar entier? [fermé]


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

Author: BalusC, 2009-03-15

9 answers

2009: JavaDecompiler peut faire du bon travail avec un jar: depuis 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?".

Le JD-Eclipse ne semble pas avoir changé depuis fin 2009 (voir Changes).
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 fantastique de travail (pour l'utilisateur) Emmanuel Dupuy.


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

JetBrains/intellij-communauté/plugins/java decompiler/moteur de

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\
 282
Author: VonC, 2018-06-29 15:24:23

Tout d'abord, il convient de rappeler que tous les fichiers d'archive Java (.jar/.war/etc...) sont tous essentiellement des fichiers de fantaisie.zip , avec quelques manifestes et métadonnées ajoutés.

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

  • Jad + Jadclipse tout en travaillant dans l'IDE pour la décompilation .class fichiers
  • WinRAR, mon préféré de compression tool prend en charge nativement les archives Java (encore une fois, voir le premier paragraphe).
  • Au-delà de Comparer, mon outil de diff préféré, lorsqu'il est configuré correctement, peut faire des comparaisons à la volée entre n'importe quel fichier d'archive, y compris jars. Cela vaut bien la peine d'essayer.

L'avantage de tout ce qui précède, c'est que je n'ai pas besoin de tenir un autre outil externe qui encombre mon environnement de travail. Tout ce dont j'aurai besoin d'un de ces fichiers peut être géré dans monE ou diffed avec d'autres fichiers nativement.

 35
Author: Yuval Adam, 2017-07-25 21:24:03

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 suis peut-être un tout petit peu en retrait avec cela, mais cela devrait fonctionner plus ou moins comme annoncé. Vous devriez vous retrouver avec $JAR.tmp contenant vos fichiers décompilés.

 31
Author: Chris R, 2009-03-15 04:40:06

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 avoir quelques hoquets où JAD réussirait normalement.

 23
Author: Adam Paynter, 2009-03-27 11:37:51

Quelque Chose comme:

jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r

Peut-être?

 9
Author: cybertoast, 2010-02-05 16:47:18

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
  • chmod +x decomplie.jar.sh / / exécutable
  • ln-s./ decomplie.pot.s/usr/bin / dj

Prêt à utiliser, il suffit de taper dj your.jar et vous obtiendrez your.jar.src dossier avec les sources. Utilisez l'option -d pour le mode de débogage.

 4
Author: merzod, 2011-04-12 09:37:54

Un fichier jar est juste un fichier zip avec l'extension jar. Vous devriez pouvoir décompresser (winzip) un jar comme un fichier zip.

 2
Author: Cadoo, 2009-03-15 04:29:22

Vous l'extrayez puis utilisez jad contre le dir.

 1
Author: yanchenko, 2009-03-15 02:14:01

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 jad. Une fois que vous l'avez téléchargé, vous pouvez trouver jad dans [où-vous-téléchargé-macjad]/MacJAD/Contents/Resources/jad.

 1
Author: Joel S, 2009-03-27 11:31:03