ASLR (Address Space Layout Randomization),即地址空间随机布局。ASLR特性是为了防御攻击对已经地址的攻击才加入的,程序在运行时加载的地址都是随机的,正因如此,所以我们在调试程序的时候下断点要用程序的文件偏移加上加载到内存的随机地址。
有ASLR特性的程序在Mach-o文件头都会有PIE的标识。
同时运行时加载的内存地址是随机的。
我们现在要做的是去除这个特性。
首先下载RemovePIE:
把bin/RemovePIE上传到设备,然后来处理我们的应用程序。
在来看看Mach-o头:
已经没有PIE标识了。
再加载到内存看看。
已经不存在随机偏移了。
现在我们下断点也不用再去加随机偏移地址了。省了很多事。
看了我对Mach-o介绍的文章的就会知道其实就是对Mach-o文件头的flags= ~MH_PIE
Permalink
我用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