jar包加密防止反编译–classFinal

作者: adm 分类: java 发布时间: 2024-07-19

有这样的需求,我们项目要部署在其他公司的服务器上,但是又不想让外人看到我们的源码。所以要对jar包中的内容进行加密。

加密方式一般有二,一是可以对class文件中的内容进行混淆,对类名和方法名等进行替换,使得代码阅读困难,但是不影响代码逻辑,多花时间还是可以解读出来的。二是对class文件进行一些操作加密,运行的时候再进行解密。

网上找了几个,觉得还是classFinal这个比较满意,加密选择灵活,支持springboot项目,操作简单。
项目地址:https://gitee.com/roseboy/classfinal
打包
可以选择拉下源码后,本地直接package一下,把加密的这个jar包先打好。自己研究的话 也可以不用打包,直接找到启动类,启动也是没问题的。

3:启动
启动后根据提示写入参数,但是在此过程中,加密包所在的地址中,不要包含中文!

启动加密jar包:java -jar classfinal-fatjar-1.2.1.jar

在目标jar目录下会生成一个新的jar

如果需要指定机器的话,执行如下命令:则会生成一串机器码

java -jar classfinal-fatjar-1.2.1.jar -C

执行以下命令

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
参数说明
-file 加密的jar/war完整路径
-packages 加密的包名(可为空,多个用”,”分割)
-libjars jar/war包lib下要加密jar文件名(可为空,多个用”,”分割)
-cfgfiles 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用”,”分割)
-exclude 排除的类名(可为空,多个用”,”分割)
-classpath 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用”,”分割)
-pwd 加密密码,如果是#号,则使用无密码模式加密
-code 机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y 无需确认,不加此参数会提示确认以上信息
结果: 生成 yourpaoject-encrypted.jar,这个就是加密后的jar文件;加密后的文件不可直接执行,需要配置javaagent。

注: 以上示例是直接用参数执行,也可以直接执行 java -jar classfinal-fatjar.jar按照步骤提示输入信息完成加密。
4:注意:
启动方式1:
如果启动方式采用下面这句的话,可能会无法启动!

java -javaagent:tool-3.4.1-encrypted.jar=’-pwd 123′ -jar tool-3.4.1-encrypted.jar
启动后报错:无法加载主类!如果原jar包是可以启动的,那跟项目关系可能不大,换一种启动方式

启动方式2:
命令:

java -javaagent:jar包名 -jar jar包名

log日志相关的xml文件加密后,也可能会造成启动失败!

5:插件形式
插件是classfinal-maven-plugin项目

net.roseboy
classfinal-maven-plugin
1.2.1
123456 com.test
com.test.trigger.Application.java

application.yml,application-dev.yml,application-test.yml

机器码


package
classFinal


打包完,会生成一个encrypted结尾的jar,启动命令跟上面是一样的

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!