Problemas con la compilación de AOT

La compilación AOT traduce el código Java a código nativo, lo que mejora significativamente la velocidad de ejecución de los programas Java. Indirectamente, logra el objetivo de proteger el código Java al convertirlo a código máquina.

Para los programas Java, especialmente aquellos basados en diversos frameworks, la compilación AOT supone un gran reto debido a la inclusión de numerosas características dinámicas. Al mismo tiempo, para mantener el dinamismo, el archivo binario compilado puede contener una gran cantidad de información de archivos de clase. El siguiente artículo presenta un proyecto que escanea archivos binarios compilados para obtener información de clase. https://protector4j.com/articles/extraer-informacion-de-clases-de-java-de-aot/

Incluso si el programa binario no contiene información del archivo de clase, su lógica de ejecución se mantiene igual. La única diferencia es que la representación ha cambiado de código de bytes a código máquina, sin ninguna protección especial. Si se comprende su mecanismo de compilación y ejecución, aún es posible aplicar ingeniería inversa a código legible. El siguiente artículo presenta un proyecto de este tipo. https://protector4j.com/articles/ingenieria-inversa-de-imagen-nativa-graalvm/

Conclusión

La configuración de la compilación AOT es compleja, la dificultad de compilación es alta y la probabilidad de fallo es alta. Incluso si la compilación es exitosa, la lógica del código solo cambia de la representación en bytecode a la representación en código máquina. Su lógica operativa inherente permanece sin ninguna protección especial. Si se comprende su propio mecanismo de compilación y ejecución, aún es posible aplicar ingeniería inversa a código legible.