Una herramienta de descompilación Java / Kotlin y la biblioteca AST.
El objetivo principal de esta biblioteca era construir un árbol fuente abstracto completo (AST) para un archivo de clase Java que incluye nodos para todas las instrucciones. Está construido de Top of ASM que tiene elementos AST para métodos, pero se detiene allí y proporciona una lista simple de OpCode.
Si bien no es tan útil para modificar la fuente y la reconstrucción, un archivo de clase Java, este relleno AST es muy útil para la descomposición y para el análisis de código donde desea buscar patrones en una declaración en lugar de un nivel de código de operación.
Para apoyo y discusión, consulte nuestro chat de desarrollo/apoyo en irc.esper.net en el canal #Decompiler.
En este momento, el soporte de Kotlin es bastante nuevo y todas las características no se establecen y se esperan errores en la salida.
java -jar Despector.jar <--config=[path]> <--lang=[java|kotlin]> [sources...] [destination]
--config= le permite definir un archivo de configuración para ciertas configuraciones de descompilación.--lang= obliga a la salida a estar en un lenguaje particular. El comportamiento normal es intentar determinar el lenguaje de origen de los archivos de clase a partir de su contenido.Este descompilador todavía está bajo un gran desarrollo y los problemas ocurrirán. Si encuentra cualquier salida incorrecta, abra un problema en el rastreador de problemas. Como mínimo, incluye la salida esperada y encontrada. Una clase compilada que demuestra el problema también sería muy útil.
Las solicitudes de funciones siempre son bienvenidas y se pueden hacer en el rastreador de problemas con la mayor cantidad de información posible.
Aquí hay un archivo de configuración de muestra. Es opcional pero le permite controlar la configuración de descompilación, como el formato. Si desea que más configuraciones, abra una solicitud de función en el rastreador de problemas. El archivo de configuración utiliza el formato de configuración Hocon.
# Despector decompiler configuration:
# Cleanup configuration
cleanup {
# Cleanup operations to apply before emitting
operations=[]
}
# Targeted cleanup operations
"cleanup_sections"=[]
# Emitter configuration
emitter {
# Whether to emit synthetic members
emit-synthetics=false
# The path of the formatter configuration
formatting-path="run/eclipse_formatter.xml"
# One of: eclipse,intellij
formatting-type=eclipse
# The path of the import order configuration
import-order-path="run/eclipse.importorder"
}
# Kotlin specific configuration
kotlin {
# Whether to replace strings containing new lines with raw strings
replace-multiline-strings=true
}
# Prints out opcodes of a method when it fails to decompile.
print-opcodes-on-error=true