¿Cómo descompilar un archivo Jar completo? [cerrado]


¿Alguien sabe de un descompilador libre que puede descompilar un archivo Jar completo en lugar de una sola clase? Tengo un problema con subclases como name 1 1.nombre de la clase 2 2.nombre de la clase.clase

Author: BalusC, 2009-03-15

9 answers

2009: JavaDecompiler puede hacer un buen trabajo con un jar: desde 0.2.5, Todos los archivos, en archivos JAR, se muestran.

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

Ver también la pregunta "¿Cómo puedo "descompilar" archivos de clase Java?".

El JD-Eclipse no parece haber cambiado desde finales de 2009 (ver Cambios).
Por lo tanto, su integración con la última Eclipse (3.8, 4.2+) podría ser problemática.

JD-Core se mantiene activamente.

Ambos son el resultado de la fantástica trabajo de (SO usuario) Emmanuel Dupuy.


2018: Una opción más moderna, mencionada en los comentarios de David Kennedy Araujo :

JetBrains/intellij-community/plugins/java-decompiler / engine

Fernflower es el primer descompilador analítico realmente funcional para Java y probablemente para un lenguaje de programación de alto nivel en general.

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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-29 15:24:23

En primer lugar, vale la pena recordar que todos los archivos Java archive (.jar/.war/etc...) son básicamente solo archivos de fantasía.zip , con algunos manifiestos y metadatos añadidos.

En segundo lugar, para abordar este problema yo personalmente uso varias herramientas que manejan este problema en todos los niveles:

  • Jad + Jadclipse mientras trabajaba en el IDE para descompilar .class archivos
  • WinRAR, mi compresión favorita la herramienta admite archivos Java de forma nativa (de nuevo, consulte el primer párrafo).
  • Más Allá de la Comparación, mi herramienta de comparación favorita, cuando está configurada correctamente, puede hacer comparaciones sobre la marcha entre cualquier archivo de archivo, incluidos jars. Bien vale la pena intentarlo.

La ventaja de todo lo anterior, es que no necesito sostener ninguna otra herramienta externa que estorbe mi entorno de trabajo. Todo lo que necesitaré de uno de esos archivos se puede manejar dentro de mi IDE o diffed con otros archivos de forma nativa.

 35
Author: Yuval Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 21:24:03

Si tienes un shell bash y 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

Podría estar un poco, poco apagado con eso, pero debería funcionar más o menos como se anuncia. Debería terminar con $JAR.tmp conteniendo sus archivos descompilados.

 31
Author: Chris R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-15 04:40:06

He tenido un éxito razonable con una herramienta llamada (frustrantemente) " JD: Java Decompiler".

Lo he encontrado mejor que la mayoría de los descompiladores cuando se trata de clases compiladas para Java 5 y superior. Desafortunadamente, todavía puede tener algunos contratiempos donde JAD normalmente tendría éxito.

 23
Author: Adam Paynter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-27 11:37:51

Algo como:

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

Tal vez?

 9
Author: cybertoast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-05 16:47:18

Insértese lo siguiente en 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 / / ejecutable
  • ln-s./ descomplie.frasco.s/usr/bin / dj

Listo para usar, simplemente escriba dj your.jar y obtendrá la carpeta your.jar.src con las fuentes. Utilice la opción -d para el modo de depuración.

 4
Author: merzod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-12 09:37:54

Un archivo jar es solo un archivo zip con extensión jar. Usted debe ser capaz de descomprimir (winzip) un jar al igual que un archivo zip.

 2
Author: Cadoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-15 04:29:22

Lo extraes y luego usas jad contra el dir.

 1
Author: yanchenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-15 02:14:01

Nota: Esta solución solo funciona para usuarios de Mac y *nix.

También traté de encontrar a Jad sin suerte. Mi solución rápida fue descargar MacJad que contiene jad. Una vez descargado, puede encontrar jad en [where-you-downloaded-macjad]/MacJAD/Contents/Resources/jad.

 1
Author: Joel S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-27 11:31:03