Spring Boot Java应用代码混淆介绍
本文简要介绍一下开源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
2. 浏览输出jar文件可以看到uxmod-1.0-SNAPSHOT.jar\BOOT-INF\lib不包含我们之前指定的-injars模块(bsmod.jar)。bsmod类与uxmod类合并到一起,混淆后的类在uxmod-1.0-SNAPSHOT.jar\classes
来源:华为云社区 作者:菊花茶
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- spring boot自动配置原理面试题_Spring boot面试
- Java基础知识点笔记(一):java中的取整与四舍五入
- java启动器_JAVA基础:Java 启动器如何查找类
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- 浅析Java多态_JAVA多态
- java softreference_Java引用总结–StrongReference、SoftReference、WeakReference、PhantomReference…[通俗易懂]
- 为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?
- Java项目分享-适合 Spring Boot 初学者的 OA 开源项目
- 什么是Java虚拟机_Java SDK
- Spring Boot | 集成MapStruct实现不同类型Java对象间的自动转换
- Spring Boot 3 将于 2022 年 11 月发布,延迟了对 Java 模块系统的支持
- 零基础上手丨在Spring Boot中整合热门Java技术
- Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍
- java spring boot 拦截器 实现未登录用户不能登录详解编程语言
- java spring boot Swagger2 构建api文档详解编程语言
- java spring boot @bean的用法详解编程语言
- 机制【Java与Redis整合实现过期机制】(redisjava过期)
- 市场Oracle公司助力Java攻克市场(oracle公司java)
- Java 开发提升Oracle数据库性能(java开发oracle)