0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SpringBoot项目Jar包加密防止反编译方案

jf_ro2CN3Fa 来源:稀土掘金技术社区 2023-12-12 14:04 次阅读

1 场景

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

2 方案

第一种方案使用代码混淆

采用proguard-maven-plugin插件

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

第二种方案使用代码加密

采用classfinal-maven-plugin插件

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

ClassFinal项目源码地址 [1]

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-jarxxx-encrypted.jar

有密码启动

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

5 反编译效果

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

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

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

d09c1e84-9740-11ee-8b88-92fbcf53809c.jpg

yml配置文件留下空白

d0b29e7a-9740-11ee-8b88-92fbcf53809c.jpg

6 绑定机器启动

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

d0c5871a-9740-11ee-8b88-92fbcf53809c.jpg

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 源码
    +关注

    关注

    8

    文章

    641

    浏览量

    29221
  • 代码
    +关注

    关注

    30

    文章

    4789

    浏览量

    68636
  • 插件
    +关注

    关注

    0

    文章

    328

    浏览量

    22446
  • SpringBoot
    +关注

    关注

    0

    文章

    173

    浏览量

    181

原文标题:SpringBoot 项目 Jar 包加密,防止反编译

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎样防止编译后的C语言文件被反编译

    单片机C语言生成什么文件后可以防止反编译
    发表于 09-14 15:25

    DEX加密效果分析

    dex加密目的:保护安卓应用的Java源代码,避免被恶意分析,技术被窃取准备工具:1、apktool :反编译apk,提取smali代码2、dex2jar :将dex转化为jar文件3
    发表于 12-12 16:56

    请问如何打jar和运行jar

    如何打jar和运行jar 首先,例如c盘根目录下有类HelloWorld.java: public class HelloWorld{ public static void mai
    发表于 07-05 01:08

    JAR文件jar命令详解

    制作可执行的JAR文件jar命令详解常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的
    发表于 07-12 08:37

    几种Linux下后台启动jar的方法介绍

      当我们使用SpringBoot的方式开发好了我们的应用,放到我们的Linux服务器上准备上线,首先想到的可能就是通过 java -jar xxx.jar 的方式来运行我们的jar
    发表于 07-22 08:02

    8051 MCU反编译开发环境与步骤分别是什么呢

    8051 MCU反编译开发方法记录1、项目背景2、开发环境3、开发步骤3.1 反编译3.2 找出EEPROM的写入地址3.3 找出EEPROM读写操作的代码段3.4 找出EEPROM读写操作代码段
    发表于 01-24 07:06

    反编译代码与源代码的比较算法

    反编译代码与源代码的
    发表于 02-09 15:19 10次下载

    FoxPro编程爱好者的反编译工具源代码

    FoxPro编程爱好者的反编译工具源代码 UNFOXALL 2.1献给广大FoxPro编程爱好者的反编译工具            关于
    发表于 02-26 16:13 94次下载

    Android反编译工具

    Android反编译工具
    发表于 12-17 15:59 21次下载

    鸿蒙三方库移植及开发项目如何打入Jar

    鸿蒙三方库移植及开发项目中,在JavaLibrary module中会引用一些其他开源三方库如Zxing,Gson等,将JavaLibrary打出jar的时候,发现这些第三方库根本没有打到j
    的头像 发表于 03-19 14:46 3026次阅读

    java反编译常用的保护技术

    由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大
    发表于 07-29 16:00 711次阅读

    SpringBoot部署打包成jar和war有什么不同呢?

    我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar 项目名.
    的头像 发表于 04-07 11:30 868次阅读

    ida反编译出来代码能直接用吗

    IDA反编译出来的代码通常 不能直接使用 ,这主要基于以下几个方面的原因: 一、代码的不完整性 IDA反编译生成的代码可能缺少原始源代码中的某些关键信息。在编译过程中,编译器会优化代码
    的头像 发表于 09-02 10:55 685次阅读

    java反编译的代码可以修改么

    Java反编译是一种将编译后的Java字节码(.class文件)转换回源代码的过程。反编译后的代码可以进行修改,但是需要注意,反编译代码的质量和可读性可能会受到原始
    的头像 发表于 09-02 11:00 694次阅读

    java反编译能拿到源码吗

    Java反编译是一种将编译后的Java字节码(.class文件)转换回Java源代码的过程。虽然反编译可以帮助理解代码的逻辑和结构,但它并不总是能完美地还原原始源代码。反编译工具通常会
    的头像 发表于 09-02 11:03 1021次阅读