隱藏root教程無效原因分析(二)之Magisk模塊和SafetyNet認證對隱藏root的影響
上期教程主要講了隱藏root保姆級系列教程無效時的解決方法:也就是按照隱藏root保姆級教程的步驟去對某個打不開或閃退的應用隱藏root(一般這個打不開或閃退的應用是銀行類金融類游戲類應用),如果隱藏root后這個應用還是無法正常運行,就安裝個Momo并對Momo隱藏root,然后打開Momo看一下。如果打開Momo有提示我以下列舉的這幾項,你就去解決一下這些提示。

隱藏root保姆級教程第(一)期和第(三)期中官方版面具對Momo隱藏root的步驟

隱藏root保姆級教程第(三)期中Delta版面具對Momo隱藏root的步驟
Momo提示中影響隱藏root的提示(基于最新版本Momo測試):
找到可執(zhí)行程序“su”(+)
找到Magisk
找到Zygisk
找到Riru
找到Xposed框架(+)
找到被Magisk模塊修改的文件(+)
SELinux處于寬容模式(+)
發(fā)現(xiàn)su進程
設備正在運行非原廠系統(tǒng)(+)
權限系統(tǒng)異常
處于調試環(huán)境
已開啟調試模式
PS:以上提示中后面帶“+”的對隱藏root影響較大,不帶“+”對隱藏root有潛在影響或者影響較小(甚至也有可能不影響)。我沒列舉的那些提示不用解決,對隱藏root無影響。我后續(xù)教程我會講以上這些提示的解決方法,請大家拭目以待。
如果你(對Momo隱藏root后)打開Momo沒有以上那些提示,那么你應該往下滑看本篇教程的第(一)(二)部分。
如果你(對Momo隱藏root)后打開Momo有以上那些提示,那么你就去解決一下。直到打開Momo不再提示它們,你就去試試這個打不開和閃退的應用是否可以正常運行。如果還是無法正常運行,那么你應該往下滑看本篇教程的第(一)(二)部分。
一、停用Magisk(面具)模塊
實踐發(fā)現(xiàn),就算在面具里已經(jīng)對某個打不開或閃退的應用隱藏root(一般這個打不開或閃退的應用是銀行類金融類游戲類應用),就算用Momo測試環(huán)境也正常(即打開Momo沒有以上那些提示),這個應用還可能會無法運行。產(chǎn)生這種現(xiàn)象的原因,主要歸咎于以下四點:
一是你安裝的部分Magisk(面具)模塊造成的;二是這個打不開或閃退的應用還檢測應用列表;三是這個打不開或閃退的應用是國外應用;四是部分原生或類原生系統(tǒng)的原因。
一般來說我們安裝的都是國內(nèi)應用,所以大部分是(一)(二)(四)情況引起的。從我長期實踐發(fā)現(xiàn),大部分又是情況(一)引起的,即安裝的部分Magisk模塊引起的。所以本部分內(nèi)容教大家如何正確的停用安裝的Magisk模塊,如何找出影響隱藏root的Magisk模塊。
{如果你是上面我說的情況(三)(四),即這個打不開和閃退的應用是國外應用或者你的系統(tǒng)是原生或類原生系統(tǒng),那么你可以在看完本部分內(nèi)容看本篇教程的第二部分“通過SafetyNet認證”。 }
首先第一個應該停用的Magisk模塊是LSPosed,停用LSPosed后重啟手機,試試這個打不開或閃退的應用是否可以正常運行。如果可以正常運行,那證明是LSPosed導致的打不開和閃退。如果還是無法正常運行,你應該往下滑跳過下面大括號的內(nèi)容,看下一步停用其它Magisk模塊。

停用Magisk模塊的點擊步驟
{有些朋友可能會問了,如果已經(jīng)證明了是LSPosed導致的應用無法打開和閃退,那該如何解決呢?首先LSPosed本身不會導致應用無法打開和閃退,導致應用無法打開和閃退的是你LSPosed里啟用的Xposed模塊。如何判斷是哪個Xposed模塊引起的呢?其實也很簡單,你可以去面具模塊界面,把停用的LSPosed重新啟用(如圖一),然后重啟手機。等開機后打開LSPosed,把啟用的Xposed模塊全部停用(如圖二),然后重啟手機。不出意外的話,這時候這個無法打開或閃退的應用就可以正常運行了。這時候我們再啟用Xposed模塊,我建議一個一個或者兩個兩個來啟用(如圖三)。每啟用一個或者兩個,就重啟下手機試試這個打不開或閃退的應用是否可以正常運行。直到應用再次運行不了,就可以知道是哪個Xposed模塊引起的了。知道是哪個Xposed模塊引起的,就把那個Xposed模塊卸載就行了。 }

圖一把停用的LSPosed啟用,然后重啟手機

圖二把LSPosed里啟用的Xposed模塊全部停用,然后重啟手機

圖三把Xposed模塊一個一個或兩個兩個來啟用
如果停用LSPosed后,這個無法打開或閃退的應用依舊無法正常運行,那么大概率還是其他的Magisk模塊引起的,你需要繼續(xù)停用Magisk模塊。該停用哪些Magisk模塊呢?我這里有個標準,就是關于隱藏root、改善系統(tǒng)環(huán)境、自動救磚的Magisk模塊不要停用,剩余Magisk模塊全部停用??赡苡行┡笥褜Α瓣P于隱藏root、改善系統(tǒng)環(huán)境、自動救磚的Magisk模塊不要停用”這句話不太理解,不知道具體哪些Magisk模塊不能停用,我給大家詳細解答一下。也就是以下大括號里這些Magisk模塊不要停用,剩余Magisk模塊全部停用。
{停用Magisk模塊時,冒號后面這些Magisk模塊不可以停用(如果有安裝):
Shamiko
Riru
Riru-MomoHider
Riru-Enhanced modefor MagiskHide
Universal SafetyNet Fix
Lock SELinux forced mode
Open SELinux
System false encryption
Hide init.rc was modified
Hide debugging environment
開啟SELinux
自動神仙救磚
隱藏系統(tǒng)ROOT }
停用剩余Magisk模塊后重啟手機,再試試這個打不開或閃退的應用是否可以正常運行。如果可以正常運行,那證明是你安裝的Magisk模塊導致的無法打開和閃退。如果還是無法正常運行,你應該往下滑跳過下面大括號的內(nèi)容,看本篇教程的第二部分“通過SafetyNet認證”。
{有些朋友可能會問了,如果已經(jīng)證明了是安裝的Magisk模塊導致的應用無法打開和閃退,那該如何判斷是哪個Magisk模塊引起的呢?其實也很簡單,你可以去面具模塊界面,把停用的Magisk模塊重新啟用。這里的重新啟用是一個一個或者兩個兩個來啟用,每啟用一個或者兩個,就重啟下手機試試這個打不開或閃退的應用是否可以正常運行。直到應用再次運行不了,就可以知道是哪個Magisk模塊引起的了。知道是哪個Magisk模塊引起的,就把那個Magisk模塊移除就行了。 }

移除Magisk模塊的點擊步驟
二、通過SafetyNet認證
前面第一部分我們講了,如果你按照隱藏root保姆級教程的步驟去對某個打不開或閃退的應用隱藏root,且用Momo測試環(huán)境也正常的情況下,它依舊無法正常運行,那么大概率是以下四點原因引起的:
一是你安裝的部分Magisk(面具)模塊造成的;二是這個打不開或閃退的應用還檢測應用列表;三是這個打不開或閃退的應用是國外應用(檢測SafetyNet);四是部分原生或類原生系統(tǒng)的原因。
前面第一部分我們說了停用Magisk模塊,如果停用Magisk模塊后,這個打不開或閃退的應用依舊無法正常運行,那該怎么辦呢?如果這個打不開或閃退的應用又是國外應用,又該怎么辦呢?如果手機系統(tǒng)是原生或類原生系統(tǒng),那又該怎么辦呢?
對于上述問題,我們可以嘗試安裝一個名為“Universal SafetyNet Fix ”的面具模塊,這個名為“Universal SafetyNet Fix ”的面具模塊在我本篇教程置頂評論的鏈接里就可以下載。需要注意的是,“Universal SafetyNet Fix”模塊分為Riru和Zygisk兩個版本。如果你采用的是我“隱藏root保姆級教程第(一)(二)期”的方案,那么你應該安裝Zygisk版的“Universal SafetyNet Fix”。如果你采用的是“隱藏root保姆級教程第(三)期”的隱藏root方案,那么你應該安裝Riru版“Universal SafetyNet Fix”。
安裝完對應隱藏root方案的“Universal SafetyNet Fix ”模塊后重啟手機,再試試這個打不開或閃退的應用是否可以正常運行。如果還是無法正常運行,那么基本可以判定這個應用不僅檢測root還檢測“應用列表”(檢測到了你的“應用列表”存在特定應用)。像這種情況,你應該安裝一個名為“隱藏應用列表”的Xposed模塊,并查找相關教程正確的對這個打不開或閃退的應用隱藏“應用列表”。
最后再科普一下“Universal SafetyNet Fix ”模塊:
“Universal SafetyNet Fix”模塊,應該是自從 MagiskHide 失效以來,在一些部署了基于硬件驗證的設備上通過 SafetyNet 的少數(shù)有效方案。不過它并沒有破解硬件密鑰,而是通過巧妙偽裝的方式,使 Google 采用 Basic(基本) 級別的安全認證,因此可以通過Google的SafetyNet認證。
再科普一下Google的“SafetyNet”是做什么的:
”SafetyNet”在我理解來看一種API接口,可以搜集Android設備信息(主要是安全相關),并對其進行身份核驗。這里的身份主要就是設備的”運行身份”,比如:設備是否root過、設備運行環(huán)境是否安全、設備是否解了BL等,然后核驗信息反饋給相應設備或者檢測應用(譬如銀行類金融類應用)。而且這個名為“SafetyNet”的API用來核驗“運行身份”十分“靠譜”,而且在最近幾年Google又引入了一項名為Key Attestation的功能(基于硬件的密鑰認證)加入到SafetyNet,使root過的設備更難通過SafetyNet驗證。不過好在大部分國內(nèi)應用都沒有采用基于SafetyNet的API驗證接口,我們不用太過擔心隱藏root失效的問題。
再科普一下“Universal SafetyNet Fix ”模塊對隱藏root的意義:
部分國內(nèi)銀行類金融類應用和國外銀行類金融類應用會調用Google的“SafetyNet”API接口,來判斷設備是否root過、設備運行環(huán)境是否安全等。所以當按照隱藏root保姆級教程的步驟去對某個打不開或閃退的應用隱藏root,它還是無法正常運行且用Momo測試環(huán)境也正常時,就可以安裝一個名為“Universal SafetyNet Fix ”的面具模塊試試。尤其是一些原生和類原生系統(tǒng),可能是系統(tǒng)過于“毛胚房”的關系(缺少一些必要的底層文件),像這種情況下更要安裝“Universal SafetyNet Fix ”模塊來使設備通過“SafetyNet”認證。