MagiskApp能在A/B分区设备上保留Magisk进行系统更新。若App首页的A/B一栏值为「是」,我们只需要在重启安装OTA前点击「安装」「安装到未使用的槽位」选项即可。不过,经知名用户Clyd反映,部分在OTA时带有分区校验的系统,如Pixl的ROM使用此方法大概率会发生引导循环。出现相关问题还是直接一点,转用上文提到的通用刷入方式。
携Magisk进行系统OTA的流程可以总结为:关闭「自动安装更新」收到OTA「卸载Magisk」/「还原原厂镜像」下载并安装OTAA/B分区为「是」的设备:不重启「安装」「安装到未使用的槽位」重启以更新系统。其他设备:重启以更新系统重新安装Magisk。
如果遇到无法更新的问题,尝试不清除用户数据的刷写系统全量包方式,而后重新安装Magisk。一加等机型在检测到Magisk后会自动下载全量包。常备全量包,翻车不慌张。情境四:完全卸载Magisk在「卸载Magisk」命令下还有一个「完全卸载」,点击此命令会在重启设备后卸载一切已经安装的模块和Magisk本身。这个命令仅在我们想和Magisk说永别的时候用。想要卸载单个模块请参考本文第四章内容;Magisk使设备出现问题时,建议排查MagiskHid和可疑模块,而非完全卸载。▍授予应用Root权限Android是以Linux为内核的系统,在Android上获取root类似于在Linux上使用了root帐户。有了root权限,我们便能修改底层文件、注入脚本、调节系统性能、读取更详细的数据……当然,这一切并不需要我们手动去写脚本,我们需要做的只是通过Magisk将root权限授予给能够完成这些事情的应用们。索取root权限的请求由应用发起,Magisk此时会跳出类似于WindowsUAC的弹窗供用户确认。想要防止恶意应用模拟点击,可以在MagiskApp的设置中开启「生物识别验证」和「点按劫持保护」两个选项。授权了应用之后,Magisk默认会在该应用使用root权限时弹出通知,并且记录相关的日志。这两个选项隐藏在MagiskApp的超级用户界面中,通过单击已授权的应用名称,便能找到控制通知和日志的开关。用户授予root权限是将手机的完整控制权交给这个应用,因此请务必保证此应用值得信任。如果你在主力机上使用root权限,更应该保持克制和敬畏。此处另外提一些关于授予root权限的小技巧:不少应用索取root其实只是为了获得系统底层的部分权限,这部分授权其实无需root,我们大可以用adb输入一次命令授予,比如我们之前聊过的Buoy,或是GsamBattryMonitor等电池监控类应用。
Root被认为是一种低效、慢速的处理方式,Shizuku应运而生。它可以被当作root权限与需要root权限的应用之间的「中间商」,通过root/adb提升权限后,再为那些需要使用系统API与adb权限的应用授权,这比root权限更高效。如果你在使用「小黑屋」、「冰箱」、「AppOps」等应用,建议先安装Shizuku后再通过它来为这些应用授权。
▍通过MagiskHid隐藏Magisk正因为root权限和将要提到的模块所带来的潜在危害,一些涉及版权、金融、通讯功能的应用会事先检查系统是否「完整」,它们若发现系统已root或者挂载了一些模块,会以此为由弹出警告乃至直接退出,还可能会对用户可获取的内容做一些限制。为了解决这类应用对用户所造成的不便,Magisk设计了MagiskHid功能。首先,点击App首页右上方的齿轮,勾选「MagiskHid」,这时,Magisk超级用户界面会多出一个MagiskHid子界面。在针对应用隐藏Magisk前,我们可以先试试检验设备能否能通过位于App首页的「测试SaftyNt证明」。点击位于首页的测试按钮,第一次测试需要下载额外的组件,测试还要求设备能正常访问Googl,因此请确保网络正常。不出意外的话,不久后会弹出「通过证明」的文字。如果basicIntgrity没有通过,说明系统镜像完整性有问题,这一般发生在第三方ROM中,我们可以尝试安装UnivrsalSaftyNtFix[1]模块或者更换ROM来解决这个问题。如果ctsProfil没有通过,大概率是设备或ROM未经认证。安装MagiskHidPropsConfig[2]模块一般能解决此问题。模块的安装请跳转到第四章查阅。确认SaftyNt测试通过后,接下来我们勾选想对其隐藏root事实的应用。一般说来,下列四类应用常常有root检测行为和反制措施:提供版权和地区限制内容的应用:如GooglPlay检测到root后,设备会变成「未认证」状态,我们将无法搜索到Ntflix等流媒体应用。
支付应用:如云闪付,该应用在检测到root后会弹出警告,并直接隐藏指纹支付选项。
通讯应用:如ZohoMail,它会在检测到root后提示用户登出。
游戏:部分游戏有严格的反作弊机制,检测到root后可能拒绝用户游玩。
通过自己实际遇到的问题或者是翻阅网络资料,我们可以确定对哪些应用隐藏Magisk。在MaigskHid界面直接点击某应用的选择框,Magisk会自动为我们勾选应用下的组件。如果在勾选之前就已经打开过该应用,我们可能还需要清除一次应用的缓存乃至数据。根据作者的说法,此功能属于「dirtyhack」,在使用时应尽量保持克制。不含有root检测机制的应用,不建议勾选。如果在上述设置后,还发现有应用检测到root权限,我们可以打开Magisk设置里的「隐藏Magisk应用」选项。点选后,Magisk会更改自己的应用名,用户需要通过搜索或者创建的快捷方式访问改名后的MagiskApp。这样能防止在低版本系统中,部分应用扫描用户应用列表时检测到Magisk进而判定系统已root。▍获取和管理模块模块是大部分用户选择安装Magisk的原因,它们是一个个开箱即用的系统修改包或修改包的组件。模块既可以从MagiskApp中自动下载安装,也可以从网络下载然后手动安装,部分拥有root权限的应用还可以越过用户的授权直接安装模块。由于不同的Android设备差异实在太大,同样的模块难以保证完美适用于所有设备;不同的模块、应用和用户对系统的其他修改有时候会产生冲突,进而导致一系列严重问题;一些模块本身也像应用那样,需要有一个逐渐完善的过程;也有的模块本来就是不完整的,需要其他模块的辅助。因此,安装模块千万要遵循流程。设备出现问题后也不要慌,有的是简单且易操作的解决方案。安装模块的基本流程安装模块分三步:阅读模块说明确认相关依赖状态安装模块并重启。这三步中,最重要的当属第一步,因为它直接决定了当前模块是否符合自己的需求,能不能安装使用。下面以能在MagiskApp找到的内容拦截模块EnrgizdProtction为例,详细讲解这三步。我们进入MagiskApp的第四屏模块界面,利用搜索找到EnrgizdProtction。点击模块右下的文件夹图标即可阅读它的说明。由于是从GitHub上获取,如果模块说明无法加载,你可以尝试开启设置中的「安全DNS」。这些应用内模块实际上都托管在MagiskModuls[]库下,我们也可以选择使用电脑访问相关的Rpo[4]来阅读模块说明。模块说明中最重要的是两部分内容:模块的依赖和用法。许多模块是协同其他模块或App工作,在安装这些模块之前,必须确定相关依赖的状态。例如,EnrgizdProtction告诉我们它需要SystmlssHosts这个模块,Magisk20.4之前的版本还需要安装BusyboxforAndroidNDK。它使用的方法是命令行,因而我们还需要一个Android平台的终端,比如说Trmux[5]。确认这些依赖都装好了之后,点击「安装」,重启系统,这个模块才算安装完成。如果安装的模块和你素未谋面,那么本文不建议一口气安装很多个。不在App列表中的模块,例如NotoCJK,模块说明在发布处,安装模块需要使用模块界面最上方的「从本地安装」命令,然后选择下载的模块压缩包。模块翻车后的自救安装模块后手机出现应用闪退、显示错误和无法开机等种种异常,大概率是使用的某个模块出了问题。针对不同情况,目前有五种比较简单的自救方式:如果还能访问MagiskApp,在模块界面中,「移除」出问题的模块,然后重启以完全卸载此模块。如果已经无法打开MagiskApp,但能使用adb,用数据线连接电脑,输入adbwait-for-dvicshllmagisk--rmov-moduls,这会删除所有模块并重启。如果连adb都不能访问,那么请尝试进入安全模式。不同机型安全模式启用方式不同:开机状态下,比较常见的启用方式是按住电源键呼出的重启按钮;关机状态下,一般能通过特定的实体按键激活。进入安全模式后,Magisk会自动禁用所有模块。再重启一次,模块禁用的状态会被保留,设备应当能恢复正常。如果装有第三方Rcovry,利用Rcovy的文件管理功能(高级文件管理),定位到/data/adb/moduls,将其中的问题模块重命名为「rmov」,Magisk会在重启时自动卸载该模块。更简单粗暴的方式是直接删除该目录下问题模块文件。装有第三方Rcovy时,我们还能将Magisk.apk重命名为uninstall.zip,在Rcovry下刷入,这可以完全卸载Magisk,潇洒弃坑走人。
Magisk让设备具有了极高的自由度的同时,也让其承担着很大的风险。但欲戴其冠,必承其重,因此本文在展示MagiskApp的四项核心功能的同时,也附带阐述了如何携Magisk正常进行OTA,如何解决模块翻车等重要问题。这些应当措施能最大限度地保证设备数据的安全,不过想要防「翻车」于未然,最重要的还是提高自己的鉴别能力与信息搜集能力,谨慎对待那些来源可疑的模块和应用。引用链接[1]UnivrsalSaftyNtFix: