关于maven代码混淆插件配置
文章目录
参考链接:
- 代码混淆1:https://blog.csdn.net/piaoyunlive/article/details/129676378
- 代码混淆2:https://blog.csdn.net/m0_57042151/article/details/127507097
1、在pom.xml
文件中添加代码混淆插件proguard-maven-plugin
<build>
<plugins>
<!-- 代码混淆插件 -->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.6.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
</configuration>
</plugin>
<!-- maven打包插件,可用于指定java -jar命令启动后的main类 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!-- 这里修改成项目工程中的main类!!! -->
<mainClass>com.drgn.SecurityApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意:proguard-maven-plugin
和pring-boot-maven-plugin
两个插件的顺序不能颠倒,否则会报错!!!
2、在工程根目录下添加proguard.cfg
配置文件
# 指定Java的版本
-target 8
# proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等
-dontshrink
# 是否关闭字节码级别的优化,如果不开启则设置如下配置
-dontoptimize
# 混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
# 对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
# 混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
# 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings
# 对异常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此选项将保存接口中的所有原始名称(不混淆)-->
-keepnames interface ** { *; }
# 此选项将保存所有软件包中的所有原始接口文件(不进行混淆)
#-keep interface * extends * { *; }
# 保留参数名,因为控制器,或者Mybatis等接口的参数如果混淆会导致无法接受参数,xml文件找不到参数
-keepparameternames
# 保留枚举成员及方法
-keepclassmembers enum * { *; }
# 不混淆所有类,保存原始定义的注释-
#-keepclassmembers class * {
# @org.springframework.context.annotation.Bean *;
# @org.springframework.beans.factory.annotation.Autowired *;
# @org.springframework.beans.factory.annotation.Value *;
# @org.springframework.stereotype.Service *;
# @org.springframework.stereotype.Component *;
# }
# 忽略warn消息
-ignorewarnings
# 忽略note消息
-dontnote
# 打印配置信息
-printconfiguration
-keep public class com.drgn.SecurityApplication { # 这里修改成项目工程中的main类!!!
public static void main(java.lang.String[]);
}
3、执行如下命令,打包
mvn clean package -DskipTests
4、下载Java反编译工具JD-GUI
参考链接:https://blog.csdn.net/BASK2311/article/details/127567314
下载链接为:http://java-decompiler.github.io/,选择适合的版本进行下载安装。
我下载的是windows版本,下载后的文件为jd-gui-windows-1.6.6.zip
,解压后,运行jd-gui.exe
即可。
5、导入jar包,校验混淆情况
在jd-gui中导入maven打包好的jar包,jar包存放在工程项目中的target文件夹中。
如下,可以看到代码做了一定程度的混淆,混淆效果自行调整。
6、运行jar包(关键)
参考:https://developer.huawei.com/consumer/cn/forum/topic/0202750575839150382?fid=23
当前工程是spring-boot工程,虽然代码做了混淆,但是为防止混淆后的bean名冲突,需要通过运行java -jar xx.jar
命令来确定jar包是否可用。如能流畅运行,则确定代码混淆真正成功;否则需要调整bean名避免冲突。