加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

IOS逆向-ASLR

发布时间:2023-03-31 14:29:56 所属栏目:教程 来源:
导读:在逆向中我们无法使用breakpoint set -n "-[xxxxx xxxx:]"的方式(通过类名和方法名)来打断点,这种方式适合在Xcode工具中使用, 在逆向中我们一般使用breakpoint set -a 地址来打断点 ,通过函数的内存地址来打断点
在逆向中我们无法使用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加载进内存的过程:

3. 答疑
_PAGEZERO的作用?
obj = NULL:NULL指针,其实就是指向_PAGEZERO安全区域
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章