iOS安全–移除IOS应用的ASLR特性

ASLR (Address Space Layout Randomization),即地址空间随机布局。ASLR特性是为了防御攻击对已经地址的攻击才加入的,程序在运行时加载的地址都是随机的,正因如此,所以我们在调试程序的时候下断点要用程序的文件偏移加上加载到内存的随机地址。

有ASLR特性的程序在Mach-o文件头都会有PIE的标识。

Snip20150117_1

同时运行时加载的内存地址是随机的。

Snip20150117_2

我们现在要做的是去除这个特性。

首先下载RemovePIE

把bin/RemovePIE上传到设备,然后来处理我们的应用程序。

Snip20150117_3

在来看看Mach-o头:

Snip20150117_4

已经没有PIE标识了。

再加载到内存看看。

Snip20150117_5

已经不存在随机偏移了。

现在我们下断点也不用再去加随机偏移地址了。省了很多事。

看了我对Mach-o介绍的文章的就会知道其实就是对Mach-o文件头的flags= ~MH_PIE

本文链接:http://www.alonemonkey.com/ioss-remove-aslr.html

一条评论

  1. lxg

    我用github上的一个2年前的removePIE代码,在8.1.2的手机上执行这个命令,不会报错,但是二进制文件的PIE没有去掉,麻烦帮忙弄一个支持到8的PIE可以吗?下面是结果:

    iPhone:/usr/bin root# removePIE /var/mobile/Containers/Bundle/Application/E87A28FB-549F-4B84-B5F4-46AF8A651F56/Facebook.app/Facebook
    magic : bebafeca
    loading header

    backing up application binary…

    binary backed up to: /var/mobile/Containers/Bundle/Application/E87A28FB-549F-4B84-B5F4-46AF8A651F56/F

    mach_header: cafebabe000000020000000c00000009000040000310ec100000000e
    original flags: 0000000e
    Disabling ASLR/PIE …
    new flags: 0000000e
    ASLR has been disabled for /var/mobile/Containers/Bundle/Application/E87A28FB-549F-4B84-B5F4-46AF8A651F56/Facebook.app/Facebook

Comments are closed.