標籤:emma 二進位檔案 不能 sizeof bsp 啟用 保護 sub and
這兩天逆向一個程式,發現每次image list -o -f 之後,它的基地址都是0x00000,也就是位移地址是0。 想到這個應該是載入記憶體時有沒有啟用位移有關,於是找了下答案:aslr
百度百科對ASLR的定義:
aslr是一種針對緩衝區溢位的安全保護技術,通過對堆、棧、共用庫映射等線性區布局的隨機化,通過增加攻擊者預測目的地址的難度,防止攻擊者直接定位攻擊代碼位置,達到阻止溢出攻擊的目的的一種技術。 百度百科說的比較隱晦,用白話說,就是:ASLR (Address Space Layout Randomization),即地址空間隨機布局。ASLR特性是為了防禦攻擊對已經地址的攻擊才加入的,程式在運行時載入的地址都是隨機的,正因如此,所以我們在偵錯工具的時候下斷點要用程式的檔案位移加上載入到記憶體的隨機地址。
在有ASLR特性的程式在Mach-o檔案頭都會有PIE的標識,用 otool -hv命令查看二進位,最後一列PIE標識:
tong:crack xxxxx$ otool -hv xxxxxMach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 EXECUTE 38 4272 NOUNDEFS DYLDLINK TWOLEVEL BINDS_TO_WEAK PIE
再找了個沒有ASLR機制的二進位檔案:
tong:1401 xxxx$ otool -hv xxxxMach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 EXECUTE 60 6036 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK
網上也有些去掉PIE標識的軟體,另外還說到有些不完美越獄就是因為ASLR的原因,越獄後,每次重啟都需要重新越獄(原話就是“越獄”,可能就是指現在ios9.1以後的越獄,每次重啟後,都需要重新啟用。)
那麼,我有個問題,如果沒有了ASLR,是不是每個程式都需要指定一個基地址?且不能衝突?否則,如果兩個程式基礎地址都是0,怎麼辦?還望高手告知
iOS app 的 ASLR