Pregunta

¿Qué programa puedo usar para descompilar un archivo de clase? ¿Realmente obtendré código Java, o es solo código de ensamblaje JVM?

En las preguntas de rendimiento de Java en este sitio, a menudo veo respuestas de personas que han "descompilado". el archivo de clase Java para ver cómo el compilador optimiza ciertas cosas.

¿Fue útil?

Solución

Actualización de febrero de 2016:

www.javadecompilers.com enumera JAD como:

  

el descompilador de Java más popular, pero principalmente solo de esta época. Escrito en C ++, muy rápido.
  Desactualizado, no compatible y no se descompila correctamente Java 5 y versiones posteriores

Por lo tanto, su kilometraje puede variar con jdk reciente (7, 8).

El mismo sitio enumera otras herramientas.

Y javadecompiler, como lo señala Salvador Valencia en los comentarios (septiembre de 2017), ofrece un SaaS donde se carga el .class archivo a la nube y le devuelve el código descompilado.


Respuesta original: octubre de 2008

  • La versión final de JSR 176, que define las principales características de J2SE 5.0 (Java SE 5), se publicó el 30 de septiembre de 2004.
  • La última versión de Java compatible con JAD, el famoso descompilador de Java escrito por el Sr. Pavel Kouznetsov, es JDK 1.3 .
  • La mayoría de los descompiladores de Java que se pueden descargar hoy desde Internet, como "DJ Java Decompiler" o "Cavaj Java Decompiler", funcionan con JAD: no pueden mostrar fuentes Java 5.

Java Decompiler (Sin embargo, otro descompilador Fast Java) tiene:

  • Soporte explícito para descompilar y analizar archivos Java 5+ ".class".
  • Una buena GUI:

captura de pantalla

Funciona con compiladores desde JDK 1.1.8 hasta JDK 1.7.0, y otros ( Jikes , JRockit , etc.).

Cuenta con una versión de demostración en vivo en línea que es realmente completamente funcional. Simplemente puede soltar un archivo jar en la página y ver el código fuente descompilado sin instalar nada.

Otros consejos

Hay algunos descompiladores por ahí ... Una búsqueda rápida arroja:

  1. Procyon : de código abierto (Apache 2) y desarrollado activamente
  2. Krakatau : código abierto (GPLv3) y desarrollado activamente
  3. CFR : código abierto (MIT) y desarrollado activamente
  4. JAD
  5. DJ Java Decompiler
  6. Mocha

Y muchos más.

Estos producen código Java. Java viene con algo que le permite ver el código de bytes JVM ( javap ).

Para ver el código fuente de Java, consulte algún descompilador Vaya a buscar jad .

Si desea ver los códigos de bytes, simplemente use javap que viene con el JDK.

Probé varios, y Procyon parecía funcionar mejor para mí. Está en desarrollo activo y admite muchas características de las últimas versiones de Java.

Estos son los otros que probé:

  • CFR
    • Método de descompilación prometedor, pero a menudo fallido. Estaré pendiente de esto. También desarrollado activamente con soporte para las últimas características de Java.
  • Krakatau
    • Adopta un enfoque diferente en el sentido de que intenta generar un código Java equivalente en lugar de intentar reconstruir la fuente original, lo que tiene el potencial de mejorarlo para el código ofuscado. Según mis pruebas, estuvo aproximadamente a la par con Procyon, pero aún así es bueno tener algo diferente. Tuve que usar el indicador de línea de comando -skip para que no se detuviera ante errores. Desarrollado activamente, y curiosamente está escrito en Python.
  • JD-GUI
  • JAD
    • Funcionó, pero solo es compatible con Java 1.4 y versiones inferiores. También disponible como complemento Eclipse . Ya no está en desarrollo.

Utilizo JAD Decompiler .

Hay un Eclipse para él, jadeclipse . Es bastante agradable.

Procyon incluye un descompilador. Es FOSS.

Soot es una opción para el código Java más reciente. Al menos tiene la ventaja de que aún se mantiene recientemente ...

Además, Java Decompiler es un descompilador con un soporte- solo GUI y la integración de Eclipse.

Por último, Jdec no se ha mencionado, aunque no está tan pulido como otras opciones.

JD-GUI es realmente bueno. Simplemente puede abrir un archivo JAR y examinar el código como si Estás trabajando en un IDE. Cosas buenas.

Aquí hay una lista de descompiladores a partir de febrero de 2015:

Procyon , de código abierto, https: // bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR , gratis, sin código fuente disponible, http: / /www.benf.org/other/cfr/

JD , gratis solo para uso no comercial, http: //jd.benow .ca /

Fernflower , de código abierto, https://github.com/fesh0r/ fernflower ,

JAD : aquí solo por razones históricas. Gratis, sin código fuente disponible, http://varaneckas.com/jad/ Desfasado, no compatible y no se descompila correctamente Java 5 y versiones posteriores.

Puede probar los descompiladores mencionados anteriormente en línea, no requiere instalación y hacer su propia elección informada.

Descompiladores de Java en la nube: http://www.javadecompilers.com/

Hay algunos programas que puedes usar. Obtendrá el código Java real, pero a veces el código se habrá ofuscado, por lo que los métodos se nombran con una letra o número o una combinación aleatoria de letras y números.

Descompilador de DJ Mocha

La mayoría de los descompiladores para Java se basan en JAD . Es una gran herramienta, pero desafortunadamente no se ha actualizado por un tiempo y no maneja muy bien las clases de Java 1.5+. No he visto ninguna herramienta que maneje adecuadamente 1.5+ clases.

Eche un vistazo a cavaj .

Todos los enlaces JAD enumerados hasta ahora parecen estar rotos, así que encontré este sitio. ¡Funciona muy bien (al menos para Linux)! En Ubuntu 11.10 tuve que descargar el estático por cualquier razón.

http://www.varaneckas.com/jad

  • JAD es uno que funciona y es simple.

  • Además, si solo desea ver los métodos, use javap.

Si desea ver cómo el compilador de Java hace ciertas cosas, no desea la descompilación, desea el desmontaje. La descompilación implica transformar el bytecode en fuente Java, lo que significa que se pierde mucha información de bajo nivel, y si se está preguntando acerca de la optimización del compilador, esta es probablemente la información que le interesa.

De todos modos, resulta que escribí un desensamblador de código abierto Java . A diferencia de Javap, esto funciona incluso en clases altamente patológicas, por lo que puede ver qué herramientas de ofuscación también están haciendo en sus clases. También puede descompilar, aunque no lo recomendaría.

JAD no funciona para mí (problema de Ubuntu 11.10), así que avancé y me puse a JODO . Al menos tiene el código fuente de Open Java y ha podido descompilar mi .class correctamente.

Recomiendo comprobar 'sucursales / genérico' primero. Los troncos no son estables.

En la plataforma IntelliJ IDEA puede usar Java Decompiler IntelliJ Plugin . Le permite mostrar todas las fuentes de Java durante su proceso de depuración, incluso si no las tiene todas. Se basa en las famosas herramientas JD-GUI .

 ingrese la descripción de la imagen aquí

Con AndroChef Java Decompiler puede descompilar archivos de clase apk, dex, jar y java. Es simple y fácil. AndroChef JD se basa en FernFlower . Puede evaluarlo en 10 usos gratuitos.

  

AndroChef admite funciones de lenguaje Java como genéricos, enumeraciones y anotaciones. Según algunos estudios, AndroChef Java Decompiler puede descompilar el 98.04% de las aplicaciones Java generadas con compiladores Java tradicionales, una tasa de recuperación muy alta. Es una herramienta simple pero poderosa que le permite descompilar el bytecode de Java y Dalvik (DEX, APK) en una fuente legible de Java.

Para OSX recomiendo: jarzilla o JD-GUI

Ambos te permiten ver jar, war, etc. contenido del archivo y descompila cualquier archivo de clase dentro de ellos.

Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top