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

est-ce que quelqu'un connaît 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 nom$1.nom de la classe de$2.nom de la classe.classe

235
demandé sur BalusC 2009-03-15 05:08:43

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.

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

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\
282
répondu VonC 2018-06-29 15:24:23

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.

35
répondu 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 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.

31
répondu 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é 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.

23
répondu 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
répondu cybertoast 2010-02-05 16:47:18

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.

4
répondu merzod 2011-04-12 09:37:54

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.

2
répondu Cadoo 2009-03-15 04:29:22

vous l'Extrayez et vous utilisez jad contre le dir.

1
répondu yanchenko 2009-03-15 02:14:01

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.

1
répondu Joel S 2009-03-27 11:31:03