作为一个拥有和管理系统最高权限的应用,MagiskApp有一定的使用门槛。差若毫厘,谬以千里,如果不清楚某个开关代表的意义,一个小小的误操作就有可能引发无法开机的严重后果。本文将从官方文档与个人经验出发,为大家介绍MagiskApp。文章内容和截图基于Magiskv2,涵盖新MagiskApp的四个主要功能:安装和卸载Magisk;授予应用Root权限;隐藏Magisk;获取和管理模块。在奔向Magisk的自由天地前,强烈建议你先阅读此文了解少数情况下的应对措施,这也是本文出现在模块推荐文章之前的原因。如果你还不知道如何刷入Magisk的话,可以参考《Android玩家必备神器入门:从零开始安装Magisk》。▍安装和卸载MagiskMagiskApp第一屏便是负责Magisk镜像安装和卸载的界面。这个页面的功能往往和具体的使用场景绑定在一起,因此,下文用四个不同的情境来介绍App这个界面下的几个重要功能。情境一:安装Magisk到原系统上一篇从零开始安装Magisk的文章中,我们遇到的就是这种情境。结合Ramdisk的值,使用Magisk图标旁的「安装」「选择并修补一个文件」功能,Magisk会修改我们提取的镜像供我们用fastbootflash刷入或者fastbootboot引导进入系统。这是MagiskApp最为基本的用途,除了少部分新机型外,这也是刷入Magisk最稳妥的方式。在每一次更新系统后,我们都推荐按此流程重新刷入。情境二:Magisk需要更新或者修复在Magiskv22之前,每一次新版本发布都会提供magisk.zip与magisk.apk两个文件,前者代表着将被注入到系统的Magisk本体,后者则代表着用于管理和使用Magisk的应用。因此每一次打包boot.img镜像或是直接刷入到系统前,都需要下载一次托管于GitHub的magisk.zip,十分不便。在Magiskv22后,.zip包与.apk包合二为一,安装的MagiskApp本体自带了刷写功能,更新了应用本体即等于更新了即将准备注入到系统的Magisk,不必频繁请求网络下载。在检测到系统已经刷入Magisk后,Magisk图标旁的「安装」子界面会多出一个「直接安装」选项。「直接安装」会将和App相同版本的镜像刷入系统。如果Magisk的一些功能莫名其妙地失效,可以尝试使用此功能重新挂载Magisk。而如果需要更新的话,按照前文提到的流程,只需要先在应用内根据提示更新App本体,再点击「升级」按钮就能自动刷入。情境三:进行系统OTA系统在下载更新包后,会在安装前进行系统的完整性检查。很多Root工具因为修改了底层文件,导致系统无法通过此项检查而不能安装OTA。Magisk的优势正是「挂载」而非「改写」。当然,想要完成OTA还需要我们的手动操作。首先,为了防止系统自动安装更新导致更新失败,刷入Magisk后的第一步就是关闭系统的「自动安装更新」选项。类AOSP的系统中,这个项目一般位于「开发者选项」界面;改动比较大的系统中,这个选项可能位于系统更新App。读者应该记得,我们在安装Magisk时的确修改了系统的boot.img或者rcovry.img。因此,在收到厂商推送的更新后,我们需要点击MagiskApp首页的「卸载Magisk」「还原原厂镜像」(不要重启)来恢复原来的镜像。此时理论上OTA应该能够正确安装。禁止更新图片来自官方文档下载OTA并安装后,系统会提示重启,重启后我们会失去Magisk。因而我们还需要按照上一篇文章「打包镜像并刷入」章节中提到的提取镜像修改镜像刷入/引导启动镜像的方式再次安装Magisk。和Magisk本体不同,模块不需要重新安装。Magisk将模块储存在一个文件夹(/data/adb/moduls)中,每次设备开机时,Magisk会自动挂载该文件夹下的模块。原厂镜像无法挂载这些模块,但并不意味着这些模块文件被删除了;只要重新安装Magisk,这些「蜇伏」的模块又能生龙活虎。根据多年以来的刷机经验,分享给诸位一些重装时的技巧:并非每一次系统更新都会大幅改动boot.img或rcovry.img,也就是说,旧系统被Magisk打包过的镜像也极有可能顺利引导启动新系统。如果我们事先保存或者备份过旧系统中经Magisk修改过的镜像magisk.img,系统更新后,在bootloadr界面下用fastbootbootmagisk.img尝试引导启动旧镜像,若系统和Magisk都正常,那么就不必再费心思提取新系统的镜像,点击「安装」「直接安装」,此时「直接安装」的对象是新系统的分区,这样我们就能顺利为新系统刷入Magisk。
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: