SpringBoot项目Jar包加密,防止反编译!

SpringBoot项目Jar包加密,防止反编译!

1 场景

2 方案

3 项目操作

4 启动方式

5 反编译效果

6 绑定机器启动

1 场景

最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去。要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来。

2 方案

第一种方案使用代码混淆

采用proguard-maven-plugin插件

在单模块中此方案还算简单,但是现在项目一般都是多模块,一个模块依赖多个公共模块。那么使用此方案就比较麻烦,配置复杂,文档难懂,各模块之间的调用在是否混淆时极其容易出错。

第二种方案使用代码加密

采用classfinal-maven-plugin插件

此方案比对上面的方案来说,就简单了许多。直接配置一个插件就可以实现源码的安全性保护。并且可以对yml、properties配置文件以及lib目录下的maven依赖进行加密处理。若想指定机器启动,支持绑定机器,项目加密后只能在特定机器运行。

ClassFinal项目源码地址 [1]

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/yudao-cloud

视频教程:https://doc.iocoder.cn/video/

3 项目操作

只需要在启动类的pom.xml文件中加如下插件即可,需要注意的是,改插件时要放到spring-boot-maven-plugin插件后面,否则不起作用。

org.springframework.boot

spring-boot-maven-plugin

net.roseboy

classfinal-maven-plugin

1.2.1

#

org.spring

${groupId}

application.yml,application-dev.yml

hutool-all.jar

xxxx

package

classFinal

4 启动方式

无密码启动

java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar

有密码启动

java -javaagent:xxx-encrypted.jar='-pwd=密码' -jar xxx-encrypted.jar

5 反编译效果

启动包加密之后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描

反编译只能看到方法名和注解,看不到方法体的具体内容

启动过程中解密class,完全内存解密,不留下任何解密后的文件

yml配置文件留下空白

6 绑定机器启动

下载到classfinal-fatjar-1.2.1.jar [2]依赖,在当前依赖下cmd执行java -jar classfinal-fatjar-1.2.1.jar -C命令,会自动生成一串机器码

将此生成好的机器码,放到maven插件中的code里面即可。这样,打包好的项目只能在生成机器码的机器运行,其他机器则启动不了项目。

相关推荐

Steam Community :: Guide :: 【ASF 指令】ArchiSteamFarm 命令
365bet亚洲版登录

Steam Community :: Guide :: 【ASF 指令】ArchiSteamFarm 命令

📅 09-30 👁️ 9002
独立显卡使用很正常,但是跑分却很低,终于找到了原因
蜂巢素用法、成分详细解析
365万博首页

蜂巢素用法、成分详细解析

📅 07-17 👁️ 9013
借呗关闭了还能开通吗?多久可以重新开通
365bet网址多少

借呗关闭了还能开通吗?多久可以重新开通

📅 07-24 👁️ 5577
重装系统多少钱一次?全面解析价格与常见注意事项
斩殄是什么意思
365万博首页

斩殄是什么意思

📅 07-27 👁️ 6869