目前 ROOT 方案大眾所知的大多是 Magisk
這篇文章介紹 Apatch 順便提一下 KernelSU
KernelSU 提供兩種補丁方式
GKI mode (Generic Kernel Image)
LKM mode (Loadable Kernel Module)
前者為替換 kernel image 達到載入 ROOT 權限
後者為植入 module 到 first stage 的 ramdisk
運作原理大概與 Magisk 稍微相似
# KernelSU 支援清單
android12 kernel 5.10.x
android13 kernel 5.10.x
android13 kernel 5.15.x
android14 kernel 5.15.x
android14 kernel 6.1.x
這部分就不著墨太多,有興趣請到 github 查看
https://github.com/tiann/KernelSU
開始進入正文,以下教學使用 Apatch 為範例
https://github.com/bmax121/APatch
Apatch 僅支援 ARM64 系統
Kernel 核心支援 3.18 - 6.1
示範手機 OnePlus Ace 3 (12R)
kernel-5.15.123-android13
https://i.imgur.com/8VnObhO.png
#1 安裝 Apatch manager
commit f6feb6a build (需登入github)
https://reurl.cc/kyypQ3
或是我提供的 mirror
https://www.mediafire.com/file/8qm202ebbc8ngy1
#2 Patch boot.img
https://imgur.com/a/kFVL6MG
#3 刷入 patched boot.img
這部分還要教學嗎 ╮(′~‵〞)╭
#4 輸入 master key 後取得 ROOT 權限
https://i.imgur.com/eXUyfN5.png
至此順利的話就完成 ROOT 部分
這邊稍微提一下 Play Integrity 的淵源
大約是 Android 5 ~ 7 時代引入了 SafetyNet 驗證
這時候還只是單純的驗證系統 properties
屬於基礎性的驗證,而且大多數 APP 不會驗證 SafetyNet
Android 8 之後強化了 bootloader
BL 解鎖後會讓 keymaster 拒絕硬體金鑰驗證
SafetyNet 也就過不了硬體層級的驗證
這部分可以騙過 SafetyNet 讓它以為手機是早期機型
不會強制採用硬體層級驗證,歷史的眼淚如下
https://github.com/Displax/safetynet-fix
好了這兩年 Google 開始放大招了 (╥﹏╥)
Play Integrity 只信任 TEE 環境提供的簽章驗證
並且將 Integrity API 導入到 APP 開發環境
讓開發者於上架 APP 時可以選擇不同等級的驗證
BL 解鎖後的手機只會擁有 Basic Integrity
https://imgur.com/a/FX2lGqt
中國開發者 5ec1cff 提供了一套 ROOT 模組
透過攔截 keystore 交互過程並插入自訂金鑰串
目前只支援 Android 11+
https://github.com/5ec1cff/TrickyStore
手機解鎖狀態將透過 PlayIntegrityFork 修復
https://github.com/osm0sis/PlayIntegrityFork
此篇教學僅基於 TrickyStore / PlayIntegrityFork
相互配合來達成 Strong Integrity
使用下方兩個 APP 進行測試
# chiteroman/KeyAttestation
https://reurl.cc/YqqDax
# Simple Play Integrity Checker
https://reurl.cc/myypOA
#1 安裝 TrickyStore 1.1.3 模組
https://reurl.cc/eyyp4x
#2 安裝 PlayIntegrityFork v10 模組
https://reurl.cc/Ree2lr
#3 進行一次重新開機後,模組頁面如下
https://i.imgur.com/UkSyMvl.png
#4 由於只需要修復系統 props 環境
採用 Scripts-only 模式再次安裝 PlayIntegrityFork
#4-1 移動至目錄 /data/adb/modules/playintegrityfix
並新增 scripts-only-mode 檔案
https://i.imgur.com/PoGxHnD.png
#4-2 重新安裝 PlayIntegrityFork 並重新開機
https://i.imgur.com/iZMihIc.png
https://i.imgur.com/ePlMglA.png
#5 TrickyStore 內建 AOSP keybox
無法完成硬體級別認證 (Key Attestation)
https://i.imgur.com/43MvOHE.png
#5-1 下載有效的 keybox.xml
https://www.mediafire.com/file/kp3ineqxuruungs
#5-2 移動 keybox.xml 至 /data/adb/tricky_store
https://i.imgur.com/JG4ytod.png
#5-3 再次驗證 Key Attestation
https://i.imgur.com/IBQ4B7j.png
#6 驗證 Play Integrity / SafetyNet
https://imgur.com/a/281HKyO
至此大功告成
如果有其他疑問歡迎一起討論