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

news2024/11/25 0:50:12

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.coloradmin.cn/o/1043188.html

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

相关文章

【挑战开发100个项目 | 2. C语言图书管理系统】

本项目是一个基于C语言的简单图书管理系统&#xff0c;用户可以通过命令行界面实现图书的添加、删除、修改、查找以及列出所有图书的功能。适用于初学者学习c语言&#xff0c;也适用于高校学生课程设计&#xff0c;毕业设计参考。 一&#xff0c;开发环境需求 操作系统 &#x…

Chrome获取RequestId

Chrome获取RequestId 参考&#xff1a;https://help.aliyun.com/zh/redis/how-do-i-obtain-the-id-of-a-request 在浏览器页面按下F12键&#xff0c;打开开发者工具页面&#xff1b; 在开发者工具页面&#xff0c;单击Network(网络)&#xff1b; 在playload(载荷)窗口中找到目…

趋动云GPU云平台部署ChatGLM-6B

目录 ChatGLM-6B是什么&#xff1f; 模型部署 Step1. 创建项目并上传代码 Step2. 环境准备 Step3. 加载模型 ChatGLM-6B是什么&#xff1f; ChatGLM-6B是一个基于GLM的生成式对话模型。由清华大学团队开发&#xff0c;旨在改进对话机器人的生成质量和逻辑。 模型部署 模…

React Native搭建Android开发环境

React Native搭建Android开发环境 搭建Android开发环境一、下载JDK二、安装Android Studio2.1 配置 ANDROID_HOME 环境变量 三、初始化项目 搭建Android开发环境 我的电脑是windows系统&#xff0c;所以只能搭建Android&#xff0c;如果电脑是mac&#xff0c;既可以搭建Androi…

Repurposing Segmentation as a Practical LVI-NULL Mitigation in SGX【USENIX`22】

目录 摘要引言贡献 背景瞬态执行攻击负载值注入LVI-NULL Intel SGX虚拟内存与分段对象重新定位 威胁模型硬件软件 摘要 负载值注入&#xff08;LVI&#xff09;在类似Spectre的混乱代理攻击中使用Meltdown类型的数据流。LVI已经在对英特尔SGX飞地的实际攻击中得到了证明&#…

【深度学习实验】卷积神经网络(三):自定义二维卷积层:步长、填充、输入输出通道

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 步长、填充 a. 二维互相关运算&#xff08;corr2d&#xff09; b. 二维卷积层类&#xff08;Conv2D&#xff09; c. 模型测试 d. 代码整合 2. 输入输出通道 a…

面试打底稿④ 专业技能的第四部分

简历原文 抽查部分 了解Python的使用&#xff08;第一篇关于Python升级版本bug解决的文章斩获6W阅读&#xff09;&#xff0c;用python实现了几篇图像信息隐藏领 域论文的复现&#xff08;博客中有提及&#xff09;&#xff1b; 了解Django基本框架&#xff0c;写过Django框架的…

手把手教你实现法玛三因子模型

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

xxl-job 执行器注册成功,但是xxl-admin 不显示

问题&#xff1a;项目启动成功后&#xff0c;日志显示执行器注册成功&#xff0c;但是xxl-job-admin 管理页面后台确无法查看到执行器信息。 经过百度后并结合官方文档说明&#xff0c;执行器客户端启动完成后&#xff0c;数据只会放在注册表xxl_job_registry 中。 而执行器管…

隐语 Meetup 北京站|精彩时刻大盘点!新品发布、行业案例、专家解读......欢迎围观

“隐语”是开源的可信隐私计算框架&#xff0c;内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择&#xff0c;提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 9月23日&#xff0c;隐语开源社区 Meetup 北京专场顺利举行&am…

sox音频处理和ffmpeg评测

ffmpeg音频处理不如sox&#xff0c;ffmpeg切分&#xff0c;最低切分是0.1秒&#xff0c;而sox可以切分更小单位0.001这种 ffmpeg处理视频等功能更全。 命令 ffmpeg -i 2.wav -y -ss 0.01 -acodec copy test.wav sox 2.wav output2.wav trim 0.01

redis部署与管理

目录 一、关系数据库与非关系型数据库&#xff1a; 1. 关系型数据库&#xff1a; 2.非关系型数据库&#xff1a; 二、关系型数据库和非关系型数据库区别&#xff1a; &#xff08;1&#xff09;数据存储方式不同&#xff1a; &#xff08;2&#xff09;扩展方式不同&#xf…

【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码

1 绘制2D动画&#xff08;animation&#xff09; Matplotlib是一个Python绘图库&#xff0c;它提供了丰富的绘图功能&#xff0c;包括绘制动画。要绘制动画&#xff0c;Matplotlib提供了FuncAnimation类&#xff0c;允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…

Django — 类视图和中间件

目录 一、类视图1、基于类的结构2、常见的类视图基类3、类视图的优点4、代码案例 二、中间件1、定义2、工作原理3、自带中间件4、中间件开发流程5、自定义中间件6、案例 一、类视图 类视图&#xff08;Class-Based Views&#xff09;是 Django 中用于处理 HTTP 请求和生成 HTT…

24届近3年河海大学自动化考研院校

⚜️所谓又专又精&#xff0c;专是指我们售后群团队上百人都是自动化研究生&#xff0c;精是指我们只做自动化这一门专业学科7年了&#xff0c;研究到极致&#xff01; &#x1f509;今天学长给大家带来的是河海大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 目录…

XC9700 单通道限流电流负载开关 低内阻负载开关

XC9700是一种低成本、低电压、单P-MOSFET负载开关&#xff0c;为自供电和总线供电的通用串行总线&#xff08;USB&#xff09;应用进行了优化。该开关的输入范围从2.4V到5.5V&#xff0c;使它非常适合3V和5V系统。该开关的低RDS&#xff08;ON&#xff09;&#xff0c;80mΩ&am…

怒刷LeetCode的第16天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;迭代 方法二&#xff1a;模拟 方法三&#xff1a;循环模拟 方法四&#xff1a;传递 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;回溯 方法二&#xff1a;枚举优化 第三题 题目来源 题目…

Unity之NetCode多人网络游戏联机对战教程(3)--NetworkObject组件讲解

文章目录 NetworkObjectAlways Replicate As RootSynchronization TransformActive Scene SynchronizationScene Migration SynchronizationSpawn With ObserversDont Destroy With OwnerAuto Object Parent Sync 后话 NetworkObject 为了复制任何Netcode感知属性或发送/接收R…

Linux生产者和消费者模型 条件变量 信号量

/*条件变量类型 pthread_cond_tint pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);int pthread_cond_destory(pthread_cond_t * cond);int pthread_cond_wait(pthread_cond_t *restrict cond, const pthread_mutex_t *restrict …

人生第一个java项目 学生管理系统

开始编程 建类 开始主要部分 main()部分 方法部分