iOS逆向----查看APP是否开启了完整的ASLR

在iOS4.3中,苹果引入了地址空间布局随机化也就是ASLR。这个功能确保了内存中程序的结构和数据(library,framework,主程序,堆,栈以及内存映射文件)被加载到虚拟地址空间中不可预测的位置。这使得代码执行时的逆向更加困难(当然就现在的iOS逆向来说,只是多了一步算地址的操作),因为很多针对特定库的调用都要依赖于这些虚拟地址,还需要引用堆和栈上的数据。

ASLR机制非常有效,但是应用程序必须构建一个位置独立的可执行程序(PIE),这就要求编辑器可以生成一堆机器代码,而这些代码的功能与其在内存中的位置无关。如果没有ASLR机制,那么可执行程序和栈上的数据在内存中的位置将保持不变,即便再重启手机后再加载程序,内存地址还是不变,这就可能导致自动化攻击。

当然,现在的所有iOS程序均启用了ASLR机制,这个设置是默认的,就是这两个选项,默认值为No,也就是开启了地址随机化:


image.png

已经打包好的二进制文件可以使用otool工具进行查看(仅限于真机包):


image.png

可以看到这里在MH_MAGIC_64这一行的结尾,可以看到明显的PIE标志。

你可能感兴趣的:(iOS逆向----查看APP是否开启了完整的ASLR)