IOS逆向_ASLR

1. ASLR的简介;

2. 计算APP中一段代码的真实内存地址;


1. ASLR的简介;

        1.1 ASLR的概念:(Address Space Layout Randomization ) 地址空间配置随机加载;是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术; iOS4.3开始引入了ASLR技术。

        1.2 作用:地址空间配置随机加载利用随机方式配置数据地址空间,使某些敏感数据(例如APP登录注册、支付相关代码)配置到一个恶意程序无法事先获知的地址,令攻击者难以进行攻击。


2.计算APP中一段代码的真实内存地址;

        2.1 MachO的组织架构简介:

        2.2 使用MachOView分析MachO的组织架构(对MachO文件静态分析、未使用ALSR技术):

image

            ① 函数代码存放在__TEXT段中;

            ② 全局变量存放在__DATA段中;

            ③ 可执行文件的内存地址是0x0;

            ④ 代码段(__TEXT)的内存地址,就是LC_SEGMENT_64(__TEXT)中的VM Address;

            ⑤ LC_SEGMENT_64(__PAGEZERO)的虚拟内存大小在ARM64架构下为:0X100000000,在非ARM64架构下为:0X4000;

            ⑥  也可以使用size -l -m -x指令来查看Mach-O的内存分布:

image

            ⑦ vim address、vim Size:

image

            ⑧ File Offset、File Size:    

image

        2.3 MachO文件加载到内存后、ASLR随机产生的Offset(偏移):

             ① 函数的内存地址(VM Address) = File Offset(LC_SEGMENT_64(__TEXT)的File Offset) + ASLR Offset +__PAGEZERO Size ;

image

            ② Hopper、IDA工具只是对MachO文件进行今天分析、所以分析出的地址都是未使用ASLR的VM Address;


(PS : 其中有部分章节是从前人的文章中搬运过来整理而成,这些文章里已经对部分知识点解释的很清楚明了了,我也没有更好的表达方式,所以站在巨人的肩膀上,我只是一个整理者加了部分自己的理解。)

你可能感兴趣的:(IOS逆向_ASLR)