逆向ASLR(六)

程序是先装载的macho文件然后在装载依赖库

macho装载内存后,是一个虚拟内存(相对macho来说)

内存中不存在header ,load commands

__DATA段的VM Address是__PAGEZERO的VM Address+__TEXT段的VM Size(真实大小)(每次编译都会改变)


ASLR(Address space layout randomization)地址空间配置随机加载 

是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明ASLR可以有效的降低缓冲区溢出攻击的成功率,如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。

作用: 降低缓冲区溢出攻击的成功率

问题:0x1000063B8 是否[Began:withEvent:]地址?

比如要手动下方法断点,这时找不到真正的地址是无光动态调试,0x1000063B8其实并不是内存条上的真实地址,

通过image list 拿到macho文件在内存条的地址(比如0x0000000102598000 应该拿0x2598000)+0x1000063B8就是真实的地址了

问题:怎么拿到全局的变量?

比如定义了int age=27; 在macho中怎么找到(其中age这个变量名是个地址在编译时就已经有地址位置,要age名字没必要的) (静态语言就是根据把代码生成地址空间在编译时期就知道 比如c语言只声明不实现会报错。OC只声明不现实不报错,它是根据运行时macho上查找 IMP在Symbok Table查找)

  1. 获取&age地址 (0x00000001022fcfd8)
  2. &age-image list的macho的地址(0x00000001022f4000) =  0x8FD8
  3. 在2中相减得到的地址在macho(__DATA,__data)中查看


静态语言和动态语言区别?

静态语言就是根据把代码生成地址空间在编译时期就知道 比如c语言只声明不实现会报错。

OC只声明不现实不报错,它是根据运行时macho上查找 IMP在Symbok Table查找

在 “逆向ASLR(六)” 上有一个观点

发表回复

电子邮件地址不会被公开。 必填项已用*标注

Protected with IP Blacklist CloudIP Blacklist Cloud