代码混淆不再愁:一篇掌握核心技巧

news2024/9/20 20:48:16

1. 概述

代码混淆是将计算机程序的代码转换成一种功能上等价,但是难以阅读和理解的形式。

对于软件开发者来说,代码混淆可以在一定程度上保护程序免被逆向。

对于逆向工程师来说,学习代码混淆可以帮助我们研究反混淆技术。

2. 常见混淆思路

常见的混淆思路有:符号混淆、控制流混淆、计算混淆和虚拟机混淆。

2.1 符号混淆

指的是将函数的符号,如函数名、全局变量名去除或者混淆。对于ELF文件可以通过strip指令去除符号表完成。

下图就是一个去除了符号的程序。

下图则对函数名进行了混淆。

2.2 控制流混淆

指的是混淆程序正常的控制流,使其在功能保持不变的情况下,使其不能清晰地反映原程序的正常逻辑。

常见的有:控制流平坦化、虚假控制流、随机控制流。

控制流平坦化指的是将正常控制流中基本块之间的跳转关系删除,用一个集中的分发块来调度基本块的执行顺序,下图为经过控制流平坦化的控制流图。

虚假控制流指的是,通过向正常控制流中插入若干不可达基本块和由不透明谓词造成的虚假跳转以产生大量垃圾代码干扰攻击者分析的混淆。

下图为虚假控制流混淆的控制流图,它与控制流平坦化不同,呈现出长条状。

随机控制流是虚假控制流的一种变体。随机控制流通过克隆基本块以及添加随机跳转(随机跳转到两个功能相同的基本块中的一个)来混淆控制流。随即控制流的控制流图与虚假控制流类似,都呈长条形。

2.3 计算混淆

指的是混淆程序的计算流程,或计算流程中使用的数据,使分析者难以分辨某一段代码所执行的具体计算。一般有指令替代、常量替代。

指令替代将正常的二元运算指令(如加、减、异或等)替换为等效而复杂的指令序列,以达到混淆计算过程的目的。经过指令替代,函数的控制流没有发生变化,但运算过程变得难以分辨。

常量替代指将二元运算指令(如加、减、异或等)中使用的常数替换为等效而更复杂的表达式,以达到混淆计算过程或某些特殊常量的目的。例如将TEA加密使用的常量0x9e3779b 替换为 12167*16715+18858*32146-643678438。类似于指令替代,函数的控制流没有发生变化,但是运算过程变得难以分辨。

2.4 虚拟机混淆

指的是将一组指令集合(如一组x86指令)转化为一组攻击者未知的自定义指令集,并用与程序绑定的解释器解释执行。虚拟机混淆代表:VMProtect。

虚拟机混淆是目前最强力的混淆,但有性能损耗大、容易被杀毒软件报毒等缺点。

3. OLLVM支持的混淆

OLLVM是经典的代码混淆工具,在国内移动安全的使用非常广泛。它提供了三种经典的代码混淆:

控制流平坦化

虚假控制流

指令替代

3. 混淆工具推荐

Ipa Guard是一款功能强大的ipa混淆工具,不需要ios app源码,直接对ipa文件进行混淆加密。可对IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加ipa破解反编译难度。可以对图片,资源,配置等进行修改名称,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5类app。

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

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

相关文章

vue2使用el-tag自定义菜单导航标签

需求:使用el-tag写个菜单导航栏,点击路由的时候就添加 功能: 设置鼠标横向滚动并且不展示滚动条添加关闭其他、关闭左侧、关闭右侧、全部关闭标签功能单个标签删除功能添加,固定标签不可删除右键点击展开操作菜单栏设置个默认固定…

厦门某智慧社区的智慧排水监测系统实施落地

厦门某智慧社区的智慧排水监测系统实施落地 智慧社区的排水系统是一种高度智能化、高效且环保的排水解决方案,它结合了自动化控制系统、计算机网络技术、传感监测技术以及环保理念等多个领域的知识。其主要作用是确保社区的排水系统能够高效、稳定、环保地运行&…

Go并发编程学习-class1

class1. Mutex 解决资源并发访问 基础概念 临界区概念:一个被共享的资源,可以被并发访问。通过Mutex互斥锁,可以限定临界区只能由一个线程获取。 根据不同情况,不同适用场景 ●共享资源。并发地读写共享资源,会出现…

规划类3d全景线上云展馆帮助企业轻松拓展海外市场

科技3D线上云展馆作为一种基于VR虚拟现实和互联网技术的新一代展览平台。可以在线上虚拟空间中模拟真实的展馆,让观众无需亲自到场,即可获得沉浸式的参观体验。通过这个展馆,您可以充分、全面、立体展示您的产品、服务以及各种创意作品&#…

OpenAI董事会秒反悔!奥特曼被求重返CEO职位

明敏 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 1天时间,OpenAI董事会大变脸。 最新消息,他们意在让奥特曼重返CEO职位。 多方消息显示,因为“投资人的怒火”,OpenAI董事会才在一天时间里来了个大反转。 微软CEO纳德拉被曝在得…

Imaris 卡退,是不是缓存盘没有设置好?

必须记录一下,从Imaris哔哩哔哩官方视频上学到的,如何设置缓存位置,尤其是做3D视频的时候。 但是隔一段时间就忘记,找不到当时的哔哩哔哩视频 这里记一下 如果是空间比较小的C盘,可以改成一个空间大一点的位置。 把缓…

用Stable Diffusion帮助进行卡通风格渲染

用Stable Diffusion帮助进行卡通风格渲染 正常风格渲染卡通风格贴图增加涅斐尔边缘高光效果 正常风格渲染 正常的动物写实模型 卡通风格贴图 用Stable Diffusion可以帮助我们将写实贴图转化为卡通风格(具体参数可以自己调试,总体上是将提示词强度和图…

Python中控制台如何展示进度条——tqdm库使用

在 Python 中可以使用特定的库来创建控制台进度条,其中 tqdm 是一个常用的选择,它能够方便地显示进度条并跟踪迭代的进度。你可以通过 pip 安装 tqdm 库: pip install tqdm包装迭代器: 使用 tqdm 来包装你的迭代器,比…

外卖配送小程序商城的效果如何

线下餐饮店非常多,主要以同城生意为主,在线上电商和外卖平台的冲击下,传统商家仅通过传统方式经营很难宣传拓客及转化等,线上是必要的渠道,但入驻第三方平台又会有各种困扰,抽成/佣金/流量费/激烈竞争等。 …

C++ MiniZip实现目录压缩与解压

Zlib是一个开源的数据压缩库,提供了一种通用的数据压缩和解压缩算法。它最初由Jean-Loup Gailly和Mark Adler开发,旨在成为一个高效、轻量级的压缩库,其被广泛应用于许多领域,包括网络通信、文件压缩、数据库系统等。其压缩算法是…

pyqt5 窗口调用网页高德地图kpi,进行实时地图导航

作为主项目功能的一部分,这部分我想单独记录下来 一,注册高德kpi【进行实名认证】 高德开放平台 | 高德地图API (amap.com) 二,申请Key 三,进入路径规划-API文档-开发指南-Web服务 API|高德地图API (amap.com) 找到你需要的路径…

Linux 中 .tar 和 tar.gz 的区别

1、前言 有时候你会发现,即便是有些拥有 3 年左右工作经验的运维或开发工程师对 .tar 和 .tar.gz 的区别并不是很清楚。.tar 和 .tar.gz 是在 Linux 系统中用于打包和压缩文件的两种常见格式。它们之间的主要区别在于压缩算法和文件扩展名。 2、区别 .tar .tar 是…

剧情继续:马斯克曝出OpenAI前员工举报信,董事会与奥特曼谈判回归

丰色 发自 凹非寺 量子位 | 公众号QbitAI 经过4天的极限拉扯、反转再反转,奥特曼有可能重新回归了。 据知情人士透露,OpenAI董事会正与奥特曼进行一场“富有成效”的新谈判。 如果奥特曼回到OpenAI,他将继续担任CEO。 与此同时&#xff0c…

909-2015-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 线性表使用公式化描述方式存储。编写一个函数&#xff0c;从一给定的线性表A中删除值在x ~ y&#xff08;x到y&#xff0c;x<y&#xff09;之间的所有元素&#xff0c;要求以较高的效率来实现。提示&#…

【正点原子STM32连载】第五十六章 DSP BasicMath实验 摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html## 第五…

2023 年戴森设计大奖得主是谁?给大楼降温、争取救援机会

2023 年戴森设计大奖得主是谁&#xff1f;给大楼降温、争取救援机会 ​编辑拉风的极客2023/11/22 摘要 当今社会除了持续不断对科技创新保持注目&#xff0c;还有很多年轻发明家为了实际场景的难题提供解决方案。 11 月 15 日&#xff0c;2023 年戴森设计大奖国际大奖名单正…

在 Redis 中使用 JSON 文档:命令行界面(CLI)和 Navicat 集成

Redis&#xff0c;因其极高的性能而闻名&#xff0c;是一款多功能的 NoSQL 数据库&#xff0c;擅长处理键值对。虽然 Redis主要用于处理简单数据结构&#xff0c;但是同样支持更多复杂的数据类型&#xff0c;如列表、集合甚至是 JSON 文件。在本文&#xff0c;我们将深入到 Red…

聚类系列(一)——什么是聚类?

目前在做聚类方面的科研工作, 看了很多相关的论文, 也做了一些工作, 于是想出个聚类系列记录一下, 主要包括聚类的概念和相关定义、现有常用聚类算法、聚类相似性度量指标、聚类评价指标、 聚类的应用场景以及共享一些聚类的开源代码 下面正式进入该系列的第一个部分&#xff…

MySQL数据库入门到大牛_基础_12_MySQL数据类型精讲

文章目录 1. MySQL中的数据类型2. 整数类型2.1 类型介绍2.2 可选属性2.2.1 M2.2.2 UNSIGNED2.2.3 ZEROFILL 2.3 适用场景2.4 如何选择&#xff1f; 3. 浮点类型3.1 类型介绍3.2 数据精度说明3.3 精度误差说明 4. 定点数类型4.1 类型介绍4.2 开发中经验 5. 位类型&#xff1a;BI…

visionOS空间计算实战开发教程Day 5 纹理和材质

在​​Day 4​​​中我们使用了​​ImmersiveSpace​​并在其中添加了一个立方体&#xff0c;但对这个立方体我们只配置了长宽高&#xff0c;并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将​​ImmersiveView​​分拆…