写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏 。
为避免源码泄漏或字节码被反编译,这里记录一下使用 ClassFinal 对jar包进行加壳加固。
目录
文档
使用
机器绑定
生成机器码前先从Gitee下载好classfinal-fatjar-1.2.1.jar。
机器绑定只允许加密的项目在特定的机器上运行,在需要绑定的机器上执行以下命令,生成机器码:
java -jar classfinal-fatjar-1.2.1.jar -C
生成的机器码存放在同classfinal-fatjar-1.2.1.jar目录中的classfinal-code.txt文件中,如下:
maven插件方式使用
官网介绍的使用方式有两种,这里记录下 maven插件方式,
在要加密的项目pom.xml中加入以下插件配置,目前最新版本是:1.2.1。
<plugin>
<!-- https://gitee.com/roseboy/classfinal -->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<password>123456</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
<packages>com.ruoyi</packages>
<cfgfiles>*.yml</cfgfiles>
<excludes>org.spring</excludes>
<code>CA5800E403C341E1D2738A951EF553B6D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>
<!-- <libjars>a.jar,b.jar</libjars>-->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
参数说明:
参数说明 -file 加密的jar/war完整路径 -packages 加密的包名(可为空,多个用","分割) -libjars jar/war包lib下要加密jar文件名(可为空,多个用","分割) -cfgfiles 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割) -exclude 排除的类名(可为空,多个用","分割) -classpath 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割) -pwd 加密密码,如果是#号,则使用无密码模式加密 -code 机器码,在绑定的机器生成,加密后只可在此机器上运行 -Y 无需确认,不加此参数会提示确认以上信息
执行打包命令后会在target目录下生成加密后的jar包,格式为:
yourpaoject-encrypted.jar
启动加密后的jar
加密后的项目需要设置javaagent来启动,项目在启动过程中解密class,完全内存解密,不留下任何解密后的文件,启动命令如下:
java -javaagent:yourpaoject-encrypted.jar -jar yourpaoject-encrypted.jar
示例:
java -javaagent:selenium-manager-encrypted.jar -jar selenium-manager-encrypted.jar
启动时按照其实输入密码即可启动:
如果在非绑定的机器上运行,会报如下错误: