Spring Boot Java应用代码混淆介绍
【摘要】 本文简要介绍一下开源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/验证应用
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)