范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

基于Maven的SpringBoot工程中,如何进行Java代码混淆?

  前言
  代码混淆,是将计算机程序的代码转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。  为什么要做代码混淆?
  代码混淆的主要目的是为了保护源代码,阻止反向工程。反向工程会带来许多问题,诸如知识产权泄露,程序弱点暴露易受攻击等。使用即时编译技术的语言,如Java、C#所编写的程序更容易受到反向工程的威胁。 但是代码混淆并不能真正阻止反向工程,只能增大其难度。因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。  还可以通过代码虚拟化,代码加密,压缩等多种方式来提高代码的安全性。  代码混淆有哪些方式?将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成"__"这样的符号,使得阅读的人无法根据名字猜测其用途。  重写代码中的部分逻辑,将其变成功能上等价但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。  打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。  如何对 JAVA 代码进行混淆?在生成class文件的过程中(即编译过程),通过修改编译器的代码生成过程,对编译器生成的中间代码进行混淆,最后生成class文件。典型的是jocky,但目前最新的jocky为1.0.3版本,不支持jdk1.6。  在生成class文件后,对class文件进行混淆。典型的是proguard、retroguard。但由于并不是所有的class文件都需要混淆,所以将面临复杂的配置工作(配置哪些类需要混淆,哪些类需要混淆),并且程序一旦修改,配置工作又要重新进行。  如何使用proguard进行代码混淆?
  主要使用proguard-maven-plugin插件对springboot代码进行混淆。插件配置如下:                                      com.github.wvengen             proguard-maven-plugin             2.3.1                                                                        package                                                                       proguard                                                                                 6.2.2                                  classes                 ${project.build.finalName}.jar                                  ${project.build.directory}                                      ${java.home}/lib/rt.jar                     ${java.home}/lib/jce.jar                                                   true                                                                                                      false                                  ../proguard.cfg                                                                net.sf.proguard                     proguard-base                     6.2.2                                             
  其中外部配置文件proguard.cfg内容如下:  # -keep {Modifier} {class_specification} 防止类和成员被移除或者被重命名 # -keepclassmembers {modifier} {class_specification} 防止成员被移除或者被重命名 # -keepclasseswithmembers {class_specification} 防止拥有该成员的类和成员被移除或者被重命名 # -keepnames {class_specification} 防止成员被重命名 # -keepclasseswithmembernames {class_specification} 防止拥有该成员的类和成员被重命名 # -keepclasseswithmembers # -basedirectory directoryname  在配置文件中出现的相对路径均是相对于该路径     # 忽略所有警告,否则有警告的时候混淆会停止 -ignorewarnings # JDK目标版本1.8 -target 1.8 # 不做收缩(删除注释、未被引用代码) -dontshrink # 不做优化(变更代码实现逻辑) -dontoptimize # 不路过非公用类文件及成员 -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers # 优化时允许访问并修改有修饰符的类和类的成员 -allowaccessmodification # 确定统一的混淆类的成员名称来增加混淆 -useuniqueclassmembernames # 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有大量固定写法的包名 -keeppackagenames # 不混淆局部变量名 -keepparameternames # 不混淆所有特殊的类 LocalVariable*Table, -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,Synthetic,EnclosingMethod # 不混淆包下的所有类名 -keep class weg.base.** { ; } -keep class weg.service.** { ; } -keep class weg.dao.** { ; } -keep class weg.util.** { ; } # 不混淆quartz包下的所有类名,且类中的方法也不混淆 -keep class weg.quartz.** { ; } # 不混淆model包中的所有类以及类的属性及方法,实体包,混淆了会导致ORM框架及前端无法识别 -keep class weg.model.** {*;} # 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射 -keepclassmembers public class * {void set*(***);*** get*();} # 保持类protected不被混淆 -keep public class * { public protected ;public protected ; }
  配置完成后执行maven命令:  clean package -DskipTests
  执行上述代码后,在target目录下会生成3个文件:  classes.jar 混淆后的classes文件,里面包含完整的项目结构  proguard_map.txt 混淆内容的映射  proguard_seed.txt 参与混淆的类  踩坑指南(1) 报错如下:Error: You have to specify "-keep" options if you want to write out kept elements with "-printseeds".
  解决方式:根据需求 配置 -keep 要保留的元素  (2)../proguard.cfg配置文件未生效
  解决方式:是因为路径写的有问题,此路径是相对于 编译后的 target 文件的路径,如果是maven多模块,这些配置又写在父模块的目录下,重点来了,想要混淆子模块的代码,那么这个路径就是相对于子模块的target文件夹的路径  (3)打包之后不知道混淆成功了没,或者混淆配置生效了没,查看这个jar包里的代码又很麻烦
  解决方式:outjar配置一个目录即可。如果要上传私服,打包之后却有两个包,混淆的那个包无法直接上传私服,那么outjar配置的jar包名称和${project.build.finalName}一致,即可覆盖。然后一键轻松上传私服。   ${project.build.finalName}.jar

路人入手华为的手机和平板2021年12月我入手了一台华为matepadpro12。6和一台华为mate40Pro5G,在这之前我从来没有用过华为的任何产品,说实话我以前老是觉得上了年纪的人才会用华为呢!这中端手机霸主iPhoneSE3将至,分析师今年能卖3000万部苹果将在北京时间的明天凌晨两点召开春季发布会,这次发布会上将带来全新的智能手机iPhoneSE2022,这是SE系列的第三款智能手机上一款产品还是发布于2020年的iPhoneSE为何多数人都不喜欢壁挂洗衣机?它到底是智商税还是真实用?壁挂洗衣机轻便小巧,不占空间,问世后备受吹捧。但不可否认的是,波轮和滚筒洗衣机,仍旧是多数家庭的首选。这也难免让人疑惑为何壁挂洗衣机不受欢迎?它到底是智商税还是真实用呢?今天就给大配助听器后效果一直不好要怎么办?配助听器后效果一直不好要怎么办?你好,助听器佩戴效果不佳,建议到验配中心具体描述听得不好的情况,请验配师进行调整,调整后做一个效果评估。另外要看一下机器的档次等级是否能满足您的需求理想L9即将上市,只卖50万,全尺寸SUV市场是否会重新洗牌一说到理想大家肯定会想到理想ONE这款新能源增程式SUV,在3月3号得知了消息,理想L9即将在北京车展亮相。目前在北京已经可以看到理想L9的试装车在路上。新车定位于大型全尺寸SUV如何编写产品说明文档?先介绍一下。1。什么是产品说明书产品说明书是指导用户选择产品使用产品的路标和向导,它可以帮助用户了解产品特性,确保用户正确安全地使用产品。2。产品说明书的作用向消费者介绍产品的性质国产5G手机售价便宜,性能比肩iPhone,苹果为抢市场推低端产品近日各大电商平台公布了近一年来最畅销的中端国产5G手机,其中有三款机型最引人注目,这三款手机都属于5G系列,同时每一款的销量都超过100万部,远远领先同级别产品。第一款小米K40小明年的iPhone15,将全系取消刘海,采用双开孔设计今年只适用于iPhone14Pro系列预计苹果将于今年秋季上市的iPhone14Pro系列机型将取消屏幕刘海,而在屏幕上才有双开孔式的挖孔屏,同时预计双孔设计在明年将扩大到所有新i空调上的1匹是多少瓦?空调大小的选择,与4种因素有关空调应该选多大的?在面对这个疑问之前,你可能还有一个疑惑1匹空调代表的是什么?今天我们就这两个问题来深入探讨一下。空调上的匹和瓦当我们到商场去问导购这空调是多大的?你大概能听到两种AMD加持下SurfaceLaptop4表现如何?好了,我又来了。这次要和大家分享的这款采用AMD处理器的SurfaceLaptop4笔记本,这也是我多年后再次上手Surface系列产品。我最早用的还是SurfacePro4,正是美团终于变了,三天发布两则公告,骑手和商家乐了声明原创不易,禁止搬运,违者必究!在去年,美团这个我们常用的软件,备受关注。其中有两个热议的话题,一个是谈骑手的保障问题,另一个是二选一垄断,骑手和商家苦不堪言。而如今美团终于变了
周度猪价探底反弹,四季度猪肉行情可期?指数震荡,两市自上周五后继续全面反弹。如上周所述,能源化工锂电依旧是本轮反弹最活跃的方向。另外,北交所概念元宇宙等前期热点题材也助攻市场回暖。明日继续观察反弹的持续性。脱水回顾今日我今天看到的10张好照片(155)AlistairTaylorYoung这是这一系列的第155次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废我今天看到的10张好照片(151)AlistairTaylorYoung这是这一系列的第151次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废我今天看到的10张好照片(149)SebastianWells这是这一系列的第149次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废话不说,一我今天看到的10张好照片(156)RobinHammond这是这一系列的第156次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废话不说,一起逐我今天看到的10张好照片(153)AlistairTaylorYoung这是这一系列的第153次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废我今天看到的10张好照片(148)LauraPannack这是这一系列的第148次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废话不说,一起逐我今天看到的10张好照片(170)JolandaJolie这是这一系列的第170次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废话不说,一起逐我今天看到的10张好照片(172)ValerieSIX这是这一系列的第172次推送。逐相君每次会推送10张我今天看到的好照片。在你参观照片之前,我不愿意给照片加任何文字阐释。这可能会是一种干扰。废话不说,一起逐相V一款智能血糖仪的技术与人性在中国,糖尿病患者越来越多,相关机构预测,这已是一个60亿元规模的市场。但这个领域折射了中国医疗领域的一些现状,例如重治轻防,一个糖尿病患者由于平时没有很好地监控血糖,导致了糖尿病全部五星!2021CNCAP碰撞测试结果出炉很多人买车之前都想要了解自己选购车辆的安全性,国内目前有两大汽车安全碰撞测试机构,一个是人送外号五星批发部的中汽研CNCAP,一个则是被本田皓影差点撞没的中保研CIASI。日前,C