对SpringBoot项目Jar包进行加密防止反编译

news2024/11/15 11:05:08

最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去,要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来,本文介绍了如何对SpringBoot项目Jar包进行加密防止反编译,需要的朋友可以参考下

场景: 

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

方案:

第一种方案使用代码混淆

采用proguard-maven-plugin插件

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

第二种方案使用代码加密

 采用classfinal-maven-plugin插件

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

ClassFinal项目源码地址

 项目操作:

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <!--
                    1. 加密后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描
                    2. 方法体被清空后,反编译只能看到方法名和注解,看不到方法体的具体内容
                    3. 加密后的项目需要设置javaagent来启动,启动过程中解密class,完全内存解密,不留下任何解密后的文件
                    4. 启动加密后的jar,生成xxx-encrypted.jar,这个就是加密后的jar文件,加密后不可直接执行
                    5. 无密码启动方式,java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar
                    6. 有密码启动方式,java -javaagent:xxx-encrypted.jar='-pwd= 密码' -jar xxx-encrypted.jar
                -->
                <groupId>net.roseboy</groupId>
                <artifactId>classfinal-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <password>#</password><!-- #表示启动时不需要密码,事实上对于代码混淆来说,这个密码没什么用,它只是一个启动密码 -->
                    <excludes>org.spring</excludes>
                    <packages>${groupId}</packages><!-- 加密的包名,多个包用逗号分开 -->
                    <cfgfiles>application.yml,application-dev.yml</cfgfiles><!-- 加密的配置文件,多个包用逗号分开 -->
                    <libjars>hutool-all.jar</libjars> <!-- jar包lib下面要加密的jar依赖文件,多个包用逗号分开 -->
                    <code>xxxx</code> <!-- 指定机器启动,机器码 -->
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>classFinal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>

启动方式

无密码启动:java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar

有密码启动:

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

反编译效果

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

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

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

 yml配置文件留下空白

绑定机器启动 

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为HCIP-datacom 真题 (2024年下半年最新题库)

备考HCIP-datacom的小伙伴注意啦 2024年下半年8月份最新题库带解析,有需要的小伙伴移动至文章末 1.BGP 邻居建立过程的状态存在以下几种&#xff1a;那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、3-5-1-2-4 D、3-1-5-2-4 答案&#xff1a;D 解析…

界面控件DevExpress VCL v24.2路线图预览——增强云集成、简化应用程序皮肤等

DevExpress VCL Controls是Devexpress公司旗下老牌的用户界面套包&#xff0c;所包含的控件有&#xff1a;数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验&#xff0c;提供高影响力的业务解决方案&#xff0c;并利用您现有的VCL技能为未来构建下一…

el-pagination 下拉条目数最后一个样式改成全部

2024.08.27今天我学习了如何把el-pagination的下拉条目数修改&#xff0c;效果如下&#xff1a; 我们需要把最后一条选择换成全部展示&#xff0c;其实传给后端的还是总的数量&#xff0c;只是换了一个content&#xff0c; 通过f12查看元素可以拿到.el-select-dropdown__item …

华为鸿蒙NEXT大揭秘:微信版功能曝光,简洁界面回归

在科技界&#xff0c;每一次操作系统的更新迭代都是一场期待与猜测的盛宴。华为的鸿蒙系统自问世以来&#xff0c;就以其独特的设计理念和强大的功能吸引了全球的目光。而今&#xff0c;随着微信版鸿蒙NEXT的曝光&#xff0c;我们似乎又将迎来一次科技的飞跃。但这一次&#xf…

【多系统萎缩患者必看!】营养补给站,守护健康每一刻✨

Hey小伙伴们~ 今天我们来聊聊一个需要特别关爱的话题——多系统萎缩&#xff08;MSA&#xff09;患者的营养补充秘籍&#xff01;&#x1f31f; MSA是一种复杂的神经系统疾病&#xff0c;它影响我们的多个身体系统&#xff0c;让每一天的生活都充满了挑战。但别担心&#xff0c…

【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密

前言 &#x1f34a;缘由 SQLite里藏秘密&#xff0c;微信聊天有痕迹 &#x1f423;闪亮主角 大家好&#xff0c;我是JavaDog程序狗 今天跟大家分享一个开源小工具PyWxDump&#xff0c;是一个用于获取 wx 账户信息&#xff08;昵称/账户/电话/电子邮件/数据库密钥&#xff0…

利用autoDecoder工具在数据包加密+签名验证站点流畅测试

站点是个靶场 https://github.com/0ctDay/encrypt-decrypt-vuls 演示地址http://39.98.108.20:8085/ 不是仅登录位置暴力破解的那种场景&#xff0c;使用autoDecoder&#xff08;https://github.com/f0ng/autoDecoder&#xff09;的好处就是每个请求自动加解密&#xff0c;测…

35岁失业后,这3个AI副业,也能养活自己

不少粉丝曾问我&#xff0c;有没有用AI赚钱的方法。 *眼看就快到35岁中年危机&#xff0c;想提前安排个退路。* 对于大家的焦虑&#xff0c;我很能理解&#xff0c;花钱容易挣钱难&#xff0c;尤其是在当下&#xff0c;大环境不是那么好&#xff0c;很多人进入佛系状态&#…

【STM32】位带操作

一、位带操作 1.意义 回想以前写51代码 ​ P0 0x10; //将P0端口设置为0x10 P1_01; //将P1端口0号引脚设置为高电平 a P2_2; //获取P2端口2号引脚的电平 根据上述的方法&#xff0c;我们可以发现快速定位修改某个引脚的电平还有获取引脚的状态 2.原因 GPIO_SetBits、GPI…

2025深圳国际微波射频及天线技术应用展览会

2025深圳国际微波射频及天线技术应用展览会 2025 Shenzhen International Microwave RF and Antenna Technology Application Exhibition 时间&#xff1a;2025年04月9-11日 地点&#xff1a;深圳会展中心(福田&#xff09; 详询主办方陆先生 I38&#xff08;前三位&#…

CRMEB 多店版供应商订单管理

订单列表 一、功能介绍 查看所有供应商订单数据&#xff0c;详情&#xff0c;可以提醒发货 根据供应商筛选&#xff0c;可以查看不同类订单 二、操作流程 供应商 &#xff1e; 订单管理 > 订单列表 三、功能说明 售后列表 一、功能介绍 查看所有供应商售后订单数据&a…

一个案例讲透如何做好竞品分析!

随着国内互联网市场进入下半场&#xff0c;各个领域的相关产品层出不穷&#xff0c;即使是新鲜事物&#xff0c;一旦出现&#xff0c;也会迅速造成行业内部拥挤。行业发展如此之快&#xff0c;闭门造车绝对不是产品迭代更新应有的设计方式。敞开大门&#xff0c;出去看看别人家…

基于 Llama factory 微调 Llama3.1-70B-Chinese-Chat

​ 本文旨在探讨基于Llama factory使用LoRA&#xff08;Low-Rank Adaptation&#xff09;技术对Llama3.1-70B-Chinese-Chat模型进行微调的过程&#xff0c;重点介绍在单机多卡和多机多卡两种分布式训练环境下的实现方法。 1.环境准备 1.1 平台环境 微调Llama3.1-70B模型&…

Anthropic 公开 Claude AI 模型的系统提示词

硅纪元快讯栏目&#xff0c;每日追踪AI领域的最新动态&#xff0c;快速汇总最新科技新闻&#xff0c;助您时刻紧跟行业趋势。简明扼要的呈现资讯概要&#xff0c;让您快速了解前沿资讯。 1分钟速览新闻 特斯拉“Cortex”超级计算机亮相&#xff0c;预计10月全面运行 Anthropic…

Clickhouse集群化(一)k8s集群搭建

环境准备&#xff1a; vm 17 pro 有些功能必须pro版本才会提供&#xff08;https://download.csdn.net/download/weixin_40663313/89677277?spm1001.2014.3001.5501&#xff09;夸克下载链接 centos 7.9 docker&#xff1a;1.26 k8s&#xff1a;1.21.14 1. 创建虚拟机 …

图书馆自习预约选座小程序

一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《图书馆自习预约选座小程序》。 图书馆是日常同学学习的好去处&#xff0c;但同学们日益高涨的学习热情和图书馆座位有限的矛盾也日益凸显。经常出现座位不够的情况&#xff0c;甚至部分同学会进行占座&#…

腾讯浙大提出定制化视频生成框架CustomCrafter,只需通过少量图像就可以完成高质量视频生成!

腾讯联合浙大提出了一种定制化视频生成框架-CustomCrafter&#xff0c;它能够基于文本提示和参考图像生成自定义视频&#xff0c;同时保留运动生成和概念组合的能力。通过设计一系列灵活的模块&#xff0c;使得模型实现了无需额外视频&#xff0c;通过少量图像学习&#xff0c;…

【开端】 进行页面升级或维护时不影响用户体验NGINX配置

一、绪论 在网站管理中&#xff0c;经常需要进行页面升级或维护&#xff0c;而为了不影响用户体验&#xff0c;我们可以设置一个访问页面&#xff0c;在页面升级期间&#xff0c;用户访问网站时会直接跳转到该页面。本文将介绍如何设置访问页面进行升级&#xff0c;以确保用户…

Vue(1)——创建实例

Vue创建实例 Vue是用于构建用户界面的渐进式框架。 创建Vue实例&#xff0c;初始化渲染 准备容器引包(开发版本/生产版本)创建Vue实例指定配置项&#xff0c;渲染数据 el指定挂载点 data提供数据 <!-- 准备容器 --><div id"app"><h1>{{msg}}<…

【论文阅读】Automatic Modulation Classification Based Deep Learning: A Review(2022)

摘要 Automatic Modulation Recognition&#xff08;自动调制识别&#xff09; (AMR) is a critical component of&#xff08;重要组成部分&#xff09; smart communication&#xff08;智能通信&#xff09; and it contributed&#xff08;促进了&#xff09; to the deve…