ClassFinal是一款 Java class文件安全加密工具,支持直接加密Jar包或者war包,无需修改任何项目代码,兼容Spring-framework,可以避免源码泄露或字节码反被编译。

功能特性

  • 无需修改原项目代码,只要把编译好的jar/war包用本工具加密即可。
  • 运行加密项目时,无需求修改tomcat,spring等源代码。
  • 支持普通jar包、springboot jar包以及普通java web项目编译的war包。
  • 支持spring framework、swagger等需要在启动过程中扫描注解或生成字节码的框架。
  • 支持maven插件,添加插件后在打包过程中自动加密。
  • 支持加密WEB-INF/lib或BOOT-INF/lib下的依赖jar包。
  • 支持绑定机器,项目加密后只能在特定机器运行。
  • 支持加密springboot的配置文件。

官网

使用

获取机器绑定码

从官网上下载 classfinal-fatjar.jar 包,然后使用指令 java -jar classfinal-fatjar.jar -C 运行下载下来的jar包,得到一个classfinal-code.txt文件,文件中的字符串就是机器码。

POM文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<plugin>  
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<!-- 加密密码,如果是#号,则使用无密码模式加密 -->
<password>123456</password>
<!-- 加密的包名(可为空,多个用","分割) -->
<packages>com.xihai, com.xlb</packages>
<!-- 排除的类名(可为空,多个用","分割) -->
<excludes>org.spring</excludes>
<!-- 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割) -->
<!-- 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割) -->
<cfgfiles>application.yml</cfgfiles>
<!-- 机器码,在绑定的机器生成,加密后只可在此机器上运行 -->
<code>BB318CE6E927FDF156CB507170D30C3CD41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>
<!-- jar/war包下需要加密的jar文件名 -->
<libjars>xml-analysis.jar</libjars>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>

在项目模块POM文件中添加上述插件后,使用maven进行打包mvn package,会在target目录下自动加密生成 yourproject-encrypted.jar。可支持 机器码+密码 的方式运行。

运行

启动密码加密Jar包的方式:

1
java -javaagent:yourproject-encrypted.jar="123456" -jar yourproject-encrypted.jar

启动无密码加密jar包的方式

1
java -javaagent:yourproject-encrypted.jar -jar yourproject-encrypted.jar