【OSG】iOS9開始引入的內核完整性保護(KPP)功能是如何實現的
與iOS9一起推出的內核完整性保護又稱為「KPP」,這對於arm64越獄帶來了新的問題。 有效地觀察到,在修補內核代碼(通常在較舊的越獄中)之後,設備會一段時間後會靜默地恐慌。 很明顯,有些東西會檢查內核代碼。 這個東西在內核之外,很快就顯現出一種在工作中的管理程序。
到目前為止,我仍然感到驚訝的是,沒有人對KPP進行了一個寫作 - 至少沒有人知道。 所以,我將嘗試解釋hypervision如何工作。 具體的實施細節可能會在稍後的時間提供,只要我有時間。現在,不用多說,我們走
第1部分(設置)
KPP位於一個Mach-O可執行文件,緊隨壓縮內核塊之後,在kernelcache img4內。 iBoot刻錄出KPP圖像,將其載入到0x4100000000,並在EL3中運行
EL3
_start(monitor_boot_args *mba)
這結構體有如下幾項
struct monitor_boot_args {n uint64_t version;n uint64_t virtBase;n uint64_t physBase;n uint64_t memSize;n struct kernel_boot_args *kernArgs;n uint64_t kernEntry;n uint64_t kernPhysBase;n uint64_t kernPhysSlide;n uint64_t kernVirtSlide;n};n
KPP使用調用_start(NULL)的蹦床來覆蓋自己的Mach-O頭,0x4100000000,並安裝了兩個異常處理程序sync_handler和irq_handler。 回想一下AArch64異常表:
VBAR_ELN異常類型描述+0x000SynchronousCurrent EL with SP0+0x080IRQ/vIRQ+0x100FIQ/vFIQ+0x180SError/vSError+0x200SynchronousCurrent EL with SPx+0x280IRQ/vIRQ+0x300FIQ/vFIQ+0x380SError/vSError+0x400SynchronousLower EL using AArch64+0x480IRQ/vIRQ+0x500FIQ/vFIQ+0x580SError/vSError+0x600SynchronousLower EL using AArch32+0x680IRQ/vIRQ+0x700FIQ/vFIQ+0x780SError/vSError
ExceptionVector具有兩個處理程序的位置
接下來,它解析內核及其kexts(來自__PRELINK_INFO)
- save __TEXT, __DATA segments to map list
- save __TEXT, __DATA::__const zones to hash list
最後,如果啟用 – which – it(以及其他)以下寄存器
查看完整版:【OSG】iOS9開始引入的內核完整性保護(KPP)功能是如何實現的-『iOS安全』-看雪安全論壇
推薦閱讀:
※為什麼很多 iOS app 都有秒退現象?有什麼好方法避免它?
※現在的安卓手機到底有沒有iPhone的流暢度?
※有什麼iOS進階的書推薦嗎?
※如何評價在GitHub 上 3000 fork庫的代碼水平?
TAG:iOS |