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

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.hqwc.cn/news/206385.html

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

相关文章

金蝶云星空部署包导出文件

文章目录 金蝶云星空部署包导出文件 金蝶云星空部署包导出文件 打开补丁包后,贴入导出文件的文件夹,然后按F2即可导出到目标文件夹。

【HTML + CSS】 实现原神纯静态官网

文章目录 一、网页效果演示 二、poster code 2.1、html: <!-- 页面一 --> <div class"poster"> <!-- 头部导航栏 --> <div class"header_bar"> <!-- 头部左边&#xff0c;logo --> <div class&…

springboot宠物领养系统-计算机毕设 附源码 44261

springboot宠物领养系统 摘 要 网络发布信息有其突出的优点&#xff0c;即信息量大&#xff0c;资源丰富&#xff0c;更新速度快等&#xff0c;很符合人们希望以捷、便利的方式获得最多最有效信息的要求。本系统就是一个网上宠物领养系统&#xff0c;为宠物爱好者提供一个信息…

AI:86-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

PostgreSQL导出表结构带注释

我们在平时开发过程中&#xff0c;经常会在字段的注释中&#xff0c;加上中文&#xff0c;解释字段的相关含义&#xff0c;也可以避免时间太久忘记这个字段代表什么&#xff0c;毕竟英文水平不好。我们可能要经常整理数据库表结构&#xff0c;提供他人去收集数据&#xff0c;但…

提升企业人效,从精细化考勤管理开始

过去&#xff0c;许多企业提到考勤管理&#xff0c;只能关联到打卡、请假、算薪这些简单的事务性流程。随着越来越多企业希望通过数字化转型来提升运营效率&#xff0c;实现精细化人员管理。考勤数据的作用也不再仅限于算薪&#xff0c;而是成为了企业分析人效的关键因子。因此…

【shell】循环语句(for、while、until)

目录 一、循环语句的特点 二、三种常用的循环 2.1 for循环 2.2 while循环 2.3 until循环 2.4 死循环 2.5 关于continue和break以及exit 三、实操案例 3.1 累加1到100&#xff08;5种办法&#xff0c;穿插多种运算习惯&#xff09; 3.2 批量修改文件名称 3.3 pi…

vue3中v-for报错 ‘item‘ is of type ‘unknown‘

报错 在写vue3ts的项目&#xff0c;得到一个数组&#xff0c;需要循环展示&#xff0c;使用v-for循环&#xff0c;写完之后发现有个报错&#xff0c;如下&#xff1a; 解决 props的时候使用PropType将数据类型完整标注即可 以为没有显示的表示出list中item的类型&#xff…

企业如何选择一款高效的ETL工具

企业如何选择一款高效的ETL工具? 在企业发展至一定规模后&#xff0c;构建数据仓库&#xff08;Data Warehouse&#xff09;和商业智能&#xff08;BI&#xff09;系统成为重要举措。在这个过程中&#xff0c;选择一款易于使用且功能强大的ETL平台至关重要&#xff0c;因为数…

three.js学习总结超详细附带素材及源码

three.js学习总结超详细附带素材及源码 安装three.js npm install --save three引入three.js import * as THREE from threethree.js结构 three.js坐标 创建一个场景 scene场景&#xff0c;camera相机&#xff0c;renderer渲染器 创建一个场景 this.scene new THREE.Scene(…

SMBGhost_RCE漏洞(CVE-2020-0796永恒之黑)

https://blog.csdn.net/qq_45372008/article/details/106980409 https://zhuanlan.zhihu.com/p/374949632 SMB 3.1.1协议处理某些请求的方式中存在远程执行代码漏洞&#xff0c;可能被攻击者利用远程执行任意代码。该漏洞的后果十分接近永恒之蓝系列&#xff0c;都利用Windows …