Problemas con la compilación 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 salvaguardar el código Java convirtiéndolo en código de máquina.
Para los programas Java, especialmente aquellos basados en varios marcos, la compilación AOT es un gran desafío debido a la inclusión de muchas características dinámicas. Al mismo tiempo, para comprometer el dinamismo, el archivo binario compilado aún puede contener una gran cantidad de información del archivo de clase. El siguiente artículo presenta un proyecto que escanea archivos binarios compilados para obtener información de clase. https://protector4j.com/articles/extract-java-classes-information-from-aot/
Incluso si el programa binario no contiene información del archivo de clase, su lógica de ejecución sigue existiendo de la misma manera. La única diferencia es que la representación ha cambiado de código de bytes a código de máquina, sin ninguna protección especial. Si uno puede comprender su mecanismo de compilación y ejecución, aún es posible realizar ingeniería inversa en código legible. El siguiente artículo presenta dicho proyecto. https://protector4j.com/articles/graalvm-nativeimage-reverse-engineering/
Conclusión
La configuración de la compilación AOT es difícil, la dificultad de la compilación es alta y la probabilidad de que la compilación falle es alta. Incluso si la compilación es exitosa, la lógica del código solo cambia de representación de código de bytes a representación de código de máquina. Su lógica operativa inherente todavía existe sin ninguna protección especial. Si uno puede comprender su propio mecanismo de compilación y ejecución, aún es posible realizar ingeniería inversa en código legible.