iOS app 的 ASLR


       這兩天逆向一個程序,發現每次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 xxxxx
Mach 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 xxxx
Mach 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,怎么辦?還望高手告知

             

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM