¿Qué es un buen descompilador y desofuscador de Java?

Estoy usando JD-GUI para descompilar archivos JAR de Java, pero el problema es que deja muchos errores, como variables duplicadas que tengo que arreglar yo mismo y comprobar si el programa aún funciona (si solucioné los errores correctamente).

También probé Fernflower, pero eso deja en blanco clases si falta una dependencia.

Me gustaría saber qué descompilador:

  • da la menor cantidad de errores
  • desofusca el la mayoría.

Comentarios

  • Sólo por curiosidad, ¿qué características espera que ofrezca un desofuscador? Aparte de cambiar el nombre de las variables manualmente, no ‘ veo ninguna forma de desofuscar algún código.

Respuesta

Mis disculpas por la respuesta tardía.
He estado trabajando en un nuevo descompilador de Java de código abierto. Siéntase libre de revisarlo.
No lo he probado contra ningún código ofuscado, pero lo he visto descompilar muchos métodos que JD-GUI no pudo manejar. Tenga en cuenta que es un trabajo en progreso y estoy seguro de que encontrará mucho código que no podrá descompilar.

Comentarios

  • Primero, su descompilador es Procyon que ves en otras respuestas. En segundo lugar, aunque normalmente me opongo a » ¡Mira mi biblioteca que hace esto! » respuestas, eso sería un error aquí. Vale la pena leer detenidamente el ‘ s readme de Strobel al que se vincula arriba. Hubiera sido una excelente respuesta en sí misma, pero es probable que sea un poco demasiado larga para SE.
  • +10000 Este es realmente un gran trabajo y acaba de descompilar una clase que pasé horas tratando de reconstruir después de que JD-GUI solo obtuvo la mitad.
  • Aunque personalmente odio los comentarios +1, ‘ tendré que decir que usted ‘ tiene un buen proyecto que me ayudó en una situación difícil. ¡Sigue así!
  • @Signus Gracias, ‘ me alegra que mi trabajo te haya resultado útil :).
  • @DavidGomes Ah, BitBucket finalmente cumplió su promesa de eliminar los repositorios de Mercurial. Corregido.

Respuesta

Entradas antiguas y ausentes

JAD Hace algún tiempo, el descompilador de La elección fue jad. Actualmente, el proyecto está muerto (además, no era de código abierto), pero aún ves a mucha gente refiriéndose a él.

Java DeObfuscator También es una herramienta más antigua de fileoffset.com, pero aún funciona más o menos. La interfaz es bastante torpe de usar para proyectos más grandes, pero la herramienta es código abierto .

JODE JODE es un paquete de Java que contiene un descompilador y un optimizador para Java. Este paquete está disponible gratuitamente bajo GNU GPL. No se ha actualizado desde hace bastante tiempo.

AndroChef Herramienta patentada para descompilar programas de Android y Archivos Java, disponibles aquí . No vale la pena el dinero dadas las alternativas, al igual que DJ Decompiler .

Candle Un descompilador de código abierto de Brad Davis. Lo menciono para que esté completo, pero está lejos de ser una función completa.


Herramientas modernas

JD-Gui Probablemente una de las herramientas más utilizadas para la descompilación de Java, ya que es fácil de usar y proporciona una interfaz gráfica de usuario que permite abrir e inspeccionar rápidamente un archivo de clase o JAR. Puede encontrarlo aquí .

FernFlower Un descompilador de Java analítico muy nuevo y prometedor (que se convierte en una parte integral de IntelliJ 14).

Es una herramienta de línea de comandos. Éste puede mostrar los parámetros Unicode con su nombre completo.

Descárgalo desde aquí. Es una herramienta de línea de comandos. Éste es capaz de mostrar los parámetros Unicode con su nombre completo.
Tenga en cuenta que también está integrado por defecto en IntelliJ.

CFR

Gratis y de código abierto . Este tiene como objetivo descompilar las características modernas de Java , incluidas las expresiones de cambio de Java 12, las lambdas de Java 8 (cambios anteriores y posteriores a la beta 103 de Java), los cambios de cadena de Java 7, etc., aunque está escrito en Java 6.

También es una herramienta de línea de comandos.Éste hace un trabajo aún mejor y es un poco más rápido.

Procyon

Código abierto , y también tiene como objetivo tratar las características de Java 8 (lambdas, :: operator). Necesita Java 7 para ejecutarse.

Krakatau Krakatau es interesante porque ha sido escrito en Python. Actualmente contiene tres herramientas: un descompilador y desensamblador para archivos de clases de Java y un ensamblador para crear archivos de clases.

Todavía no es compatible con las funciones de Java 8.

Soot

Soot es un marco para analizar y transformar aplicaciones Java y Android, desarrollado originalmente por el Grupo de Investigación Sable de la Universidad McGill. No se usa con mucha frecuencia «solo» como descompilador, ya que también define un lenguaje de código de bytes intermedio.

Recaf

Un editor de código de bytes de Java y una herramienta de ingeniería inversa cuyo objetivo es ser intuitivo de usar. Puede presentar el código de bytes a través de múltiples descompiladores (CFR, FernFlower, Procyon) o en un diseño de tabla para permitir mostrar elementos de clase que son indescifrables en descompiladores estándar. Recaf utiliza menús sensibles al contexto para interactuar con clases, métodos y campos, lo que permite a los usuarios buscar casos de uso, renombrar elementos y editar definiciones en un formato desensamblado.

Admite frascos, guerras, clases, y extraer clases de los procesos Java en ejecución.

Está escrito completamente en Java y es completamente de código abierto .

Visor de código de bytes de Konloch

Un visor de código de bytes Java ligero avanzado, Descompilador de Java GUI, Editor de código de bytes GUI, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI DEX2Jar, GUI Jar2DEX, GUI Visor hexadecimal, buscador de código, depurador y más.

Escrito completamente en Java, y es código abierto .

Utiliza FernFlower, Procyon y CFR para la descompilación, lo que lo convierte en un Impresionante herramienta visual que utiliza descompiladores de última generación:

Enigma

Una herramienta diseñada específicamente para la desofuscación :

Originalmente utilizada para desofuscar versiones de Minecraft. Utiliza Procyon internamente.

Puede encontrar una bifurcación más actualizada aquí

Es divertido tenga en cuenta que un gran esfuerzo en descompiladores y desofuscadores para Java es el resultado de la escena de modding en Minecraft, uno de los juegos más populares implementados en Java.

Fuente: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html

Comentarios

  • Esta respuesta puede que sea necesario actualizarlo. Parece que JD-Gui se está desarrollando activamente a partir de marzo de 2019. java-decompiler.github.io
  • Tengo algo de Java 7 código para el que ‘ estoy intentando escribir algunos aspectos. El descompilador intellij integrado en algunos casos tiene nombres de variables incorrectos y puede omitir bloques de código. JD-Gui muestra esos bloques y también muestra lo que parecen ser nombres de variables más precisos. También muestra en paralelo las diferencias entre una versión antigua y una nueva de JD-Gui. ‘ vale la pena mirarlo si ‘ estás haciendo una inversión seria.

Respuesta

No puedo «hablar de cuál de estos es el mejor, pero hay algunos descompiladores de Java por ahí, como lo indica este SO pregunta . Sin embargo, ninguno de estos descompiladores parece intentar manejar activamente la ofuscación y muchos de esos proyectos están abandonados.

No he probado Krakatau , pero parece que puede ayudarte con lo que estás buscando.

  • Del archivo Léame:» El descompilador Krakatau adopta un enfoque diferente para la mayoría de los descompiladores de Java. Se puede considerar más como un compilador cuyo lenguaje de entrada es el código de bytes de Java y cuyo lenguaje de destino es el código fuente de Java. Krakatau toma un código de bytes arbitrario e intenta transformarlo en un código Java equivalente. Esto lo hace resistente a una ofuscación menor, aunque tiene el inconveniente de no reconstruir la fuente «original», lo que lleva a una salida menos legible que la que produciría un descompilador de coincidencia de patrones para clases Java no confusas «.
  • Esto está abierto fuente y parece que se mantiene activamente (al momento de escribir este artículo).

Comentarios

  • Esa es en realidad la salida del desensamblador. El decompilador descompila a la salida de Java. (PSYo ‘ soy el desarrollador)
  • JD-GUI es uno de los mejores Descompiladores de Java en este momento, pero tiene que ser usado en conjunto con desofuscadores en el Bytecode antes de descompilar el código. Los mejores desofuscadores para Java que conozco provienen de rune-server.org o moparscape.org/ smf o moparisthebest.org/smf son comunidades de piratería para Runescape Game que está completamente escrito en Java y muy ofuscado.

Respuesta

Intente echar un vistazo a Bytecode Viewer https://github.com/Konloch/bytecode-viewer Tiene la opción de descompilar usando 5 descompiladores diferentes:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI

Comentarios

  • Esta fue una muy buena sugerencia – gracias, mucho mejor que simplemente usar el cli de fernflower!

Respuesta

En primer lugar, hay una solución para el problema de Fernflower con clases faltantes aquí . Puede agradecerle a agaricusb por esto.

Por ahora Fernflower sigue siendo el mejor descompilador de Java, incluso si no se mantuvo durante los últimos años. Intenté comunicarme con el autor recientemente, pero todavía no tuve suerte.

En cuanto a AndroChef Java Decompiler, usa Fernflower como motor con permiso del autor. Aún no estoy seguro de si usa parcheado / modificado versión o Es solo una GUI.

El descompilador Procyon desarrollado por @ mike-strobel parece ser bueno, pero Fernflower aún obtuvo una GRAN ventaja y fue capaz de descompilar aproximadamente el 95% de mi aplicación (~ 3000 clases) mientras que procyon solo pudo manejar el 60% (verificado en enero de 2014).

Comentarios

  • ¿Es su aplicación » nativo » Java, ¿o se convirtió del formato de Android? Si es lo primero, estaría muy interesado en tener en mis manos sus binarios para ver dónde falla Procyon en comparación con Fernflower.
  • @MikeStrobel It ‘ s » nativa » Aplicación Java. Es ‘ solo para uso interno, por lo que no puedo ‘ compartirlo de todos modos.
  • cualquier posibilidad que tenga ¿Me un correo electrónico describiendo qué tipo de problemas se encontró? Siempre estoy ansioso por saber cómo se podría mejorar Procyon. Mi información de contacto está en el sitio de BitBucket del proyecto ‘.
  • @MikeStrobel, gracias por el interés. ‘ intentaré proporcionarle información ampliada y clases de ejemplo, pero sin promesas.

Respuesta

Estoy «usando https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Es el descompilador de IntelliJ, descompila códigos donde JD-GUI falla.

Es un espejo no oficial para descargar: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Respuesta

Me gustaría recomendarle AndroChef Java Decompiler AndroChef Java Decompiler descompila satisfactoriamente archivos .class y .jar de Java 6 y Java 7 ofuscados.

Comentarios

  • ¡PRESTE ATENCIÓN A ANDROCHEF! AndroChef es solo un envoltorio para el descompilador de fernflower abandonado, ¡no ‘ no gastes tu dinero con él!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *