利用classfinal-maven-plugin对jar进行加密,隐藏配置文件,并防止反编译
参考:https://zhuanlan.zhihu.com/p/11784544208
背景:将jar包部署到其他服务器,如何保证自己的jar不会被反编译解密
一、如何打包成加密的jar
1、在pom文件中,添加这两项
1.1引入:
<dependency>
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
</dependency>
1.2插件
<plugin>
<!--
【1】加密后,方法体被清空,保留方法参数、注解等信息;是为了兼容spring、swagger等扫描注解的框架
【2】方法体被清空后,反编译者只看到方法名和注解,看不到方法的具体内容
【3】加密后的项目需要设置javaagent来启动,启动过程中解密class,完全内存解密,不留下任何解密后的文件
【启动加密的Jar】: 生成 xxx-encrypted.jar,这个就是加密后的jar文件:加密后的文件不可执行
无密码:需要java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
有密码:java -javaagent:xxx -encrypted.jar = '-pwd 000000' -jar xxx-encrypted.jar
-->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<password>#</password> <!--加密密码,如果是#号,则使用无密码模式加密-->
<packages>com.bk</packages> <!--加密的包名(可为空,多个用“,”分割),也可以直接引用${project.artifactId}-->
<cfgfiles>application.yaml,application-local.yaml,application-dev.yaml</cfgfiles><!-- 加密的配置文件,多个包用逗号分开 -->
<libjars>hutool-all.jar</libjars><!-- jar包lib下面要加密的jar依赖文件,多个包用逗号分开 -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
这样打包出来的jar,反编译看到class文件,不能看到方法体里面的内容,也看不到application.yaml,application-local.yaml,application-dev.yaml这些配置文件
二、如何运行加密的jar
java -javaagent:D:\custom-server\test-server-encrypted.jar -jar D:\custom-server\test-server-encrypted.jar
你的指尖,有着改变世界的力量!
浙公网安备 33010602011771号