Java之代码混淆插件ProGuard使用及说明
更新时间:2026年04月07日 09:06:20 作者:enjoy嚣士
本文介绍了使用ProGuard对Java项目进行代码混淆,以保护业务逻辑,详细说明了Maven项目配置、ProGuard版本及使用方法,强调了生成的jar包与mapping.txt文件需对应的重要性
背景
接之前的文章,用java实现了C++库函数,并对外提供接口,但是Java可以反编译看到源码业务逻辑等,所以决定使用代码混淆功能,虽然混淆之后也能看到业务逻辑,但是增加了难度而已。
环境
- maven项目管理
- Java 1.8
- proguard 2.7.0
pom配置
<!-- ProGuard 混淆插件 -->
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jsse.jar</lib>
</libs>
<obfuscate>true</obfuscate>
<attach>false</attach>
<options>
########################################
# 不做裁剪和优化(SDK必须)
########################################
<option>-dontoptimize</option>
<option>-dontshrink</option>
<option>-dontwarn</option>
########################################
# 保留对外 API
########################################
<option>
-keep public class org.test.api.** { *; }
</option>
########################################
# 内部实现允许混淆
########################################
<option>
-keep,allowobfuscation class org.test.internal.** { *; }
</option>
########################################
# Java 8 必须保留
########################################
<option>-keepattributes Signature</option>
<option>-keepattributes *Annotation*</option>
<option>-keepattributes Exceptions</option>
<option>-keepattributes InnerClasses</option>
<option>-keepattributes EnclosingMethod</option>
<option>-keepattributes BootstrapMethods</option>
########################################
# 枚举安全
########################################
<option>
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
</option>
########################################
# 序列化安全
########################################
<option>
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
}
</option>
########################################
# 混淆强度增强
########################################
<option>-allowaccessmodification</option>
<option>-overloadaggressively</option>
<option>-useuniqueclassmembernames</option>
<option>-flattenpackagehierarchy</option>
########################################
# 输出 mapping, 方便调试
########################################
<option>-printmapping target/mapping.txt</option>
<option>-keepattributes LineNumberTable</option>
</options>
</configuration>
</plugin>说明
生成的 jar包 和 target/mapping.txt 文件要对应起来,防止出问题无法定位到问题点。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot Actuator未授权访问漏洞修复详解
这篇文章主要介绍了SpringBoot Actuator未授权访问漏洞修复详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08
IntelliJ IDEA2020.1版本更新pom文件自动导包的方法
这篇文章主要介绍了IntelliJ IDEA2020.1版本更新pom文件自动导包的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-06-06


最新评论