AOT 编译问题
AOT 编译将 Java 代码翻译成原生代码,显著提升 Java 程序的运行速度,并通过将 Java 代码转换为机器码,间接达到了保护 Java 代码的目的。
对于 Java 程序,尤其是基于各种框架的 Java 程序,由于包含诸多动态特性,AOT 编译是一个巨大的挑战。同时,为了与动态性妥协,编译后的二进制文件可能仍然包含大量的 Class 文件信息。本文将介绍一个扫描编译后的二进制文件以获取 Class 信息的项目。 https://protector4j.com/articles/extract-java-classes-information-from-aot/
即使二进制程序不包含类文件信息,其运行逻辑仍然以相同的方式存在。唯一的区别在于其表示形式从字节码转换为机器码,且没有任何特殊的保护。如果能够理解其编译和执行机制,仍然可以逆向工程出可读的代码。下文将介绍这样一个项目。 https://protector4j.com/articles/graalvm-nativeimage-reverse-engineering/
结论
AOT 编译配置复杂,编译难度高,编译失败概率高。即使编译成功,代码逻辑也只是从字节码表示转化为机器码表示,其固有的运行逻辑依然存在,无需任何特殊保护。如果能够理解其自身的编译和执行机制,仍然能够逆向出可读的代码。