iOS app 的 ASLR

Posted iamonion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS app 的 ASLR相关的知识,希望对你有一定的参考价值。

       这两天逆向一个程序,发现每次image list -o -f 之后,它的基地址都是0x00000,也就是偏移地址是0。  想到这个应该是载入内存时有没有启用偏移有关,于是找了下答案:aslr

       百度百科对ASLR的定义:

       aslr是一种针对缓冲区溢出安全保护技术,通过对、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。   百度百科说的比较隐晦,用白话说,就是:ASLR (Address Space Layout Randomization),即地址空间随机布局。ASLR特性是为了防御攻击对已经地址的攻击才加入的,程序在运行时加载的地址都是随机的,正因如此,所以我们在调试程序的时候下断点要用程序的文件偏移加上加载到内存的随机地址。

       在有ASLR特性的程序在Mach-o文件头都会有PIE的标识,用 otool -hv命令查看二进制,最后一列PIE标识:

tong:crack xxxxx$ otool -hv xxxxx
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC     ARM         V7  0x00     EXECUTE    38       4272   NOUNDEFS DYLDLINK TWOLEVEL BINDS_TO_WEAK PIE

 

再找了个没有ASLR机制的二进制文件:

tong:1401 xxxx$ otool -hv xxxx
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC     ARM         V7  0x00     EXECUTE    60       6036   NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK

 

网上也有些去掉PIE标识的软件,另外还说到有些不完美越狱就是因为ASLR的原因,越狱后,每次重启都需要重新越狱(原话就是“越狱”,可能就是指现在ios9.1以后的越狱,每次重启后,都需要重新激活。)

     那么,我有个问题,如果没有了ASLR,是不是每个程序都需要指定一个基地址?且不能冲突?否则,如果两个程序基础地址都是0,怎么办?还望高手告知

             

       

以上是关于iOS app 的 ASLR的主要内容,如果未能解决你的问题,请参考以下文章

如何检测我的 iOS 应用已启用 PIE/ASLR?

iOS xcode 代码片段

linux内存布局和地址空间布局随机化(ASLR)下的可分配地址空间

如何使用 mingw 在代码块中的 exe 上启用 ASLR、DEP 和 SafeSEH?

用于非感知可执行文件的 ASLR 和 Windows 系统 DLL?

如何判断当前LINUX系统启用了ASLR