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

Posted

技术标签:

【中文标题】如何检测我的 iOS 应用已启用 PIE/ASLR?【英文标题】:How to detect that PIE/ASLR has been enabled for my iOS app? 【发布时间】:2012-02-04 12:14:39 【问题描述】:

我正在使用"-w -pie" 链接选项标志为 iPhone 应用程序启用 PIE(与位置无关的可执行文件)/ASLR(地址空间布局随机化)。有什么办法可以确保事情现在可以按照宣传的方式工作?我尝试使用 NSLog 打印变量 (编辑:和函数) 的地址,并且每次都出现相同的情况。我做得对吗?

【问题讨论】:

我有 PIE 标志。我的问题是什么可以让我不被 Clutch 和 Clutch2 反编译。任何一个? 【参考方案1】:

我知道这个帖子很旧,但还没有很好的答案,以防其他人偶然发现它。要检查是否设置了 PIE 标志非常简单,只需运行以下命令:

otool -hv /path/to/App.app/app

其中 [APP] 是构建后创建的可执行文件(不是 ipa,而是可执行的二进制文件)。

您应该会看到如下内容:

Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC     ARM         V7  0x00     EXECUTE    19       2708   NOUNDEFS DYLDLINK TWOLEVEL PIE

otool 应该包含在 Xcode 中,但如果您没有它,您可以在 Xcode 首选项 > 下载 > 命令行工具中安装它。

【讨论】:

【参考方案2】:

检查函数地址,而不是变量地址。

【讨论】:

我也这样做了,但仍然没有运气。 您可能打印的是相对地址而不是绝对地址。这就是为什么你每次都得到相同的结果。

以上是关于如何检测我的 iOS 应用已启用 PIE/ASLR?的主要内容,如果未能解决你的问题,请参考以下文章

iOS : Homekit - 如何检测设备中是不是启用蓝牙和 WiFi 服务?

检测 OS X 上的 iCloud 可用性变化

从设置应用程序 ios 获取推送通知启用/禁用事件?

iOS 推送通知已启用但无法正常工作

如何在 Android 上检测飞行模式?

如何检测Android设备上启用的屏幕镜像