IOS逆向-ASLR
2021/5/23 10:58:19
本文主要是介绍IOS逆向-ASLR,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
IOS逆向-ASLR
- 1. Mach-O文件分析
- 2. ASLR
- 2.1 什么是ASLR
- 2.2 获取函数的真实地址
- 3. 答疑
在逆向中我们无法使用breakpoint set -n "-[xxxxx xxxx:]"
的方式(通过类名和方法名)来打断点,这种方式适合在Xcode工具中使用, 在逆向中我们一般使用breakpoint set -a 地址
来打断点 ,通过函数的内存地址来打断点
那么我们如何找到正确的函数地址了?
1. Mach-O文件分析
首先我们知道Mach-O的文件结构:
我们可以使用MachoView来分析下Mach-O文件的结构:
VM Addreess: Virtural Memeory Address
内存地址,在内存中的大小VM SIze:
Virtural Memeory Address内存大小,占用内存多少_PAGEZERO、_TEXT、_DATA、_LINKENIF
的内存地址和内存大小都可以通过Mach-O文件File Offset
:在Mach-O文件中的位置File Size
: 在Mach-O文件中占据的大小
首先我们观察Mach-O文件,我们发现_PAGEZERO
在Mach-O
文件中是不存在的, 在内存中确是存在的
未使用ASLR的Mach-O文件加载到内存中的过程图:
- 函数代码存放在
_TEXT(_text)
段中 - 全局变量存放在
_DATA
断中 - 可执行文件的内存地址是
0x0
- 代码段(_TEXT)的内存地址
- 就是
LC_SEGMENT(_TEXT)
中的VM Address - arm64:
0x100000000
(8个0) - 非arm64:
0x4000
(3个0)
- 就是
- 可以使用
size -l -m -x
来查看Mach-O的内存分布
2. ASLR
2.1 什么是ASLR
Address Space Layout Randomization
,地址空间布局随机化- 是一种针对缓冲区溢出的安全保护技术,通过对堆、栈共享库映射等线性布局的随机化,通过增加攻击者预测目的地的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击目的的一种技术
- IOS4.3开始引入的
ASLR
技术
2.2 获取函数的真实地址
- 函数的内存地址(VM Address)= File Offset + ASLR Offset + _PAGEZERO
Hopper
、IDA
中的地址都是未使用ASLR的VM Address- 使用了ASLR技术的Mach-O加载进内存的过程:
我们在程序中编写的函数,全局变量,程序一旦编译,函数和变量的位置就固定了,文件的偏移是固定的
我使用debugserver链接上手机查看微信Mach-O文件载进内存的地址,这样我们就可以获取函数真正的内存地址了,通过image list -o -f 查看模块信息,Mach-O文件本身也是一个模块
:
- 由上图可知,微信加载进内存的地址是什么,然后减去
arm64
架构固定长度(0x100000000
),就得到ASLR技术造成的地址偏移量,然后我们在分析工具中看到的函数地址加上这个偏移量,就得到了函数在内存中真正的地址,这样我们就可以使用LLDB命令通过函数地址来打断点
虚拟内存的分配 :dyld(动态库加载器) --> Mach-O文件(当前app的可执行文件) ---> 依赖的其他动态库(比如系统的UIKit等) ---> 栈空间、堆控件
3. 答疑
_PAGEZERO
的作用?obj = NULL
:NULL指针,其实就是指向_PAGEZERO
安全区域
这篇关于IOS逆向-ASLR的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12Axios库资料:新手入门必读教程
- 2024-11-11Axios库项目实战:新手入门教程
- 2024-09-29Axios库教程:初学者必备指南
- 2024-08-29Axios库资料:新手入门指南与基本使用教程
- 2024-03-14system bios shadowed
- 2024-03-14gabios
- 2024-02-07iOS应用提交上架的最新流程
- 2024-02-06打包 iOS 的 IPA 文件
- 2023-12-07uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ?
- 2023-11-25uniapp IOS从打包到上架流程(详细简单) 原创