2008-11-07 29 views
542

¿Qué programa puedo usar para descompilar un archivo de clase? ¿Obtendré realmente el código Java, o es solo el código ensamblador JVM?¿Cómo "descompilo" los archivos de la clase Java?

En las preguntas sobre el 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.

+4

El arte de la "descompilación" también se puede pensar en la ingeniería como inversa. Aunque a veces, cuando se hace ingeniería inversa, no siempre se tiene acceso a los binarios. – Makach

+0

Nadie mencionó https://bytecodeviewer.com/, que puede descompilar en origen de Java y en código de bytes (para el origen de Java se basa en JAD). –

Respuesta

576

actualización de febrero de 2016:

www.javadecompilers.com listas JAD como ser:

los más populares decompilador Java, pero sobre todo de tan sólo esta edad. Escrito en C++, muy rápido.
que ha sido superado, sin apoyo y no descompilar correctamente Java 5 y más tarde

Así que su experiencia puede variar con JDK reciente (7, 8).

El mismo sitio enumera otras herramientas.

Y javadecompiler, según lo observado por Salvador Valencia en the comments (septiembre de 2017), ofrece un SaaS donde cargar el archivo .class a la nube y le devuelve el código de descompilación.


Respuesta original: oct 2008

  • La versión final de JSR 176, que define las principales características de J2SE 5.0 (Java SE 5), se ha publicado el 30 de septiembre de 2004.
  • La última versión de Java soportada por JAD, el famoso decompilador 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 de Internet, como "DJ Java Decompiler" o "Cavaj Java Decompiler", están alimentados por JAD: no pueden mostrar las fuentes de Java 5.

Java Decompiler (Sin embargo, otro decompilador Java rápida) tiene:

  • apoyo explícito a la descompilación y analizar Java 5+ archivos “.class”.
  • Una buena interfaz gráfica de usuario:

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

Cuenta con un live demo version en línea que en realidad es completamente funcional. Puede simplemente colocar un archivo jar en la página y ver el código fuente descompilado sin instalar nada.

+4

+1 Vale la pena mencionar que también está modularizado, por lo que el núcleo (implementado en C++) puede ser aprovechado en otro lugar. –

+1

jd-gui-0.3.3 también disponible [aquí] (http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=) – amaidment

+0

+1 por la información! Si los decompiladores de Java son tan fáciles, ¿cómo se puede proteger su IP? ¿Existe una técnica de ofuscación para evitar estos decompiladores? – Rishi

6

Eche un vistazo a cavaj.

+3

Eso también usa 'jad' debajo. –

51

Para ver el código fuente de Java, compruebe algunos descompiladores. Vaya a buscar jad.

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

+4

Yo recomendaría uno de los descompiladores de código abierto en su lugar, ya que están desarrollados activamente. Utilice [Procyon] (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), el [decompilador CFR] (http://www.benf.org/other/cfr/) o [Krakatau] (https: // github.com/Storyyeller/Krakatau) (Python) en su lugar. –

98

Hay algunas descompiladores por ahí ... Un rápidos rendimientos de búsqueda:

  1. Procyon: de código abierto (Apache 2) y desarrollado activamente
  2. Krakatau: de código abierto (GPLv3) y activamente desarrollado
  3. CFR: open-fuente (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 de JVM (javap).

+2

También puedo agregar que Procyon, CFR, JAD y DJ están disponibles como servicio web: http://www.javadecompilers.com/ –

+0

http://www.javadecompilers.com/ - lifesaver bro! – MarcoZen

+0

http://www.kpdus.com/jad.html es un enlace AD ​​ – marcinj

10

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

DJ Decompiler Mocha

9

La mayoría de los decompiladores 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 más de 1,5 clases.

+3

aquí va: Acabo de publicar una respuesta a su respuesta;) JDK1.5 y más compatible! – VonC

+0

"No he visto ninguna herramienta que maneje correctamente más de 1.5 clases" - Procion, Fernflower, JDCore y CFR (este maneja Java 8!) –

13

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

Además, Java Decompiler es un decompilador con una GUI independiente y una integración de Eclipse.

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

+0

¿Sabes cómo descompilar un archivo de clase concreto con hollín? No estoy seguro de que sea posible ... –

5
  • JAD es uno que funciona y es simple.

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

12

JD-GUI es realmente bueno. Simplemente podría abrir un archivo JAR y navegar por el código como si estuviera trabajando en un IDE . Buen material.

6

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

http://www.varaneckas.com/jad

5

Si quieres ver cómo el compilador de Java hace ciertas cosas, no desea descompilación, desea 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 sobre la optimización del compilador, esta es probablemente la información que le interesa.

De todos modos, sucede haber escrito un open source Java disassembler. A diferencia de Javap, esto funciona incluso en clases altamente patológicas, por lo que puedes ver qué herramientas de ofuscación están haciendo también tus clases. También puede descompilar, aunque yo no lo recomendaría.

13

Procyon incluye un decompilador. Es FOSS.

4

JAD no funciona para mí (problema de Ubuntu 11.10), así que he avanzado y heckeado en JODO. Al menos tiene código fuente Open Java y ha podido descompilar mi .class correctamente.

Yo recomendaría ver 'branches/generic' branch first. Los troncos no son estables.

+1

JODO se [mantiene esporádicamente] (http://sourceforge.net/p/jode/code/1418/tree/trunk/jode/) mientras que CFR y Procyon se desarrollan activamente y tienen JDK 8 soporte. –

28

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

Estos son los otros que he probado:

  • CFR
    • prometedor, pero a menudo no descompilación método. Estaré vigilando esta. También se desarrolló activamente con soporte para las últimas características de Java.
  • Krakatau
    • tiene un enfoque diferente, ya que trata de código Java equivalente de salida en lugar de tratar de reconstruir la fuente original, que tiene el potencial de lo que es mejor para el código ofuscado. Según mis pruebas, estaba a la par de Procyon, pero aún así es bueno tener algo diferente. Tuve que utilizar el indicador de línea de comandos -skip para que no se detuviera en los errores. Desarrollado activamente, y curiosamente está escrito en Python.
  • JD-GUI
  • JAD
    • funcionado, pero sólo es compatible con Java 1.4 y por debajo. También disponible como Eclipse plugin. Ya no está en desarrollo.
+0

intente krakatau también –

+1

Tenga en cuenta que la cosa 'IGNORE_EXCEPTIONS' ahora se ha cambiado a la línea de comando marca' -skip'. – Antimony

9

He aquí una lista de descompiladores partir de Feb 2015:

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

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

JD, gratuita para uso no comercial e solamente, http://jd.benow.ca/

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

JAD - dado aquí sólo por razones históricas. Gratis, no hay código fuente disponible, http://varaneckas.com/jad/ Anticuado, no compatible y no descompila correctamente Java 5 y posterior.

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

descompiladores Java en la nube:http://www.javadecompilers.com/

+0

Procyon funciona mejor !!!! – MarcoZen

1

Con AndroChef Java Decompiler se puede descompilar apk, dex, tarro y java clase-archivos. Es simple y fácil. AndroChef JD se basa en FernFlower. Puedes evaluarlo en 10 usos gratis.

AndroChef admite las características del lenguaje Java como genéricos, enumeraciones y anotaciones. Según algunos estudios, AndroChef Java Decompiler es capaz de 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 de Java legible.

+1

@Dimitrius, lea las respuestas cuidadosamente durante una revisión. ¿Cómo te imaginas incluir un FernFlower o un AndroChef aquí? – naXa

3

En la plataforma IntelliJ IDEA puede usar Java Decompiler IntelliJ Plugin. Le permite visualizar 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.

enter image description here

+0

@ NoOP's ¿Eres un robot? ¿O simplemente no prestar atención a un tema de revisión? – naXa

+0

Perdón por eso, a primera vista parece una respuesta de solo enlace. Tal vez deberías agregar más detalles y también tu respuesta solo cumple con el título de la pregunta, no con el contenido de la pregunta. – ashiquzzaman33

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – Chris

Cuestiones relacionadas