当前位置: 首页 > news >正文

使用 ClassFinal 对SpringBoot jar加密加固并进行机器绑定

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏 。

为避免源码泄漏或字节码被反编译,这里记录一下使用 ClassFinal 对jar包进行加壳加固。

目录

文档

使用

机器绑定

maven插件方式使用

启动加密后的jar


文档

官网地址:ClassFinal: Java字节码加密工具

使用

机器绑定

生成机器码前先从Gitee下载好classfinal-fatjar-1.2.1.jar。

机器绑定只允许加密的项目在特定的机器上运行,在需要绑定的机器上执行以下命令,生成机器码:

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

生成的机器码存放在同classfinal-fatjar-1.2.1.jar目录中的classfinal.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

启动时按照其实输入密码即可启动:

相关文章:

  • 【Vue3】3-1 : 章节介绍 - Vue3组件应用及单文件组件
  • 前端常见面试题之防抖、节流、xss、xsrf
  • 烟火检测/区域人流统计/AI智能分析网关V4如何配置通道?
  • 代码随想录算法训练营第二十四天| 77. 组合
  • 职务岗位的概念澄清及应用
  • 慢查询定位
  • 【ubuntu】docker中如何ping其他ip或外网
  • flutter 播放SVGA动图
  • 微服务研发时,多个人共同调试一个服务,在nacos会启动多个实例,导致请求服务接口时在你和别人之间来回轮询问题处理
  • 湖(岛屿)
  • DNS的主要作用
  • 可定制多目标视频生成;LLM驱动的文生图;控制视频生成中运动目标轨迹;扩散模型做全景分割;实时多功能SAM;各种分割任务统一模型
  • Kotlin协程的JVM实现源码分析(上)
  • 抖动与相噪
  • 【面试】测试/测开(ING3)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • HTTP请求重发
  • HTTP--网络协议分层,http历史(二)
  • iOS | NSProxy
  • JavaScript学习总结——原型
  • JS学习笔记——闭包
  • Spring-boot 启动时碰到的错误
  • tweak 支持第三方库
  • TypeScript实现数据结构(一)栈,队列,链表
  • ucore操作系统实验笔记 - 重新理解中断
  • v-if和v-for连用出现的问题
  • vue 个人积累(使用工具,组件)
  • 分享几个不错的工具
  • 离散点最小(凸)包围边界查找
  • 如何合理的规划jvm性能调优
  • 想写好前端,先练好内功
  • 一些css基础学习笔记
  • 1.Ext JS 建立web开发工程
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (3)llvm ir转换过程
  • (6)STL算法之转换
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • :“Failed to access IIS metabase”解决方法
  • @Data注解的作用
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [ActionScript][AS3]小小笔记
  • [BUUCTF 2018]Online Tool
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测
  • [c++] C++多态(虚函数和虚继承)
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [C++]C++类基本语法
  • [CISCN 2023 初赛]go_session