[进来复制]springboot项目代码混淆,帮你安排的明白的混淆代码!
首先感谢俩篇博文博主本文是基于以下俩个博文进行的,楼主也是忙活了大半天整这个混淆,本以为可以快速完成的,没成想耗时耗力。
详细的springboot结合proguard做代码混淆,感谢。
其他博主的踩坑锦集,感谢。
- 踩坑锦集
1.Caused by: org.apache.maven.plugin.MojoExecutionException: Obfuscation failed (result=1)
这个错误最常见 其实使用mvn插件最常见的错误都是这个的,使用插件失败,其实没什么用 可以使用mvn clean package -e -X
看的完整点 最主要的错误在这个异常上面 程序执行proguard插件抛出的异常
2.java.io.IOException: You have to specify '-keep' options for the shrinking step
3. proguard插件版本不兼容问题 百度搜的好多博文因为年代久远会出现版本跟jdk1.8不兼容https://mvnrepository.com
mvn 地址贴出来 方便大家去改最新版
4. 还要好多就不写了直接贴代码 需要更改的地方会加备注
<build><!-- 编译后的jar名称 可自定义 --><finalName>test-1.2.0-SNAPSHOT</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 代码混淆插件 --><plugin><dependencies><dependency><groupId>net.sf.proguard</groupId><artifactId>proguard-base</artifactId><!-- 2019年7月15日 jdk1.8 兼容性还可以 --><version>6.0.2</version><scope>runtime</scope></dependency></dependencies><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifactId><!-- 2019年7月15日 jdk1.8 兼容性还可以 --><version>2.0.14</version><executions><execution><!-- 混淆时刻,这里是打包的时候混淆 --><phase>package</phase><goals><!-- 使用插件的什么功能,当然是混淆 --><goal>proguard</goal></goals></execution></executions><configuration><!-- 是否将生成的PG文件安装部署 --><attach>true</attach><!-- 是否混淆 --><obfuscate>true</obfuscate><!-- 指定生成文件分类 --><attachArtifactClassifier>pg</attachArtifactClassifier><!-- ProGuard配置参数(可引用cfg配置文件) --><options><!-- JDK目标版本1.8--><option>-target 1.8</option><!-- 不做收缩(删除注释、未被引用代码) --><option>-dontshrink</option><!-- 不做优化(变更代码实现逻辑) --><option>-dontoptimize</option><!-- 不路过非公用类文件及成员 --><option>-dontskipnonpubliclibraryclasses</option><option>-dontskipnonpubliclibraryclassmembers</option><!--不用大小写混合类名机制--><option>-dontusemixedcaseclassnames</option><!-- 优化时允许访问并修改有修饰符的类和类的成员 --><option>-allowaccessmodification</option><!-- 确定统一的混淆类的成员名称来增加混淆 --><option>-useuniqueclassmembernames</option><!-- 不混淆所有包名,整体混淆会出现各种各样的问题 程序又不会把你该引用的地方引用好 会直接修改类名 参数名的 建议不去除 有这个标签的话 <option>-keep class !com.package.** { *; }</option> 加入这个标签的报包名程序才会修改 --><option>-keeppackagenames</option><option>-adaptclassstrings</option><!-- <option>-keepdirectories</option> --><!-- 不混淆所有特殊的类 --><option>-keepattributesExceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option><!-- This option will save all original methods parameters in files definedin -keep sections, otherwise all parameter names will be obfuscate. --><option>-keepparameternames</option><option>-keepclassmembers class * {@org.springframework.beans.factory.annotation.Autowired *;@org.springframework.beans.factory.annotation.Value *;}</option><!-- 混淆这个包下的类 此处需要更改为自己需要混淆的包名--><option>-keep class !com.package.service.** { *; }</option><!-- 不混淆main方法 此处需要更改为自己的启动类路径 --><option>-keep class com.package.Application { *; }</option><!-- 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射 --><option>-keepclassmembers public class * {void set*(***);*** get*();}</option><!-- 不混淆包中的所有类以及类的属性及方法,实体包,混淆了会导致ORM框架及前端无法识别 --><!-- 不对包类的类名进行混淆,但对类中的属性和方法混淆 --><!--<option>-keep class com.package.util.** </option>--><!-- <option>-keep class com.example.service.** </option>--><!-- 不混淆包下的所有类名,且类中的方法和属性也不混淆 楼主已经把它注掉了 因为没用到 --><!--<option>-keep class com.example.redis.** { *; }</option><option>-keep class com.example.domain.** { *; }</option><option>-keep class com.example.dto.** { *; } </option><option>-keep class com.example.config.**{ *; }</option><option>-keep class com.example.dao.** { *; }</option>--><!-- 无视跳过警告 因为修改代码的过程程序检测到有些文件不能更改就会报警告导致失败 如果对自己写的代码比较有信心的话可以直接无视 --><option>-dontwarn **</option></options><!--class 混淆后输出的jar包 --><outjar>${project.build.finalName}-pg.jar</outjar><!-- 混淆时需要引用的java库,这些库的类不会做混淆 --><libs><lib>${java.home}/lib/rt.jar</lib><lib>${java.home}/lib/jce.jar</lib></libs><!-- 需要做混淆的jar或目录 --><injar>classes</injar><!-- 输出目录 --><outputDirectory>${project.build.directory}</outputDirectory></configuration></plugin></plugins></build>
楼主导入plugins后jar包一些部分标红 idea点击build-> rebuild project 重新变一下试下。其他的编码软件不清楚
然后 需要在同级目录下建个proguard.cfg 文件
里面的内容要跟pom文件对应
pom中option标签中的都要在文本中再体现一次 比如加了
<option>-keep class com.example.domain.** { *; }</option>
文本里就要加-keep class com.example.domain.** { *; }
# JDK目标版本1.8
-target 1.8
# 不做收缩(删除注释、未被引用代码)
-dontshrink
# 不做优化(变更代码实现逻辑)
-dontoptimize
-ignorewarnings
# 不路过非公用类文件及成员
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontusemixedcaseclassnames
# 优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
# 确定统一的混淆类的成员名称来增加混淆
-useuniqueclassmembernames
# 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有 大量固定写法的包名
-keeppackagenames
-adaptclassstrings
# -keepdirectories
# 不混淆所有特殊的类
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
# This option will save all original methods parameters in files defined in -keep sections, otherwise all parameter names will be obfuscate.
-keepparameternames
-keep interface * extends * { *; }
-keepclassmembers class * {@org.springframework.beans.factory.annotation.Autowired *;@org.springframework.beans.factory.annotation.Value *;}# 混淆这个包下的类 此处需要更改
-keep class !com.package.service.** { *; }
-dontwarn **
# 不混淆main方法
-keep class com.package.Application { *; }# 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射
-keepclassmembers public class * {void set*(***);*** get*();}# 不对包类的类名进行混淆,但对类中的属性和方法混淆# 不混淆包下的所有类名,且类中的方法和属性也不混淆
执行mvn clean package
成功后 target目录
classes-pg.jar 是编译后的代码jar war里面的class文件还是没有变动的 ,是先生成的war才执行的mvn插件 可以手动更换。
更换class步骤
- 下载windowsrar
- 打开classes-pg.jar 把里面的文件拽出来 建个文件夹classes
- 打开war 在WEB-INF里面把classes文件替换掉就可以了
[进来复制]springboot项目代码混淆,帮你安排的明白的混淆代码!相关推荐
- 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)
说到登录注册,就会想到先要注册一个用户名,在进行登入,但是现在大多数的网站都集成了微信登入,不需要注册,给你一个二维码,微信一扫直接登录.这确实是十分便捷的.所以我们会尽量在项目中实现这一功能.减少用 ...
- SpringBoot项目中华为云 内容审核的使用(内附代码)
前段时间在做一个在线社交的项目,里面就有一个用户发布动态的功能,发布动态就需要审核,于是我就选择了华为云来对用户发布的动态进行审核,以下附上华为云的地址 华为云-内容审核 内容审核_内容检测 _内容风 ...
- springboot项目代码混淆和反编译教程·附软件连接
对springboot项目进行代码混淆,可以防止别人通过反编译项目查看代码,即使反编译了查看的也是混淆后的看不懂的代码. 一定程度保证了项目源码安全性. 下面分享代码混淆步骤和反编译操作 Allato ...
- 驱动、MFC项目改名、代码移植技巧,复制别人项目中的界面资源以及合并项目
驱动.MFC项目改名.代码移植技巧,复制别人项目中的界面资源以及合并项目 驱动.MFC项目改名.代码移植技巧 复制别人项目中的界面资源 还有一种方法 双击项目中的*.rc文件,打开vs后无反应,无法打 ...
- Springboot 项目启动后执行某些自定义代码
Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...
- 解决新建springboot项目时包导不进来的问题sun.security.provider.certpath.SunCertPathBuilderException: unable to f,已解决
原文地址:因为不是csdn社区的,所以直接复制过来了 http://www.fungnotl.cn/2020/02/24/%E7%9C%9F%E6%AD%A3%E8%A7%A3%E5%86%B3Cou ...
- 【SpringBoot】 SpringBoot项目常用代码配置
[SpringBoot] SpringBoot项目常用代码配置 1. MyBatis Plus 1.1 分页插件 MP的分页插件几乎每个项目都拥有,基本代码配置如下: @Configuration p ...
- docker jdk mysql_docker部署springboot前后端分离项目(jdk+jar包+mysql+redis+nginx)(示例代码)...
jdk1.8,dockerfile文件 1.vim jdk-dockerfile ? FROM centos:7 MAINTAINER sinvie.cn WORKDIR /usr RUN mkdir ...
- 创建一个SpringBoot项目
Spring的诞生是为了简化JAVA程序的开发的 快速开发Spring而诞生的 SpringBoot为了快速开发Spring而诞生的一个框架 1)什么是SpringBoot?为什么要学它?(重要) S ...
最新文章
- UVa 11729 - Commando War(贪心算法)
- Oracle Eneterprise Linux 5.8上安装Database 12c
- 13.6 Thread类自定义线程类
- 利用 MongoDB 和 Solr 实现全文搜索
- memcached与spring集成
- Android中通过自定义签名控件实现手写签名
- oracle 其他表空间,Oracle查询表空间使用情况以及其他查询
- Python 之父退休,C 语言之父与世长辞,各大编程语言创始人现状大曝光!
- php通过函数怎么禁止百度蜘蛛抓取,怎么屏蔽百度蜘蛛抓取网站?
- STM32 ARM调试问题总结
- android数据绑定_Android RecyclerView数据绑定
- DB: 20 个数据库设计最佳实践
- rose双机热备mysql,实战:ROSE HA双机热备系统安装指南
- Kamailio nats模块编译
- Excel VBA中的If,Select循环语句
- The following assertion was thrown building LayoutDemo(dirty): A non-null String must be provided to
- 计算机窗口移动不了怎么办,手把手为你解决笔记本电脑怎么拖动窗口
- 一、Java环境介绍
- 深入了解Allennlp细
- 镜像法的理解——工程电磁场 P9
热门文章
- LeetCode《算法入门》刷题笔记(31 题全)
- addr2line查看死机代码的位置
- 梯度、雅克比矩阵、海森矩阵、多元泰勒公式
- js 跨域访问问题解决方法
- VS(Visual Studio)工具介绍
- 联想笔记本键盘亮屏幕不亮_机械师笔记本电脑屏幕不亮但键盘亮,而且开不开机维修...
- Java笔记:抽象类和接口
- eset找不到服务器更新失败,eset nod32无法更新的解决办法-整理常见的nod32更新问题!...
- Mac解决端口号被占用
- 全球挑战赛-公开通用语言源代码,再无他人能懂运行原理