混淆技术研究笔记(一)常见工具介绍

logo

混淆技术研究笔记包含多篇内容,记录了一次混淆的研究和应用的过程。

本文首发于 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}.jar"out="..\modle-b\target\modle-b-${project.version}.jar"/>

yGuard确实能实现多模块混淆,也方便和CI/CD流程结合,因此本文后续内容使用的 yGuard 混淆工具。

什么是多模块混淆?

常见的这些工具如果在 Maven 中使用,就只能针对一个模块进行混淆,例如下面的项目:

module-parent
├─module-a
├─module-b
└─module-c

一般只能分别对a,b,c进行混淆,我称这种为单模块混淆。

模块之间如果存在调用关系,就要把需要暴露的接口配置为不混淆,否则混淆后互相不认识就无法调用了,这是单模块混淆的最大特点,如果需要被调用,一定会暴露入口。

多模块混淆就不一样,在混淆的时候,a,b,c一起混淆,如果最终对外暴露的是a中的接口,那么b,c中的所有代码都可以被混淆,也就是b,c无法被单独调用,和a一起的时候,a可以正常调用,a中和b,c有关的调用都是混淆后的代码,这种方式相对单模块混淆更安全,暴露的细节更少。如果软件中有授权相关的重要代码,通过多模块混淆可以更彻底的混淆,然后混入到其他模块中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

logback.xml springboot 项目通用logback配置,粘贴即用,按日期生成

<configuration scan"false" scanPeriod"10 seconds"><!-- 定义日志存放的根目录 --><property name"log.dir" value"./logs" /><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord"clr&q…

究竟是什么样的讲解二分查找算法的博客让我写了三小时???

版本说明 当前版本号[20230926]。 版本修改说明20230926初版 目录 文章目录 版本说明目录二分查找基础版算法描述分步演示情况一&#xff1a;能在有序数组找到待查值情况二&#xff1a;不能在有序数组找到待查值 翻译成代码基础版代码&#xff08;包括测试类&#xff09;疑惑…

MySQL 事件

文章目录 1.简介2.事件调度器3.创建事件4.查看事件5.修改事件6.删除事件参考文献 1.简介 MySQL 事件&#xff08;Event&#xff09;事件是根据时间表运行的任务&#xff0c;类似于 Unix crontab 和 Windows 定时任务。 一个事件可调用一次&#xff0c;也可周期性地启动。它由…

分布式微服务架构中的关键技术解析

分布式微服务架构是构建现代应用的理想选择&#xff0c;它将复杂系统拆分成小而自治的服务&#xff0c;每个服务都能独立开发、测试和部署。在实际的开发过程中&#xff0c;如何实现高效的分布式微服务架构呢&#xff1f;下面笔者根据自己多年的实战经验&#xff0c;浅谈实战过…

【C++ Efficiency】使用运算符的复合形式取代其单独形式,效率更高

//单独形式 x x y; x x - y; //也可以写为复合形式 x y; x - y;效率问题 一般而言&#xff0c;复合操作符比其对应的单独形式效率高&#xff1a;因为单独形式需要返回一个新的对象&#xff0c;就会产生一个临时对象的构造和析构成本&#xff0c;复合版本则是直接写入左…

【微信小程序】全局配置

1.全局配置文件及常用的配置项 Window 1&#xff09;小程序窗口的组成部分 2&#xff09;window结点常用的配置项 3&#xff09;设置导航栏的标题 4&#xff09;设置导航栏的背景色 这个颜色仅支持“#”开头的十六进制颜色&#xff0c;不能直接使用如&#xff1a;red&#x…

暗猝灭剂BHQ-1 NHS,916753-61-2,BHQ-1 SE

产品简介&#xff1a;黑洞猝灭剂-1&#xff08;BHQ-1&#xff09;被归类为暗猝灭剂&#xff08;一种非荧光发色团&#xff09;&#xff0c;被广泛用作各种荧光共振、能量转移&#xff08;FRET&#xff09;和DNA检测探针中&#xff0c;此类探针主要用于核酸分析及核酸结构研究。…

酒店预订小程序制作详细步骤解析

" 随着移动设备的普及和互联网技术的不断发展&#xff0c;小程序成为了一个备受关注的应用领域。特别是在酒店预订行业&#xff0c;小程序可以为酒店带来更多的客源和方便快捷的预订服务。下面是酒店预订小程序的制作详细步骤解析。 第一步&#xff1a;注册登录【乔拓云】…

openvino 将onnx转为IR并进行int8量化

openvino 将onnx转为IR并进行int8量化 环境安装环境编译 mo下载 openvino编译 mo onnx 转为 IRIR 模型量化为 int8参考 环境 - Ubuntu 22.04 - python 3.10安装环境 sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-venv build-essential python3-de…

Vue+ElementUI实现动态树和表格数据的查询

目录 前言 一、动态树的实现 1.数据表 2.编写后端controller层 3.定义前端发送请求路径 4.前端左侧动态树的编写 4.1.发送请求获取数据 4.2.遍历左侧菜单 5.实现左侧菜单点击展示右边内容 5.1.定义组件 5.2.定义组件与路由的对应关系 5.3.渲染组件内容 5.4.通过动态…

pg数据库操作,insert(sql)插入一条数据后获返回当前插入数据的id --chatGPT

gpt: 在 PostgreSQL 数据库中&#xff0c;可以使用 INSERT 语句插入一条数据&#xff0c;并通过 RETURNING 子句来返回插入数据的 ID。以下是一个示例 Go 代码来执行这个操作&#xff1a; go package main import ( "database/sql" "fmt" &…

RIP路由

目录 RIP路由 1、什么是RIP路由 2、RIP的工作原理是什么 3、RIP v1 和 RIP v2的区别 4、RIP的常用场景 5、RIP的通信流程 6、RIP的优缺点 优点&#xff1a; 缺点&#xff1a; 7、扩展部分 1.RIP路由的作用与应用场景 2.与其他路由协议的区别 3.RIP路由协议的工作原…

手撸RPC【gw-rpc】

文章目录 基于 Netty 的简易版 RPC需求分析简易RPC框架的整体实现协议模块 &#x1f4d6;自定义协议 &#x1f195;序列化方式 &#x1f522; 服务工厂 &#x1f3ed;服务调用方 ❓前置知识——动态代理&#x1f573;️Proxy类InvocationHandler 接口 RPC服务代理类内嵌Netty客…

Go语言的单元测试与基准测试详解

文章目录 单元测试基准测试 单元测试 以一个加法函数为例&#xff0c;对其进行单元测试。 首先编写add.go文件&#xff1a; //add.go package mainfunc add(a, b int) int {return a b }其次编写add_test.go文件&#xff0c;在go语言中&#xff0c;测试文件均已_test结尾&a…

组合数4 高精度计算组合数

一般来说需要高精乘和高精除&#xff0c;但化简为质因子形式后只用高精乘。 一个阶乘n中因子p的个数&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int&…

SpringCloudStream+Rocket事务消息配置

本文用到的版本 spring-cloud-stream 3.2.6 rocketmq-client 4.9.4 spring-cloud-starter-stream-rocketmq 2021.0.5.0 一、依赖导入 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</art…

Spring Cloud--@RefreshScope动态刷新的原理

原文网址&#xff1a;Spring Cloud--RefreshScope动态刷新的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring Cloud的RefreshScope动态刷新的原理。 原理概述 Spring的作用域有&#xff1a;single&#xff08;单例&#xff09;、prototype&#xff08;多例&#xff09…

python+nodejs+php+springboot+vue 导师双选系统

为了直观显示系统的功能&#xff0c;运用用例图这样的工具显示分析的结果。分析的导师功能如下。导师管理导师选择信息&#xff0c;管理项目&#xff0c;管理项目提交并对学员提交的项目进行指导。 为了直观显示系统的功能&#xff0c;运用用例图这样的工具显示分析的结果。分析…

漫谈:C语言 C++ 所有编程语言 =和==的麻烦

这次不只是C语言很麻拐&#xff0c;是所有编程语言都很麻拐了。 赋值和比较是编程语言最基本的操作之二&#xff0c;C和所有类C语言都使用“”和“”来分别表示赋值和比较。 数学上等号“”是个单一的概念&#xff0c;含义是“相等”&#xff0c;左右两边是等价的&#xff0c;很…

神仙打架!谷歌和OpenAI竞相推出多模式AI

原创 | 文 BFT机器人 随着秋季的到来&#xff0c;科技界正在展开另一场季节性活动——科技巨头谷歌和OpenAI正在竞相发布下一代多模态大语言模型&#xff0c;这些高级模型能够解释图像和文本&#xff0c;使他们能够执行诸如从草图生成网站代码或以文本形式描述视觉图表等任务。…