AOT编译问题

AOT编译将Java代码翻译为本机代码,显着提高Java程序的运行速度。它通过将Java代码转换为机器代码来间接达到保护Java代码的目的。

对于Java程序,尤其是基于各种框架的Java程序来说,由于包含了很多动态特性,AOT编译是一个巨大的挑战。同时,为了妥协动态性,编译后的二进制文件可能仍然包含大量的class文件信息。下面文章介绍一个扫描编译后的二进制文件获取类信息的项目。 https://protector4j.com/articles/extract-java-classes-information-from-aot/

即使二进制程序不包含类文件信息,其运行逻辑仍然以同样的方式存在。唯一的区别是表示形式从字节码变成了机器码,没有任何特殊的保护。如果能够理解其编译和执行机制,仍然可以对可读代码进行逆向工程。下面的文章就介绍了这样一个项目。 https://protector4j.com/articles/graalvm-nativeimage-reverse-engineering/

结论

AOT编译配置困难,编译难度高,编译失败概率高。即使编译成功,代码逻辑也只是从字节码表示变为机器码表示。其固有的运行逻辑仍然存在,没有任何特殊的保护。如果能够理解其自身的编译和执行机制,仍然可以对可读代码进行逆向工程。