利用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

 

posted on 2025-12-04 14:33  ziyi_ang  阅读(17)  评论(0)    收藏  举报

导航