注:原文---念茜的博客
ASLR (Address Space Layout Randomization),即地址空間隨機(jī)布局驾中。大部分主流的操作系統(tǒng)都已實(shí)現(xiàn)了ASLR,以防范對已知地址進(jìn)行惡意攻擊。iOS從4.3開始支持ASLR,Android從4.0也支持了ASLR機(jī)制皿桑。
ASLR的存在,給iOS系統(tǒng)越獄造成了很大的困難,某些不完美越獄方案就是因?yàn)楣テ撇涣嘶蛘呃@不開ASLR诲侮,所以每次重新啟動后地址再度隨機(jī)偏移镀虐,需要重新進(jìn)行越獄操作。與此同時(shí)浆西,ASLR也給應(yīng)用層攻擊帶來了一些困難粉私,不同進(jìn)程會造成不同的地址空間偏移顽腾,而且在運(yùn)行時(shí)才可確定其偏移量近零,不易鎖定攻擊地址。
Mach-O文件的文件頭會記錄二進(jìn)制的屬性標(biāo)識抄肖,有個(gè)flag叫做PIE (Position Independent Enable)久信。開啟了PIE的二進(jìn)制文件,在執(zhí)行時(shí)會產(chǎn)生ASLR漓摩。
我們可以使用otool工具裙士,來查看任意應(yīng)用程序二進(jìn)制文件的屬性,以支付寶為例:
otool -hv Portal
有PIE標(biāo)識管毙,表示該程序在啟動時(shí)會產(chǎn)生隨機(jī)地址布局腿椎。
removePIE是個(gè)去掉PIE flag的工具。
壞消息是夭咬,年久失修啃炸,它不支持iOS7。
好消息是卓舵,我們還有2個(gè)變通方法可以走南用。
利用Theos編譯removePIE
改編一個(gè)Mac版的MyRemovePIE
非越獄開發(fā)者可能不熟悉Theos,低學(xué)習(xí)成本的做法是第二種掏湾,那么讓我們來改編一個(gè)Mac版的MyRemovePIE吧裹虫。
(懶得動手的可以直接到這里下載demo)
創(chuàng)建一個(gè)Command Line Tool工程
然后復(fù)制removePIE.c代碼到main.c中,并且修改第43行:
if(currentHeader.magic == MH_MAGIC){ ?//little endian
添加iOS7的判斷條件:
if(currentHeader.magic == MH_MAGIC || currentHeader.magic == 0xbebafeca){ ?//little endian
編譯后生成可執(zhí)行文件MyRemovePIE.
利用我們編譯生成的MyRemovePIE來處理應(yīng)用程序:
./MyRemovePIE Portal
這樣以后支付寶Portal再被啟動執(zhí)行就不會具有ASLR特性了
如何驗(yàn)證一下結(jié)果呢融击?
把處理過的Portal二進(jìn)制拷貝回iPhone筑公,啟動支付寶錢包應(yīng)用,然后gdb該進(jìn)程尊浪,利用info sh命令查看偏移:
偏移量為0十酣,嗯,這下就好了际长。一些手動處理的過程可以升級為自動了~