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

这篇具有很好参考价值的文章主要介绍了对SpringBoot项目Jar包进行加密防止反编译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去,要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来,本文介绍了如何对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,完全内存解密,不留下任何解密后的文件jar包加密防止反编译,maven那些事,jar,java,开发语言,maven

yml配置文件留下空白jar包加密防止反编译,maven那些事,jar,java,开发语言,maven

绑定机器启动

下载到classfinal-fatjar-1.2.1.jar依赖,在当前依赖下cmd执行java -jar classfinal-fatjar-1.2.1.jar -C命令,会自动生成一串机器码jar包加密防止反编译,maven那些事,jar,java,开发语言,maven

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

此处机器码并非电脑的物理地址(误入坑)

 文章来源地址https://www.toymoban.com/news/detail-789768.html

到了这里,关于对SpringBoot项目Jar包进行加密防止反编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot学习——项目用maven打包成jar包 & windows + Linux平台运行 & Linux安装java & 遇到的问题

    1.maven打包springboot项目,jar包; 2.windows安装java环境,以及运行jar包; 3.Linux安装java环境,以及运行jar包; 4.运行jar包template might not exist报错及解决; Maven 构建生命周期定义了一个项目构建跟发布的过程。 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的

    2024年02月16日
    浏览(52)
  • 引入classfinal maven 插件实现对jar包的加密

    我使用的项目为微服务项目 明确所有需要加密的jar包: 可以通过maven的package指令,查看日志,后缀为jar的即为所有需要加密的jar包。 在跟pom文件的properties属性中定义classfinal maven插件的属性值 在各个需要加密的服务的pom文件中引入classfinal maven 插件,放在plugins标签里面 引入

    2024年04月26日
    浏览(19)
  • Linux使用脚本启动jar/war包(springboot+maven工程jar包)

    本文以 jar包 为例(war包是同样的操作流程)。 以springboot工程为例。 我打包用的maven。 在pom文件中可以约束最终的jar包名称: mvn clear 再然后 mvn install 这些都没什么好说的。 通过xftp或别的方式, 将jar包放入服务器某个目录 : yml文件放入jar包的同一个目录,内容是常规的

    2024年02月09日
    浏览(35)
  • maven项目引入私有jar,并打包到java.jar中

    私有jar存放位置 maven依赖 maven build

    2024年03月11日
    浏览(48)
  • idea带的maven在SpringBoot下载jar包出错、下载jar包速度慢

    /IntelliJ IDEA/plugins/maven/lib/maven3/conf/settings.xml 添加到mirrors标签里。(默认下载包是从国外拉取,速度慢,现在替换成国内阿里的链接)

    2024年01月23日
    浏览(29)
  • Idea2020.1编译maven工程显示jar包不存在的解决方法

    主要是给自己看的,以免以后遇到这个问题找不到方法。 问题描述:idea编译maven工程会显示jar包不存在,用maven编译可以通过,仔细检查jar包是都在的,新创建也编译不通过 找了好多方法都不能解决,最终发现以下两种可以解决 解决方案:第一种:(不推荐) 打开idea的Se

    2024年02月12日
    浏览(46)
  • Maven 项目外部jar包导入

    目录 一、通过dependency引入 1.1. jar包放置,建造lib目录  1.2. pom.xml文件 二、将外部jar打入本地maven仓库 2.1. 将jar包放入某不含中文的路径下 ,例如:E:filezip4j-1.3.2.jar 2.2. 在jar包所在目录栏中输入cmd,并回车 2.3. 在命令行输入操作命令 2.4. 添加成功 2.5. pom.xml 导入 三、 mvn i

    2024年02月08日
    浏览(26)
  • SpringBoot工程Maven构建引用本地jar包依赖

    目前大部分项目使用了SpringBoot,在项目实施过程中可能遇到没有搭建私有仓库,并且需要引入第三方提供的jar包(例如某些SDK)的情况。一般遇到以上情况可以将第三方提供的jar包通过以下命令安装到本地仓库,然后本地进行构建打包。 但是实际场景经常需要通过自动部署

    2024年01月24日
    浏览(41)
  • 在maven项目中引入本地jar包

    1、在项目个目录下创建libs文件夹,放入jar包 2、打开File — Project Structure 3、点击Libraries,点击“+”,选择Java 4、选择jar包,点击OK 5、修改pom文件

    2024年02月11日
    浏览(32)
  • Maven项目,本地jar包导入手动导入到Maven库中

    当你的项目,由于网络或者环境这些问题,无法从maven中央仓库更新jar包到本地的时候,可以尝试下面方法,手动添加jar包到Maven仓库; 方法一(推荐): 1、需要先拿到你的jar包,copy到本地。例如我的就是hutool-all-5.8.20.jar 2、执行mvn命令,由于本人平时用idea开发,没有配置

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包