Spring Boot Java应用代码混淆介绍

举报
菊花茶 发表于 2017/11/14 15:04:50 2017/11/14
【摘要】 本文简要介绍一下开源Java混淆编译工具ProGuard的实际应用案例。我们知道某些情况下软件的作者需要保护软件本身不被使用者反编译,或者给对方反编译制造一定的障碍,为了达到这个目的人们可以有很多不同的做法,比如在编译的过程中把一些变量名替换成无意义的abcd或者将类名方法打散等等,制造一些混乱让反编译的人很难读懂你的逻辑;还有一种是对java编译后的class文件加密,然后用自定义的classL

本文简要介绍一下开源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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。