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

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

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

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

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

➜  Desktop otool -vh ting
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64   ARM64        ALL  0x00     EXECUTE    86       8824   NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE

ting是从喜马拉雅APP的ipa包中提取的二进制文件,可以看到这里在MH_MAGIC_64这一行的结尾,可以看到明显的PIE标志。

发布了249 篇原创文章 · 获赞 926 · 访问量 149万+

猜你喜欢

转载自blog.csdn.net/youshaoduo/article/details/101717344
今日推荐