0x21 廢除應(yīng)用程序的ASLR特性

注:原文---念茜的博客

ASLR (Address Space Layout Randomization),即地址空間隨機布局。大部分主流的操作系統(tǒng)都已實現(xiàn)了ASLR,以防范對已知地址進行惡意攻擊。iOS從4.3開始支持ASLR,Android從4.0也支持了ASLR機制。

ASLR的存在,給iOS系統(tǒng)越獄造成了很大的困難,某些不完美越獄方案就是因為攻破不了或者繞不開ASLR,所以每次重新啟動后地址再度隨機偏移,需要重新進行越獄操作。與此同時,ASLR也給應(yīng)用層攻擊帶來了一些困難,不同進程會造成不同的地址空間偏移,而且在運行時才可確定其偏移量,不易鎖定攻擊地址。

Mach-O文件的文件頭會記錄二進制的屬性標識,有個flag叫做PIE (Position Independent Enable)。開啟了PIE的二進制文件,在執(zhí)行時會產(chǎn)生ASLR。

我們可以使用otool工具,來查看任意應(yīng)用程序二進制文件的屬性,以支付寶為例:

otool -hv Portal

有PIE標識,表示該程序在啟動時會產(chǎn)生隨機地址布局。

removePIE是個去掉PIE flag的工具。

壞消息是,年久失修,它不支持iOS7。

好消息是,我們還有2個變通方法可以走。

利用Theos編譯removePIE

改編一個Mac版的MyRemovePIE

非越獄開發(fā)者可能不熟悉Theos,低學(xué)習(xí)成本的做法是第二種,那么讓我們來改編一個Mac版的MyRemovePIE吧。

(懶得動手的可以直接到這里下載demo)

創(chuàng)建一個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特性了

如何驗證一下結(jié)果呢?

把處理過的Portal二進制拷貝回iPhone,啟動支付寶錢包應(yīng)用,然后gdb該進程,利用info sh命令查看偏移:

偏移量為0,嗯,這下就好了。一些手動處理的過程可以升級為自動了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容