IVSnote App

通過SafetyNet認證:實作Magisk模組將Google服務套件Systemless化

2021-1-6


前言

想來跟大家分享一下,關於「MIUI 中國開發版/體驗版」等官方系統,如何通過 SafetyNet 驗證的方法。

畢竟這個問題也折騰我快一年的時間了,網路上很多方法都沒有點到中國版本 MIUI 會驗證失敗的原因,直到前幾天,我終於發現到這個方法…

基礎技巧

首先,個人是比較偏好使用官方版系統而不是官改版系統,好處是更新不用看發佈者的心情,而且還能體驗最新功能,不過我們都知道,官方版 MIUI 沒有內建 Gapps (谷歌全家桶),這就是為什麼 SafetyNet 不通過的原因之一。

但是 OpenGapps 不支援 MIUI 怎麼辦?

很多人應該都知道去灌什麼 Google Installer 之類的,或是從小米應用商店下載 Youtube 讓系統自己幫你裝上。

之後人們會安裝 MagiskSU 來取得 root 權限,去修改 build.prop 檔案裡的 ro.build.fingerprint 成穩定版的 fingerprint ,因為要使用已經通過 CTS 驗證的指紋,才可以繞過 Google 大佬的驗證。

(當然也可以下載 MagiskHide Props Config 模組來用)

問題討論與解決方式

可是現在問題來了,照理來說該過的 CTS profile 居然還是沒過,也檢查過像是 MagiskHide 的部分,該隱藏的程式都隱藏了,這到底是為什麼?

在本人花了非常多的時間不斷爬文研究過,終於在最近有了結果:

一般來說,國際版 rom 大多有內建 Google 服務,都是被安裝成系統應用程式,放在 /system 分區內的 /priv-app 裡面,而中國開發版的 rom 除了用刷機包刷入 gapps 之外的方法,基本上 Google 服務都是被安裝在 /data 分區裡面,而 /data 分區裡的應用程式可以任意移除。

所以為了通過那該死的 CTS profile 驗證,所有基本的 Google 服務都必須被安裝在 /system/priv-app 下。

相信這時候應該會有些人知道可以用 App Systemizer 模組,來做到將應用程式變成系統應用程式,不過考慮到更新 MIUI 之後又要再做一次系統應用程式化這樣太麻煩,因此可以把基本的 Google 服務做成模組來 Systemless 化,將來更新可以只刷入 Magisk 就好。

進階技巧

至於那個 Magisk 模組要怎麼製作?

其實很簡單。
先準備一個「Magisk Template.zip」,壓縮檔裡面會有若干檔案和資料夾,然而我們只管:

(1) module.prop
(2) system

首先 module.prop 裡面的參數需要修改,比較重要的是 id 這個欄位一定要改,數值隨機即可,不更改可能會被其他模組蓋過。

接著是 system 資料夾,我們可以當成放在裡面的檔案是要覆蓋到真正 system 分區的,因此我們在裡面建立一個名為 priv-app 的資料夾,並在 priv-app 資料夾裡再建立以下資料夾:

GmsCore
GoogleLoginService
GooglePartnerSetup
GoogleServiceFramework
Phonesky

並分別放入Google服務的apk安裝包

com.google.android.gms.apk
com.google.android.gsf.login.apk
com.google.android.partnersetup.apk
com.google.android.gsf.apk
com.android.vending.apk

再分別將安裝包重新命名成與資料夾名稱相同,結果如下:

GmsCore/GmsCore.apk
GoogleLoginService/GoogleLoginService.apk
GooglePartnerSetup/GooglePartnerSetup.apk
GoogleServiceFramework/GoogleServiceFramework.apk
Phonesky/Phonesky.apk

一切完成後,從 Magisk Manager 裡刷入剛剛製作的.zip,重新啟動手機就會發現 CTS profile 呈現通過狀態。