建品牌网站公司,wordpress访问计数器,培训教育的网站怎么做,酒店品牌策划方案混淆技术研究笔记包含多篇内容#xff0c;记录了一次混淆的研究和应用的过程。 本文首发于 CSDN#xff0c;随后会发布在 MyBatis 微信公众号#xff0c;通过公众号可以免费阅读。 最近有一个 Java 的底层框架需要进行混淆#xff08;从原始的 Java 项目改造为了 Maven 多模… 混淆技术研究笔记包含多篇内容记录了一次混淆的研究和应用的过程。 本文首发于 CSDN随后会发布在 MyBatis 微信公众号通过公众号可以免费阅读。 最近有一个 Java 的底层框架需要进行混淆从原始的 Java 项目改造为了 Maven 多模块而且要实现和该框架以前一样的混淆和反篡改功能旧的打包配置我没权限看到为了实现这些功能开始了本系列的研究。
1. 常见工具介绍
第一节先来点简单的内容下面是通过 AI 生成的几款常见的混淆工具简介及对比。
ProGuard
优点: 使用广泛集成在 Android Studio 中方便使用。可以缩减代码大小提高加载效率。
缺点: 主要针对 Java混淆效果一般。配置复杂需要处理好白名单。
yGuard
优点: 专门为Android应用设计混淆效果好。可完全混淆资源文件。
缺点: 学习成本较高文档不完善。
Bangcle
优点: 无需配置文件操作简单。支持多种语言的混淆。 缺点: 仅支持在线混淆需要上传源码有安全风险混淆效果一般。
Allatori
优点: 支持多语言混淆效果强配置简单。
缺点: 收费昂贵无法定制规则。
总体来说
YGuard 和 ProGuard 在 Android 混淆中用得较多前者混淆效果较好后者使用简单成熟。商业工具混淆效果好但昂贵。所以可以根据需要在这些工具中选择。
我以前用过几次 ProGuard也知道 yGuard。所以一开始先把 ProGuard 的配置拿来试了试发现不适合多模块项目的混淆又了解一下 yGuard发现也不适合多模块混淆但是看到下面的配置时直觉告诉我这种配置方式大概率能够实现多模块混淆。
inoutpair in..\modle-b\target\modle-b-${project.version}.jarout..\modle-b\target\modle-b-${project.version}.jar/yGuard确实能实现多模块混淆也方便和CI/CD流程结合因此本文后续内容使用的 yGuard 混淆工具。
什么是多模块混淆
常见的这些工具如果在 Maven 中使用就只能针对一个模块进行混淆例如下面的项目
module-parent
├─module-a
├─module-b
└─module-c一般只能分别对abc进行混淆我称这种为单模块混淆。
模块之间如果存在调用关系就要把需要暴露的接口配置为不混淆否则混淆后互相不认识就无法调用了这是单模块混淆的最大特点如果需要被调用一定会暴露入口。
多模块混淆就不一样在混淆的时候abc一起混淆如果最终对外暴露的是a中的接口那么bc中的所有代码都可以被混淆也就是bc无法被单独调用和a一起的时候a可以正常调用a中和bc有关的调用都是混淆后的代码这种方式相对单模块混淆更安全暴露的细节更少。如果软件中有授权相关的重要代码通过多模块混淆可以更彻底的混淆然后混入到其他模块中。