使用proguard对springboot项目进行代码混淆

java17使用proguard进行代码混淆的方案 proguard进行代码混淆 阅读详情

maven的配置文件内容

  <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.2.0</version>
                <executions>
                    <execution>
                        <!-- 打包的时候开始混淆-->
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <injar>${project.build.finalName}.jar</injar>
                    <!--输出的jar-->
                    <outjar>${project.build.finalName}.jar</outjar>
                    <!-- 是否混淆-->
                    <obfuscate>true</obfuscate>
                    <options>
                    	<!--指定java版本号-->
                        <option>-target 1.8</option> 
                        <!--默认开启,不做收缩(删除注释、未被引用代码)-->
                        <option>-dontshrink</option> 
                        <!--默认是开启的,这里关闭字节码级别的优化-->
                        <option>-dontoptimize</option>
                        <!--混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代-->
                        <option>-adaptclassstrings</option>
                      	<!--忽略警告-->
                        <option>-ignorewarnings</option>
                        <option>-keep class org.apache.logging.log4j.util.* { *; }</option>
                        <option>-dontwarn org.apache.logging.log4j.util.**</option>
                        <!--对异常、注解信息在runtime予以保留,不然影响springboot启动-->
                        <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
                        </option>
                        <!--保留枚举成员及方法-->
                        <option>-keepclassmembers enum * { *; }</option>
                        <option>-keepparameternames</option>
                        <!--打包时候忽略note消息,如果提示那些有问题,那就加入以下note提示的那些类-->
                        <option>-dontnote javax.annotation.**</option>
                        <option>-dontnote sun.applet.**</option>
                        <option>-dontnote sun.tools.jar.**</option>
                        <option>-dontnote org.apache.commons.logging.**</option>
                        <option>-dontnote javax.inject.**</option>
                        <option>-dontnote org.aopalliance.intercept.**</option>
                        <option>-dontnote org.aopalliance.aop.**</option>
                        <option>-dontnote org.apache.logging.log4j.**</option>
                         <!--对主函数不进行混淆处理(否则springboot启动会异常)-->
                        <option>-keepclasseswithmembers public class * {
                            public static void main(java.lang.String[]);}
                        </option>
                        <!--入口程序类不能混淆,混淆会导致springboot启动不了-->
                        <option>-keep class com.aaa.Application</option>
                        <!--由于使用了mybaits-plus因此entity和mapper不能混淆 *只扫描一层包,**会扫描子级的包内容-->
                        <option>-keep class com.aaa.entity.** {*;}</option>
                        <option>-keep class com.aaa.mapper.** {*;}</option>
                        <option>-keep class com.aaa.service.** {*;}</option>
                        <option>-keep class com.aaa.dao.* {*;}</option>
                        <option>-keep interface * extends * { *; }</option>
                        <!--不混淆所有类,保存原始定义的注释-->
                        <option>-keepclassmembers class * {
                            @org.springframework.beans.factory.annotation.Autowired *;
                            @org.springframework.beans.factory.annotation.Value *;
                            }
                        </option>
                    </options>
                    <libs>
                        <!-- 添加依赖 java8-->
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                    </libs>
                </configuration>
                <dependencies>
                    <!-- https://mvnrepository.com/artifact/net.sf.proguard/proguard-base -->
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>6.1.1</version>
                    </dependency>
                </dependencies>
            </plugin>
            <!--springboot打包的配置信息-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    <fork>true</fork>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>
    </build>

配置后使用maven->package进行打包,完成后会生成jar,其中xxx_proguard_base.jar为未混淆的jar,我们只需要运行xxx.jar即可。

完成后,使用jd-jui进行反编译,可以看见有些类的名称以及方法名称会被替代;
在这里插入图片描述

遇到错误

进行package时遇到(Can’t process class [META-INF/versions/11/module-info.class] (Unsupported version number [55.0] (maximum 54.0, Java 10)))
这个是proguard版本与jdk版本不一致的问题,需要修改proguard的版本,在github中查看版本支持的对应jdk。

SpringBoot项目用ProGuard混淆代码,我踩过的那些坑(附完整proguard.cfg配置) 本文详细介绍了在SpringBoot项目中集成ProGuard进行代码混淆时常见的七大陷阱及解决方案,包括插件版本兼容性、SpringBoot注解保持策略、第三方库处理等关键问题,并提供了经过验证的完整proguard.cfg配置模板,帮助开发者高效实现代码保护。 阅读详情

相关推荐

SpringBoot项目用Proguard混淆代码,我踩过的那些坑(附完整proguard.cfg配置)

本文详细介绍了在SpringBoot项目中集成Proguard进行代码混淆的实战经验与避坑指南。通过分享作者在不同规模项目中的实践案例,提供了完整的proguard.cfg配置模板,特别针对Spring生态、第三方库兼容性和调试验证等关键环节给出解决方案,帮助开发者高效实现代码保护与优化。

weixin_30608503的博客 153

springboot 工程使用proguard混淆

通过上面的步骤,你可以在 Maven 构建的 Spring Boot 项目中使用 ProGuard 进行代码混淆。

batman 2406

SpringBoot项目代码保护实战:ProGuard混淆与字节码加密防反编译方案详解

在Java应用开发中,代码保护是保障知识产权和核心业务逻辑安全的重要环节。其基本原理是通过技术手段增加逆向工程的难度,防止源代码被轻易反编译和抄袭。从技术价值看,有效的代码保护不仅能防止商业逻辑泄露,也是企业级软件交付的标准实践。在应用场景上,尤其对于需要交付给第三方部署的SpringBoot项目,代码混淆和加密成为刚需。本文聚焦于SpringBoot项目的代码保护,深入解析ProGuard代码混淆与自定义类加载器实现字节码加密两种主流方案,并探讨如何通过混合策略平衡防护强度与工程可维护性,为开发者提供从原

weixin_30326741的博客 380

Spring boot使用ProGuard实现代码混淆

Spring boot使用ProGuard实现代码混淆 SpringBoot 玩一玩代码混淆,防止反编译代码泄露代码混淆常见于安卓的apk安装文件, 服务端的代码因为不易被普通用户接触到, 所以混淆不多。但是某些场景下, 比如:项目需要部署到客户机器上, 就会有泄露代码逻辑的风险。 不过需要知道的是:使用proguard混淆代码只能增加阅读和理解的难度, 并不能百分百保证代码安全。也即是达到让开发人员看到这头痛的代码有99.99999%的冲动放弃阅读,拍桌子说还不如我重写一遍逻辑。附:proGuard官网因

Blueeyedboy521的博客 7002

SpringBoot开发——集成ProGuard进行代码混淆

SpringBoot开发——集成ProGuard进行代码混淆

bjzhang75的博客 1078

springboot工程(单个maven工程)利用proguard实现代码混淆

springboot工程利用proguard实现代码混淆,使用 proguard 混淆代码只能增加阅读和理解的难度, 并不能百分百保证代码安全。

小酒仙 4079

springboot如何进行混淆加密(proguard+xjar)

springboot如何进行混淆加密(proguard+xjar)

Spontaneous_0的博客 5606

直流耦合系统介绍

参考《SMA如何使用直流耦合技术实现更高效的光伏电站-白皮书》

圆桌骑士的博客 731

springboot项目使用proguard配置代码混淆

物料准备:1.pom引入proguard-maven-plugin插件2.在proguard.cfg配置文件里设置具体的代码混淆配置3.maven package 打包测试。

ThinkPet 6739

从零开始的立绘拆包教程

蓝毒小天使天下第一! 本文拆包教程不限于明日方舟,在后面也会给出其他手游的拆包教程,例如少女前线 首先拆包最简单的无非就是拆取游戏资源,例如游戏立绘,音频,视频等,再深层次一点有拆取游戏配置文件,apk反编译得到部分源码 在本文,我们只介绍拆取游戏资源和对游戏资源的后期处理(因为另外两个讲道理我也没太搞懂,虽然可以提取游戏配置文件,但似乎大部分重要的数据都有加密,反编译出来的源码也只是部分,...

Conyrol的博客 9万+

【Pandas总结】第二节 Pandas 的数据读取_pd.read_csv()的使用详解(非常全面,推荐收藏)

pandas对纯文本的读取提供了非常强力的支持,参数有四五十个。这些参数中,有的很容易被忽略,但是在实际工作中却用处很大。

weixin_47139649的博客 11万+

springboot项目中,使用ProGuard 对代码进行混淆

java代码混淆使用proguard

m0_60907575的博客 1209

机器人学(三):手眼标定

主要讲了eye-to-hand的手眼标定求解算法,包括AX=XB和AX=YB两种情况,包含SVD法、Tsai-Lenz法、最小二乘法等,从原理到解法再到算法代码实现,包括matlab代码、C++代码、库的使用等,简单明了,容易在实际项目中进行应用

行者无疆的博客 2553

springboot3使用ProGuard混淆jar

好,现在从重新做一轮。先执行“删除旧混淆遗留文件”,避免之前错误的、旧、旧 patch 目录继续污染。

我很丑的博客 554

【AI应用实战-Codex】Mac intel芯片下安装Codex(二)

摘要:本文介绍了在Intel芯片Mac上安装OpenAI Codex桌面应用时遇到的问题及解决方法。由于官方仅提供ARM64版本,导致Intel Mac无法直接运行。解决方案包括:1)使用社区脚本将ARM版DMG与x64 Electron重新打包成兼容版本;2)使用VSCode插件配合CLI作为替代方案。文章详细记录了重新打包过程中遇到的"electron_common_owl_features"绑定缺失错误,通过注入stub代码、重算ASAR完整性哈希等步骤成功解决问题。最终生成的Co

3514

数据分析案例-电影数据可视化分析

数据介绍数据为2011-2021电影数据可视化分析首先导入本次项目需要的包和数据 数据预处理 可视化

m0_64336780的博客 2万+

Proguard代码混淆-springboot3

本文,是在springboot3项目中实操proguard用法,其中项目使用maven工具管理依赖文件,项目采用父子modal的多modal形式,最终打包成了一个主modal文件,即整个工程最终通过一个jar文件来运行。

lixiaotao_1的博客 1169

YOLOv5改进系列(4)——添加ECA注意力机制

手把手教你在YOLOv5中加入ECA注意力机制,文内含两种方法,小白也能看懂!

路人贾的博客 8546

Proguard Spring Boot 示例项目教程

Proguard Spring Boot 示例项目教程 项目介绍 proguard-spring-boot-example 是一个展示如何在 Spring Boot 项目中使用 Proguard 进行代码混淆的示例项目。Proguard 是一个强大的工具,用于混淆和优化 Java 字节码,可以有效保护代码不被轻易反编译。 项目快速启动 环境准备 JDK 1.8 或更高版本 Maven 3.x G...

gitblog_00955的博客 403

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 812

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

保护你的Spring Boot应用:代码混淆示例项目推荐

保护你的Spring Boot应用:代码混淆示例项目推荐 【下载地址】SpringBoot代码混淆示例 本项目是一个基于Spring Boot的Java工程,通过ProGuard工具实现了代码混淆。代码混淆是一种保护代码安全性的技术,通过将代码中的类名、方法名等进行重命名,使得反编译后的代码难以阅读和理解,从而提高代码的...

gitblog_09780的博客 450

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【JAVA】Springboot集成Proguard完成jar包混淆

​Proguard混淆源码的作用在于能够在不影响服务能力的前提下紊乱jar包内的源码,能够极大的降低代码可读性。对于研发而言,反编译后使用的成本过高,还不如直接自己重新写,所以它其实也算是满足了代码安全性的要求。 本文章能够提供最为直接的配置,降低研发人员的学习成本。 ​

xbl的博客 4321

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Proguard Spring Boot Maven 插件示例项目常见问题解决方案

Proguard Spring Boot Maven 插件示例项目常见问题解决方案 项目基础介绍 该项目是一个Proguard Spring Boot Maven插件的示例项目,主要展示了如何在Spring Boot项目中使用Proguard进行代码混淆。项目主要使用的编程语言是Java。 新手常见问题及解决步骤 问题一:如何配置项目的Java版本 问题描述: 在使用该项目时,新手可能会遇到配置J...

gitblog_00464的博客 323

使用SpringBoot + Maven + ProGuard进行代码混淆

使用SpringBoot + Maven + ProGuard进行代码混淆

weixin_56637697的博客 2273

Java代码混淆-proguard

Java代码混淆防止反编译

qq_45699784的博客 1768
上一篇: springboot集成mybaits打印sql执行时间
下一篇: docker使用java:8-alpine构建java最小运行环境
蓝色格子
博客等级 码龄9年 129粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值