Saltar al contenido

java – ¿Cómo descompilar un archivo Jar completo?

noviembre 1, 2021
apple touch icon@2

java – ¿Cómo descompilar un archivo Jar completo? – Desbordamiento de pila


















Pedido

Visto636k veces

¿Alguien sabe de un descompilador gratuito que pueda descompilar un archivo Jar completo en lugar de una sola clase? Tengo un problema con subclases como name $ 1.class name $ 2.class name.class

6

En primer lugar, vale la pena recordar que todos los archivos de almacenamiento de Java (.jar/.war/ etc …) son todo básicamente simplemente elegante.zip archivos, con algunos manifiestos y metadatos agregados.

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

  • Jad + Jadclipse mientras trabaja en IDE para descompilar .class archivos
  • WinRAR, mi herramienta de compresión favorita es compatible de forma nativa con archivos Java (de nuevo, consulte el primer párrafo).
  • Incomparablemente, mi herramienta de diferenciación favorita, cuando se configura correctamente puede hacer comparaciones sobre la marcha entre cualquier archivo, incluido jars. 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 diferenciarlo con otros archivos de forma nativa.

1

Si tiene tanto un shell bash como 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

Puede que esté un poquito fuera de lugar con eso, pero debería funcionar más o menos como se anuncia. Deberías terminar con $JAR.tmp que contiene sus archivos descompilados.

3

He tenido un éxito razonable con una herramienta llamada (frustrantemente) «JD: Descompilador de Java».

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.

2

Algo como:

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

¿quizás?

1

Inserte 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 ./decomplie.jar.s / usr / bin / dj

Listo para usar, solo escribe dj your.jar y obtendrás your.jar.src carpeta con fuentes. Usar -d opción para el modo de depuración.

2

Lo extrae y luego usa jad contra el directorio.

2

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

También intenté encontrar a Jad sin suerte. Mi solución rápida fue descargar MacJad que contiene jad. Una vez que lo descargó, puede encontrar jad en [where-you-downloaded-macjad]/ MacJAD / Contenidos / Recursos / jad.

lang-java

close