当前位置: 首页 > news >正文

【JAVA】Springboot集成Proguard完成jar包混淆

目录

一、需求背景

二、具体实现


一、需求背景

某些情况下需要将jar包交付给第三方,担心第三方会将代码进行反编译,故需要将jar包进行处理。

jar包源码混淆工具有多种,但真正能投入使用的产品并不多。

比如 ClassFinal (ClassFinal: Java字节码加密工具),国内开发者做的jar包加密工具,已经停止维护好几年了,它需要另外提供一个加密包做处理。它其实是一个加密方案,更注重安全性,但它并不是一个很好的使用方案。毕竟jvm的特点就是可移植性,本身就应该是一个容易使用的东西,谁还愿意带个“挂件”走呢?

Proguard(GitHub - Guardsquare/proguard: ProGuard, Java optimizer and obfuscator) 混淆源码的作用在于能够在不影响服务能力的前提下紊乱jar包内的源码,能够极大的降低代码可读性。对于研发而言,反编译后使用的成本过高,还不如直接自己重新写,所以它其实也算是满足了代码安全性的要求。

需要注意的是,它是一个java产品,并不是一个spring的产品,所以它对spring相关注解并不支持,它并不会特殊对待springboot。但是现有的java项目有几个不是spring?所以它很需要开发人员进行定制化处理,这块的成本很高,特别是对于不熟悉这项产品的开发人员。

这里尽量提供一个最简单、最直接、开箱可用的使用方案。

二、具体实现

Proguard核心内容是两个配置文件,一个pom.xml、一个proguard.cfg,这里提供最关键的两个能够直接使用的配置文件内容,其余的配置相关描述可以通过文末的参考文献获取。

pom.xml 配置文件 (注意:它必须要放到spring-boot-maven-plugin上面):

<plugin><groupId>com.github.wvengen</groupId><artifactId>proguard-maven-plugin</artifactId><version>2.5.3</version><executions><execution><phase>package</phase><goals><goal>proguard</goal></goals></execution></executions><configuration><proguardVersion>${proguard.version}</proguardVersion><injar>${project.build.finalName}.jar</injar><outjar>${project.build.finalName}.jar</outjar><obfuscate>true</obfuscate><proguardInclude>${project.basedir}/proguard.cfg</proguardInclude><libs><lib>${java.home}/lib/rt.jar</lib><lib>${java.home}/lib/jce.jar</lib></libs></configuration><dependencies><dependency><groupId>com.guardsquare</groupId><artifactId>proguard-base</artifactId><version>7.2.1</version></dependency></dependencies>
</plugin>

proguard.cfg:

-target 1.8
-keepdirectories
-dontoptimize#不做收缩,这个参数很关键,否则会丢掉一些源码,springboot很多组件会受影响
-dontshrink-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod,MethodParameters-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
-allowaccessmodification#对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames#保留包名
-keeppackagenames#保留Serializable序列化的类不被混淆
#例如传入/输出的Bean属性
-keepclassmembers class * implements java.io.Serializable {*;}-keepnames interface ** { *; }
-keep interface * extends * { *; }
-keepclassmembers enum * { *; }-keepclassmembers class * {@org.springframework.context.annotation.Bean *;@org.springframework.beans.factory.annotation.Autowired *;@org.springframework.beans.factory.annotation.Value *;@org.springframework.stereotype.Service *;@org.springframework.stereotype.Component *;
}-keep @org.aspectj.lang.annotation.Aspect class *{*;}#应用特性不能被混淆的代码
-keep public class com.mgtv.mcp.RunApplication {*;}
-keep class com.mgtv.mcp.annotation.** {*;}
-keep class com.mgtv.mcp.common.** {*;}
-keep class com.mgtv.mcp.config.** {*;}
-keep class com.mgtv.mcp.converter.** {*;}
-keep class com.mgtv.mcp.pojo.** {*;}
-keep class com.mgtv.mcp.controller.** {*;}
-keep class com.mgtv.mcp.dao.** {*;}
-keep class com.mgtv.mcp.provider.model.** {*;}
-keep class com.mgtv.mcp.provider.request.** {*;}
-keepclassmembers class com.mgtv.mcp.controller.** {*;}#-ignorewarnings

参考文献:

https://www.cnblogs.com/strongmore/p/18026443

https://blog.51cto.com/u_13675550/6077539

http://www.lryc.cn/news/323416.html

相关文章:

  • 全流程ArcGIS Pro技术应用
  • 4.windows ubuntu 子系统:微生物宏基因组测序和分析流程概括。
  • S2-066分析与复现
  • 让天下没有难学的大模型!我整理一份大模型技术知识图谱!
  • 大屏动效合集更更更之实现百分比环形
  • 基于springboot的反诈宣传平台
  • 面试算法-82-不同路径
  • 阿里云ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘
  • Java基础知识总结(13)
  • 杰发科技AC7801——Keil编译的Hex大小如何计算
  • opengl 学习(六)-----坐标系统与摄像机
  • 分库分表场景下多维查询解决方案(用户+商户)
  • vue学习日记14:工程化开发脚手架Vue CLI
  • java Flink(四十三)Flink Interval Join源码解析以及简单实例
  • JsonUtility.ToJson 和UnityWebRequest 踩过的坑记录
  • 面试算法-69-三角形最小路径和
  • 流畅的 Python 第二版(GPT 重译)(九)
  • 单片机学到什么程度才可以去工作?
  • 内网穿透方案
  • WordPress菜单函数wp_nav_menu各参数
  • 类于对象(上)--- 类的定义、访问限定符、计算类和对象的大小、this指针
  • 提升交付效率:Booking.com 金融技术团队的成功实践
  • 【消息队列开发】 实现ConsumerManager类——消费消息的核心逻辑
  • 【Three.js】使用精灵图Sprite创建面朝相机的文本标注
  • C++中的类模板
  • 【每日一题】好子数组的最大分数
  • Vue2(七):超详细vue开发环境搭建(win7),nodejs下载与安装,安装淘宝镜像(报错已解决),配置脚手架
  • 【Web】记录CISCN 2021 总决赛 ezj4va题目复现——AspectJWeaver
  • 视频技术1:使用ABLMediaServer推流rtsp
  • HTML5+CSS3+JS小实例:创意罗盘时钟