SpringBoot Jar 包加密防止反编译

        今天看到了一个说明jar包加密的实现方式,特意试了下效果,并下载了插件源码及实现源码查看了下子,感兴趣的可以在最后得到gitee地址。

        SpringBoot 程序 Jar 包加密的方式,通过代码加密可以实现无法反编译。应用场景就是当需要把公司的产品部署到友方公司或者其他公司时,可以防止客户直接反编译出来源码,大大提升代码的安全性。

第一种是代码混淆的方式,可以参考proguard-maven-plugin插件使用,配置比较复杂。

第二种方式是使用代码加密的方式,classfinal-maven-plugin方式比较简单,只需要在pom.xml文件中引入一个plugin,然后简单的修改几项配置即可使用。这种方式不仅可以对代码进行加密,对配置文件application.yml、lib 下的依赖也可以加密以及指定机器运行程序。

开始验证

首先创建一个测试jar包,在此基础上开始

  1. pom.xml 中加入
<plugin><!--1. 加密后,方法体被清空,保留方法参数、注解等信息.主要兼容swagger文档注解扫描2. 方法体被清空后,反编译只能看到方法名和注解,看不到方法体的具体内容3. 加密后的项目需要设置javaagent来启动,启动过程中解密class,完全内存解密,不留下任何解密后的文件4. 启动加密后的jar,生成xxx-encrypted.jar,这个就是加密后的jar文件,加密后不可直接执行5. 无密码启动方式,java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar6. 有密码启动方式,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>peach123</password><excludes>org.spring</excludes><!-- 加密的包名,多个包用逗号分开 --><packages>${groupId}</packages><!-- 加密的配置文件,多个包用逗号分开 --><cfgfiles>application.yml,application-dev.yml,application.properties</cfgfiles><!-- jar包lib下面要加密的jar依赖文件,多个包用逗号分开 --><libjars>hutool-all.jar</libjars><code>E5967EA3B33C21242D5FA564E125E276D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code> <!-- 指定机器启动,机器码 --></configuration><executions><execution><phase>package</phase><goals><goal>classFinal</goal></goals></execution></executions>
</plugin>

注意:需在

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>

后添加

2. 上述代码中的机器码可以使用如下工具生成,进去之后点击下载

https://repo1.maven.org/maven2/net/roseboy/classfinal-fatjar/1.2.1/classfinal-fatjar-1.2.1.jar

3. 然后执行,注意最后参数为大写的C。

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

4. 最后将输出的机器码放入到上方的 code 中即可。

不在指定的机器码生成机器启动项目:

5. 执行 Maven 命令打包即可,生成文件如下,其中emm-business-demo-0.0.1-SNAPSHOT-encrypted.jar为生成的加密jar 包。

如需提供给客户,提供该包即可。

使用反编译工具,查看 jar 包中配置文件,可以看到配置文件已经为空

未加密:

加密包:

加密代码:

未加密:

可以看到方法体被清空,只保留了方法参数、注解等信息

6. 无密码启动

java -javaagent:加密jar包的名称 -jar 加密jar包的名称

java -javaagent:emm-business-demo-0.0.1-SNAPSHOT-encrypted.jar -jar emm-business-demo-0.0.1-SNAPSHOT-encrypted.jar

7. 有密码启动:

输入密码错误:

输入密码正确:

具体的功能及实现方式,可以查看 https://gitee.com/roseboy/classfinal/tree/master

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

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

相关文章

【AI知识点】词袋模型(Bag-of-Words,BOW)

词袋模型&#xff08;Bag-of-Words&#xff0c;简称BOW&#xff09;是一种用于文本表示的简单且常用的方法&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;和信息检索领域中广泛应用。词袋模型的核心思想是将文本表示为一个词频统计的集合&#xff0c;而不考虑词的…

Draw a triangle

Problem - E - Codeforces 题意:给定两个点的坐标求第三个点并且使得三个点围成的三角形面积最小&#xff1b; 这道题涉及了很多知识点&#xff1a; 1.在二维空间中&#xff0c;两个向量a,b叉乘&#xff0c;|a*b|在数值上等于以向量a和向量b为邻边构成的平行四边形的面积&am…

【Java】异常的处理-方式【主线学习笔记】

文章目录 前言1、处理概述2、Java异常处理机制&#xff08;方式&#xff09;方式一&#xff08;抓抛模型&#xff09;&#xff1a;try-catch-finally方式二&#xff1a;throws 异常类型总结 前言 Java是一门功能强大且广泛应用的编程语言&#xff0c;具有跨平台性和高效的执行…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)

3 网络及IP规划 3.1 容器连接网络初步规划 规划所有容器与虚拟机的三张网卡以macvlan的方式进行连接&#xff08;以后根据应用可以更改&#xff09;&#xff0c;在docker下创建nat、wifi、nei、wai四张网卡&#xff0c;他们和虚拟机及宿主机上NIC的相关连接参数如下表所示&am…

Linux防火墙-案例(二)snatdnat

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

脑机接口技术的未来与现状:Neuralink、机械手臂与视觉假体的突破

近年来&#xff0c;脑机接口&#xff08;BCI&#xff09;技术发展迅速&#xff0c;不仅限于科幻小说和电影&#xff0c;已经逐步进入现实应用。特别是马斯克的Neuralink公司推出的“盲视&#xff08;Blindsight&#xff09;”设备&#xff0c;最近获得了FDA的突破性设备认定&am…

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

动态规划算法题目练习——62.不同路径

1.题目解析 题目来源&#xff1a;62.不同路径——力扣 测试用例 2.算法原理 1.状态表示 这时由于避免越界初始化所以将左上角置为虚拟位置&#xff0c;创建一个二维dp表用来存储到当前为止的所有路径 2.状态转移方程 以dp[i,j]为例&#xff0c;起点到该位置的路径是起点到其上…

费曼学习法没有输出对象怎么办?

‌费曼学习法并不需要输出对象。‌费曼学习法的核心在于通过将所学知识以简明易懂的方式解释给自己听&#xff0c;从而加深对知识的理解和记忆。这种方法强调的是理解和反思的过程&#xff0c;而不是简单地通过输出&#xff08;如向他人解释&#xff09;来检验学习效果。费曼学…

YOLO 二元分类器

YOLO 二元分类器 在评估二元分类器性能时&#xff0c;TP、FP、TN和FN是四个核心指标&#xff0c;它们分别代表真阳性、假阳性、真阴性和假阴性。以下是这些指标的定义、计算方法以及在实际应用中的意义&#xff1a; 定义 TP&#xff08;真阳性&#xff09;&#xff1a;模型正…

找不到concrt140.dll如何修复,快来试试这6种解决方法

concrt140.dll是微软Visual C 2015 Redistributable Package中的一个重要动态链接库文件&#xff0c;它在许多Windows应用程序中扮演着关键角色。本文将详细探讨concrt140.dll丢失的原因、影响、解决方法以及预防措施&#xff0c;帮助用户更好地理解和应对这一问题。 一、什么是…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述&#xff0c;实现异步FIFO&#xff0c;要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明&#xff1a; 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…

算法知识点————贪心

贪心&#xff1a;只考虑局部最优解&#xff0c;不考虑全部最优解。有时候得不到最优解。 DP&#xff1a;考虑全局最优解。DP的特点&#xff1a;无后效性&#xff08;正在求解的时候不关心前面的解是怎么求的&#xff09;&#xff1b; 二者都是在求最优解的&#xff0c;都有最优…

WPF下使用FreeRedis操作RedisStream实现简单的消息队列

Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。 阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据…

Springboot 整合 durid

文章目录 Springboot 整合 druiddruid的优势配置参数使用整合 Druid配置数据源配置参数绑定配置参数配置监控页面配置拦截器 Springboot 整合 druid druid的优势 可以很好的监控 DB 池连接 和 SQL 的执行情况可以给数据库密码加密可以很方便的编写JDBC插件 配置参数 使用 整…

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值6.岛屿的最大面积3.最大数4.会议室5.最长连续序列6.寻找两个正序数组的中位数 1.两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请…

.NET CORE程序发布IIS后报错误 500.19

发布IIS后浏览时报错误500.19&#xff0c;同时配置文件web.config的路径中也存在问号“?”。 可能原因&#xff1a;没有安装运行时

ViT(Vision Transformer详解)

Transformer作为前沿的深度学习框架&#xff0c;带有多模态的特性&#xff0c;对于不同类型的输入数据&#xff0c;不管是文本还是图像均可进行处理&#xff0c;而ViT则是对于Transformer中的视觉方面&#xff08;也就是输入数据为图像&#xff09;的衍生物&#xff08;因Trans…

MATLAB - 浮动基座机器人的逆运动学

系列文章目录 前言 本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转&#xff0c;具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用&#xff0c;即使用安装在浮动和致动基座上的机械臂在空间操纵物体&#xff0…

ubuntu添加 SSH 密钥到 GitHub

好的&#xff0c;以下是详细的步骤&#xff0c;帮助你在 Ubuntu 上生成并添加 SSH 密钥到 GitHub&#xff1a; 1. 检查是否已有 SSH 密钥 首先&#xff0c;检查你是否已经有 SSH 密钥&#xff1a; ls -al ~/.ssh如果看到 id_rsa 或 id_ed25519 文件&#xff0c;则表示你已有…