decompile - ¿Cómo puedo "descompilar" los archivos de clase Java?
java decompiler netbeans (19)
Actualización febrero 2016:
www.javadecompilers.com enumera JAD como:
El decompilador de Java más popular, pero principalmente de esta edad solamente. Escrito en C ++, muy rápido.
Desactualizado, no compatible y no se descompila correctamente Java 5 y versiones posteriores
Por lo tanto, su millaje puede variar con el jdk reciente (7, 8).
El mismo sitio lista otras herramientas.
Y javadecompiler, como lo señaló Salvador Valencia en los comentarios (septiembre de 2017), ofrece un SaaS en el que subes el archivo .class
a la nube y te devuelve el código descompilado.
Respuesta original: octubre de 2008.
- La versión final de JSR 176, que define las características principales de J2SE 5.0 (Java SE 5), se publicó el 30 de septiembre de 2004.
- La última versión de Java soportada por JAD, el famoso descompilador de Java escrito por el Sr. Pavel Kouznetsov, es JDK 1.3 .
- La mayoría de los decompiladores de Java que se pueden descargar hoy desde Internet, como "DJ Java Decompiler" o "Cavaj Java Decompiler", funcionan con JAD: no pueden mostrar las fuentes de Java 5.
Java Decompiler (otro decompiler de Fast Java) tiene:
- Soporte explícito para descompilar y analizar archivos ".class" de Java 5+ .
- Una bonita interfaz gráfica de usuario:
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 completamente funcional! Solo puede colocar un archivo jar en la página y ver el código fuente descompilado sin instalar nada.
¿Qué programa puedo usar para descompilar un archivo de clase? ¿Obtendré realmente el código Java o es solo el 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 de Java para ver cómo el compilador optimiza ciertas cosas.
Aquí hay una lista de descompiladores a partir de febrero de 2015:
Procyon , código abierto, Procyon
CFR , gratis, sin código fuente disponible, CFR
JD , gratis solo para uso no comercial, http://jd.benow.ca/
Fernflower , 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/ Desactualizado, no es compatible y no descompila correctamente Java 5 y posteriores.
Puede probar en línea los descompiladores mencionados anteriormente, no requiere instalación y hacer su propia elección educada.
Descompiladores de Java en la nube: www.javadecompilers.com
Con AndroChef Java Decompiler puede descompilar archivos de clase apk, dex, jar y java. Es simple y fácil. AndroChef JD se basa en https://github.com/fesh0r/fernflower . Puedes evaluarlo en 10 usos libres.
AndroChef es compatible con las funciones del 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 te permite descompilar Java y Dalvik bytecode (DEX, APK) en una fuente de Java legible.
Echa un vistazo a cavaj .
En la plataforma IntelliJ IDEA puede usar Java Decompiler IntelliJ Plugin . Le permite mostrar todas las fuentes Java durante su proceso de depuración, incluso si no las tiene todas. Se basa en las famosas herramientas JD-GUI .
Hay algunos descompiladores por ahí ... Una búsqueda rápida produce:
- Procyon : código abierto (Apache 2) y desarrollado activamente
- Krakatau : código abierto (GPLv3) y desarrollado activamente
- CFR : código abierto (MIT) y desarrollado activamente.
- JAD
- DJ Java Decompiler
- Mocha
Y muchos más.
Estos producen código Java. Java viene con algo que te permite ver el código de bytes JVM ( javap ).
Hay algunos programas que puedes usar. Obtendrá el código Java real, pero a veces el código se habrá confundido, por lo que los métodos se nombran con una letra o un número o una combinación aleatoria de letras y números.
JAD no funciona para mí (problema de Ubuntu 11.10), así que he avanzado y soplado en JODO . Al menos tiene código fuente de Open Java y ha sido capaz de descompilar mi clase correctamente.
Recomiendo revisar la rama ''sucursales / genérica'' primero. Los troncos no son estables.
La mayoría de los descompiladores para Java se basan en kpdus.com/jad.html . 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 las clases 1.5+.
Para OSX recomiendo: jarzilla o JD-GUI
Ambos te permiten ver jarra, guerra, 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/
Para ver el código fuente de Java verifica algún descompilador. Ve a buscar a jad .
Si desea ver los códigos de bytes, solo use javap que viene con el JDK.
Probé varios, y Procyon parecía funcionar mejor para mí. Está en desarrollo activo y es compatible con muchas características de las últimas versiones de Java.
Estos son los otros que probé:
- CFR
- Prometedor, pero a menudo fallaba la descompilación del método. Estaré vigilando este. 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. Desde mis pruebas, fue aproximadamente a la par con Procyon, pero aún así es bueno tener algo diferente. Tuve que usar el indicador de línea de comandos
-skip
para que no se detuviera en los errores. Desarrollado activamente, y curiosamente está escrito en Python.
- 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. Desde mis pruebas, fue aproximadamente a la par con Procyon, pero aún así es bueno tener algo diferente. Tuve que usar el indicador de línea de comandos
- JD-GUI
- Funcionó, pero la salida de Procyon fue mucho mejor. Aquí hay una página que compara la salida de Procyon con el JD-GUI original y . JD-GUI también está disponible como un complemento de Eclipse , que no me funcionó en absoluto. No parece ser de código abierto y el desarrollo parece esporádico.
- JAD
- Funcionó, pero solo es compatible con Java 1.4 y anteriores. También disponible como un plugin de Eclipse . Ya no está en desarrollo.
Si desea ver cómo el compilador de Java hace ciertas cosas, no quiere descompilar, quiere desensamblar. La descompilación implica transformar el código de bytes en la fuente de Java, lo que significa que se pierde una gran cantidad de información de bajo nivel, y si se está preguntando acerca de la optimización del compilador, esta es probablemente la misma información que le interesa.
De todos modos, he escrito un Krakatau . 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 hacer descompilación, aunque no lo recomendaría.
Todos los enlaces JAD listados hasta ahora parecen estar rotos, así que encontré este sitio. Funciona muy bien (para Linux, al menos)! En Ubuntu 11.10 tuve que descargar la estática por cualquier razón.
Yo uso JAD Decompiler .
Hay un plugin de Eclipse para ello, jadeclipse . Es bastante bonito
Soot es una opción para el nuevo código de Java. Al menos tiene la ventaja de que todavía se mantiene recientemente ...
Además, Java Decompiler es un descompilador con una interfaz gráfica de usuario independiente y una integración de Eclipse.
Por último, no se ha mencionado a Jdec , aunque no está tan pulido como otras opciones.
Procyon incluye un descompilador. Es FOSS.
JAD es uno que funciona y es simple.
Además, si solo quieres ver los métodos, usa javap.