
iOS逆向安全攻防
文章平均质量分 87
从正向开发、工具的使用、逆向实战及安全保护等方面,对iOS应用的逆向与安全进行了讲解,包括基本概念、逆向环境的准备、常用逆向分析工具、类的结构、App签名、Mach-O文件格式、hook原理等,并通过在越狱平台和非越狱平台上的逆向分析实例,带领学习逆向分析的思路和方法:网络传输、安全检测、代码混淆等
╰つ栺尖篴夢ゞ
本人毕业于计算机技术专业,从事iOS高级开发,专注于iOS/MacOS内核/汇编/源码/架构/算法等相关技术的开发学习,同时热爱人工智能、OpenGL/ES、云原生等技术,CSDN博客专家与原力计划作者,华为云云享专家与特约博主,阿里云专家博主,荣获CSDN iOS领域优质创作者、2022年度博客之星移动领域TOP 3、2022年度博客之星TOP 16、AI创想秀邂逅“华为云ModelArts”征文大赛一等奖、CSDN第一届猿创征文优质博文奖,以及多项优秀TOP博文、CSDN开源挑战赛优秀奖等。
展开
-
iOS逆向之初识汇编的基础理论
一、汇编语言① 汇编语言的发展机器语言:是由 0 和 1 组成的机器指令,表示特定的功能,如下所示: 加:0100 0000 减:0100 1000 乘:1111 0111 1110 0000 除:1111 0111 1111 0000汇编语言(Assembly language):由于使用机器语言表示时不方便记忆,于是便开始使用“助记符”来代替机器语言。例如,使用助记符表示的加减乘除: 加:INC EAX 通过编译器 0100 0000 减:DEC EAX 通过编译器 0100原创 2021-09-08 02:02:02 · 3014 阅读 · 5 评论 -
iOS逆向之汇编的常见指令
mov:将某一寄存器的值复制到另一寄存器(只能用于寄存器与寄存器或者寄存器与常量之间传值,不能用于内存地址)原创 2022-08-25 18:43:16 · 843 阅读 · 0 评论 -
iOS逆向之深入解析MachO文件
MachO文件简介一、什么是MachO文件?Mach-O其实是Mach Object文件格式的缩写,它是Mac以及iOS上一种用于可执行文件、目标代码、动态库的文件格式,类似于Windows上面的PE格式(Portable Executable),linux上的elf格式(Executable and Link Format)。它是一种用于可执行文件、目标代码、动态库的文件格式,作为.out格式的替代,MachO提供了更强的扩展性。二、Mach-O文件格式目标文件.o库文件:.a .d原创 2020-08-05 16:04:14 · 22680 阅读 · 4 评论 -
iOS逆向之分析工具的安装和使用
一、逆向 App 总体思路UI 分析:Cycript 、Reveal;代码分析:代码在 Mach-O 文件,所以要对 Mach-O 文件进行静态分析;MachOView、class-dump、Hopper Disassember、ida;动态调试:对运行中 App 进行代码调试;debugserver、LLDB;代码编写:注入代码到 App 中;必要时还可能需要重新签名、打包 ipa。二、MonkeyDev 安装与使用① 安装M原创 2022-02-03 18:48:17 · 50147 阅读 · 0 评论 -
iOS逆向之深入解析Hook的原理方法和安全防护
Hook简介Hook就是一种改变程序执行流程的一种技术的统称;一段程序的执行流程是 A --> B --> C,现在我们在 A 和 B 之间插入一段代码或者直接改变 B ,这样程序原有的执行流程就发生了改变。如下图所示:Hook的方式:Method Swizzle,fishhook,Cydia Substrate;Hook原理一、Method Swizzle 原理利用OC的Runtime特性,动态去改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变原创 2020-08-04 01:38:37 · 29505 阅读 · 4 评论 -
iOS逆向之深入解析App签名的双向验证机制和原理
非对称加密通常我们说的签名就是数字签名,它是基于非对称加密算法实现的。对称加密是通过同一份密钥加密和解密数据,而非对称加密则有两份密钥,分别是公钥和私钥,用公钥加密的数据,要用私钥才能解密,用私钥加密的数据,要用公钥才能解密。非对称加密算法 RSA 的数学原理:① 选两个质数 p 和 q,相乘得出一个大整数n,例如p = 61,q = 53,n = pq = 3233;② 选 1-n 间的随便一个质数e,例如 e = 17;③ 经过一系列数学公式,算出一个数字 d(通过RSA 算法得出),满足原创 2020-07-20 22:05:39 · 22268 阅读 · 3 评论 -
iOS逆向之深入解析如何使用Theos开发插件
一、Logos 语法Logos 作为 Theos 开发组件的一部分,通过一组特殊的预处理指令,可以让编写函数钩子(hook)代码变得非常简单和清晰,Logos 是随着 Theos 发布的。%hook 指定需要 hook 的类名,以 %end 结尾。%log 用来打印 log,将信息输入到 syslog 中,如 %log((NSString *)@“ZeluLi”)。%orig 执行被 hook 函数的原始代码,类似于 super.method 功能。%group 该指令用于 %hook 的分组,原创 2021-10-23 03:05:30 · 37401 阅读 · 6 评论 -
iOS逆向之hook框架frida的安装和使用
一、FridaFrida 是一款基于 Python + javascript 的 hook 框架,通杀 android\iOS\linux\win\osx 各平台。Frida 原理是手机端安装一个 server 程序把手机端的端口转到 PC 端写的 python 脚本进行通信,而 Python 脚本中采用 javascript 语言编写 hook 代码。① install frida on deviceStart Cydia and add Frida’s repository by navig原创 2021-10-23 02:33:56 · 47113 阅读 · 12 评论 -
iOS逆向之深入解析函数本质·函数调用栈与相关指令
一、栈与寄存器① 栈栈:是一种具有特殊的访问方式的存储空间(即先进后出 Last In First Out, LIFO):高地址往低地址存数据(存:高–>低);栈空间开辟:往低地址开辟(开辟:高–>低)。② SP 和 FP 寄存器SP 寄存器:在任意时刻会保存栈顶的地址;FP 寄存器(也称为 x29 寄存器):属于通用寄存器,但是在某些时刻(例如函数嵌套调用时)可以利用它保存栈底的地址;arm64 开始,取消了 32 位的 LDM、STM、PUSH、POP 指令,取而原创 2021-09-09 21:56:42 · 12345 阅读 · 3 评论 -
iOS逆向之Protocol Witness Table的汇编实现原理
一、什么是 Protocol Witness Table?我们都知道 C 函数调用是静态派发,简单来说可以理解为是用汇编命令 call $address 来实现,这种方式效率最高,但是灵活性不够。OC 的方法调用完全是基于动态派发,总是调用 objc_msgSend 实现,这种方式非常灵活,允许各种 Hook 黑科技,但是流程最长,效率最低。在 Swift 中,协议方法的调用,使用协议方法表的方式完成,也就是 Protocol Witness Table,下文简称 PWT。现有如下代码:pro原创 2021-12-14 21:44:58 · 7964 阅读 · 0 评论 -
iOS逆向之深入解析如何Hook所有+load方法及Category的处理
一、类方法 +loadiOS 四种方法可方便的在 premain 阶段执行代码:Objective C 类的 +load 方法;C++ static initializer;C/C++ attribute(constructor) functions;动态库中的上面三种方法。所有类的 +load 方法是在 main 函数之前、在主线程,以串行方式调用,因此任何一个 +load 方法的耗时大小将直接影响到 App 的启动耗时。Objective C Runtim原创 2022-04-02 19:49:42 · 50900 阅读 · 12 评论 -
iOS逆向之深入解析如何计算+load方法的耗时
一、类方法 +load在 pre-main 时期,objc 会向 dyld 注册一个 init 回调:void _objc_init(void) { static bool initialized = false; if (initialized) return; initialized = true; // fixme defer initialization until an objc-using image is found? environ_原创 2022-04-04 14:58:56 · 49744 阅读 · 0 评论