Question

Est-ce que quelqu'un connaît un décompilateur gratuit capable de décompiler un fichier Jar entier au lieu d'une seule classe? J'ai un problème avec les sous-classes telles que name $ 1.class name $ 2.class name.class

Était-ce utile?

La solution

2009: JavaDecompiler peut faire du bon travail avec un jar: depuis la 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écomposer "Fichiers de classe Java?" .

Le JD-Eclipse ne semble pas avoir changé depuis fin 2009 (voir Changements ).
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 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.

Autres conseils

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

Tout d’abord, il convient de rappeler que tous les fichiers d’archive Java ( .jar / .war / etc ...) sont fondamentalement fantaisistes < code> .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:

  • Jad + Jadclipse tout en travaillant dans l'EDI pour décompiler les fichiers .class
  • WinRAR , mon outil de compression préféré prend en charge de manière native les archives Java (voir à nouveau premier paragraphe).
  • Au-delà de la comparaison , mon outil de différenciation préféré peut être configuré correctement lorsqu'il est configuré correctement -les comparaisons à la volée entre n’importe quel fichier d’archive, y compris les jar s. Ça vaut le coup d'essayer.

L'avantage de tout ce qui précède est que je n'ai pas besoin de posséder un autre outil externe qui encombrerait mon environnement de travail. Tout ce dont j’aurai besoin de l’un de ces fichiers peut être géré dans mon IDE ou différé avec d’autres fichiers de manière native.

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 versions supérieures . Malheureusement, il peut encore y avoir quelques ratés où JAD aurait normalement du succès.

Quelque chose comme:

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

peut-être?

Insérez les éléments suivants dans le fichier 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: <*> 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.jar.s / usr / bin / dj

Prêt à être utilisé, tapez simplement dj your.jar et vous obtiendrez votre dossier.jar.src avec les sources. Utilisez l'option -d pour le mode débogage.

Un fichier jar est simplement un fichier zip avec une extension jar. Vous devriez être capable de décompresser (winzip) un pot comme un fichier zip.

Vous l'extrayez puis utilisez jad contre le répertoire.

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 consistait à télécharger le 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top