Problemas com a compilação AOT
A compilação AOT traduz o código Java em código nativo, melhorando significativamente a velocidade de execução dos programas Java. Indiretamente alcança o objetivo de proteger o código Java ao convertê-lo em código de máquina.
Para programas Java, especialmente aqueles baseados em vários frameworks, a compilação AOT é um enorme desafio devido à inclusão de muitos recursos dinâmicos. Ao mesmo tempo, para comprometer-se com o dinamismo, o arquivo binário compilado ainda pode conter uma grande quantidade de informações de arquivos class. O seguinte artigo apresenta um projeto que escaneia arquivos binários compilados para obter informações de classe. https://protector4j.com/pt/articles/extract-java-classes-information-from-aot/
Mesmo que o programa binário não contenha informações de arquivos class, sua lógica de execução ainda existe da mesma forma. A única diferença é que a representação mudou de bytecode para código de máquina, sem nenhuma proteção especial. Se alguém conseguir entender seu mecanismo de compilação e execução, ainda é possível fazer engenharia reversa de código legível. O seguinte artigo apresenta um projeto desse tipo. https://protector4j.com/pt/articles/graalvm-nativeimage-reverse-engineering/
Conclusão
A configuração da compilação AOT é difícil, a dificuldade de compilação é alta e a probabilidade de falha na compilação é alta. Mesmo que a compilação seja bem-sucedida, a lógica do código apenas muda da representação em bytecode para a representação em código de máquina. Sua lógica operacional inerente ainda existe sem nenhuma proteção especial. Se alguém conseguir entender seu próprio mecanismo de compilação e execução, ainda é possível fazer engenharia reversa de código legível.