JAVA程序保护02_GraalVM(java保护权限)

JAVA程序保护02_GraalVM(java保护权限)

精选文章moguli202025-05-03 15:04:5210A+A-

Java AOT(Ahead-Of-Time)编译是与 JIT(Just-In-Time)相对的一种编译方式。在 AOT 模式下,Java 字节码(Bytecode)在程序运行之前,就被提前编译为目标平台的本地机器代码。

看到这句话,会不会有点小激动。不使用字节码了,编译成本地机器码,岂不是一步到位,和C++程序差不多难反编译了,果真如此的话,那AOT是JAVA程序保护的第一解决方案。

动手试一下:搜索,找到了GraalVM。

GraalVM是Oracle开源的一款通用虚拟机产品,被誉为新一代的通用多语言高性能虚拟机。它可以运行多种编程语言,如Java、JavaScript、Python等,并提供了即时编译(JIT)和AOT编译(AOT)的支持。GraalVM还支持在不同语言之间互相调用,以及嵌入到其他应用程序中使用,这使得GraalVM成为一个非常强大和灵活的工具,可以满足不同应用场景的需求。

安装教程参见:
https://zhuanlan.zhihu.com/p/673241258

是否安装好验证:

  • 在d:\test下建文件HelloWorld.java

public class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello World! ");

}

}

  • 到cmd中依次运行

javac HelloWorld.java

native-image HelloWorld

Helloworld

相当完美,helloworld.exe被创建且能正确执行。

环境装好了,HelloWorld跑通了,接下来要生成自己写的应用程序的EXE。

  • 用IDEA打开自己的项目
  • 修改POM.XML,加入AOT Graalvm 插件

<!-- AOT Graalvm 插件 -->

<plugin>

<groupId>org.graalvm.buildtools</groupId>

<artifactId>native-maven-plugin</artifactId>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<!-- <version>3.5.1</version> -->

<!-- 指定maven编译的jdk版本。对于JDK8,写成8或者1.8都可以 -->

<configuration>

<source>${java.version}</source>

<target>${java.version}</target>

</configuration>

</plugin>

完成后如图:

  • 生成EXE步骤

勾选

清空target目录

Java编译成class

处理AOT

生成EXE

等上几分钟,如果一切顺利,在项目的target目录下将生成EXE文件

急切地运行EXE,很不幸,报异常了:

查资料才知道,GraalVM不支持反射、动态类的加载这些东东。一般的应用系统都是基于SPRING BOOT的,Spring Boot 中的注解处理主要基于反射(Reflection)机制。官方虽然给了一个带agentlib参数运行JAR包的方案,但是要你最好把系统的所有功能都点一遍(晕死)。

结论:Java AOT编译和GraalVM看起来很美,实际是个坑货,编译出EXE后运行起来一堆错,放弃此路线。

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2