近日,一位朋友向我咨询,他开发了一套 Java 系统,打算在网上销售,却担心源码会被买家反编译或者 jar 包直接被二次销售。为了帮助他解决这个问题,也为了帮助大家避免类似的困扰,今天我向大家推荐一个实用的 java class 文件安全加密的开源工具。
这个工具名为 ClassFinal,可以直接加密 jar 包或 war 包,而无需修改任何项目代码。还可以设置 jar 包的启动密码,严格控制使用人员的权限。并且支持绑定机器,使得加密后的 jar 包只能在特定机器上运行。这就像给 jar 包加上了一把锁,只有拥有钥匙的机器和人员才能打开并运行它。希望这个解决方案能帮助大家解决类似的烦恼,保障软件的安全与权益。
要使用 ClassFinal,首先我们要下载 ClassFinal jar 。
如果我们想绑定指定机器运行,要通过如下命令去获取机器码:
1 | java -jar classfinal-fatjar-1.2.1.jar -C |
如果我们想直接对打包好的 jar 进行加密,可以使用如下的加密命令:
1 | java -jar classfinal-fatjar.jar -file yourpaoject.jar -libjars a.jar,b.jar -packages com.yourpackage,com.yourpackage2 -exclude com.yourpackage.Main -pwd 123456 -Y |
1 | 参数说明 |
如果我们不想每次打包后都手动执行一次加密命令的话,可以通过 maven 插件的方式使用 ClassFinal。这样的话,我们的 maven 项目每次打包时都会自动使用 ClassFinal 加密。下面我以开源项目 novel 为例,带领大家实际体验一下。
1. 在 novel 项目的 pom.xml 文件中添加 ClassFinal 的 maven 插件配置:
1 | <plugin> |
2. 通过如下命令来启动加密后的 jar:
1 | java -javaagent:novel-3.4.0-encrypted.jar='-pwd novel' -jar novel-3.4.0-encrypted.jar |
如果输入的密码不正确则会启动失败:
如果不是在指定机器上运行也会启动失败:
查看反编译后的 application.yml 配置文件发现只剩一片空白:
查看反编译后的 BookController.class,发现所有的方法体都被清空了,只保留了方法参数、注解等信息:
原始的 BookController.java 文件如下: