Spring Boot Java应用代码混淆介绍

本文介绍开源Java混淆编译工具ProGuard的应用案例,阐述保护软件不被反编译的方法。重点记录用ProGuard对Spring Boot应用做混淆处理的主要步骤,如添加依赖、配置插件等,最后可运行混淆编译并验证应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文简要介绍一下开源Java混淆编译工具ProGuard的实际应用案例。

我们知道某些情况下软件的作者需要保护软件本身不被使用者反编译,或者给对方反编译制造一定的障碍,为了达到这个目的人们可以有很多不同的做法,比如在编译的过程中把一些变量名替换成无意义的abcd或者将类名方法打散等等,制造一些混乱让反编译的人很难读懂你的逻辑;还有一种是对java编译后的class文件加密,然后用自定义的classLoader去解密并加载到JVM,这种方式有个问题,一旦对方拿到你这个自定义的ClassLoader那么保密也就不存在了。相信类似的技术手段还有很多,用ProGuard对Spring Boot的应用做混淆处理,文末有示例代码,这里只记录主要步骤:

1.     添加混淆工具依赖到工程pom.xml

2.     添加proguard.conf到Spring boot应用

-       不包括 hibernate模型的字段或者隐式配置的列名

-       不包括 JpaRepository类的方法名

3.     配置proguard-maven-plugin

-       指定proguard.conf文件位置

-       添加java runtime包

<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>

-       指定想要混淆的模块名称,proguard maven 插件会将其转换成 –injar参数,比如:

<assembly>
<inclusions>
<inclusion>
<groupId>org.alext.learning</groupId>
<artifactId>bsmod</artifactId>
</inclusion>
</inclusions>
</assembly>

4.     Proguar会把所有injars合并到一个公共的混淆jar包,所以这里还需要把未混淆的jar从Spring boot的输出jar里面去掉,这里可以用spring-boot-maven-plugin来排除上一步指定的injars

<configuration>
<excludes>
<exclude>
<groupId>org.alext.learning</groupId>
<artifactId>bsmod</artifactId>
</exclude>
</excludes>
</configuration>

5.     运行混淆编译

mvn clean package -DskipTests=true -P obfuscation

6.     运行jar

java -jar uxmod/target/uxmod-1.0-SNAPSHOT.jar 

访问http://localhost:8085/验证应用

image.png

1.     浏览输出jar文件可以看到uxmod-1.0-SNAPSHOT.jar\BOOT-INF\lib不包含我们之前指定的-injars模块(bsmod.jar)。bsmod类与uxmod类合并到一起,混淆后的类在uxmod-1.0-SNAPSHOT.jar\classes

2.     浏览输出jar文件可以看到uxmod-1.0-SNAPSHOT.jar\BOOT-INF\lib不包含我们之前指定的-injars模块(bsmod.jar)。bsmod类与uxmod类合并到一起,混淆后的类在uxmod-1.0-SNAPSHOT.jar\classes

来源:华为云社区  作者:菊花茶

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值