[討論] ROOT & Play Integrity 解決方案
目前 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
至此大功告成
如果有其他疑問歡迎一起討論
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.137.245 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Android/M.1725672033.A.187.html
留言