初探神器Magisk
Magisk是出自一位台湾学生@topjohnwu开发的Android框架,是一个通用的第三方systemless接口,通过这样的方式实现一些较强大的功能,比如常见的设备root。相较于传统的SuperSU,它能够针对性的隐藏Magisk自身,当被挂载的Magisk分区被隐藏甚至被取消挂载时,原有系统分区的完整性丝毫未损,玩需要root验证的游戏、运行对设备认证状态有要求的应用甚至进行需要验证系统完整性的OTA更新都没有任何问题。
图1 Magisk
1 Magisk & SuperSU
在改机圈,Magisk和SuperSU都可以用来获取设备root。前者是目前最新的方式,后者是较老的手法。它们的目的都一样,只是采取的技术手段不同,可以从以下三个方面来区别认识。
1.1 system & systemless
Magisk使用systemless的修改方法而收获广大用户,因为它不修改任何系统文件。原理简单的说就是在系统boot时将其img挂载到自己的分区下,构建一个虚拟文件系统,和system分区没有任何关系。Magisk的优势也就很明显了,以不修改系统文件为前提,从而达到修改系统文件的效果。通过这种方式绕过Google SafetyNet,系统OTA升级,部分被禁软件都可以正常使用。
相反,SuperSU一旦被安装就会修改系统,改动会影响在SafetyNet保护下的APP。所以一些理财软件,Pokemon Go…可能无法使用,这些应用对root权限很敏感,这使得SuperSU在这方面的发挥受到一些限制,另外android 8.0之后也只能使用Magisk来root,我们后面会讲。
1.2 modules
另外一个区别就是Magisk支持自定义模块。Magisk配套有Magisk manager用来支持用户管理和安装自定义模块。SuperSU没有模块功能,但是可以通过使用SuperSU获取root权限之后,安装其他框架,比如Xposed来安装各种模块。
1.3 closed & open
另外一个区别是,Magisk是开源的,SuperSU代码没有开源。值得一说的是,SuperSU的作者Chainfire在2015年09月29日的时候,将SuperSU项目移交给了一家叫Coding Code Mobile Technology LLC 的公司(简称 CCMT)。包括SuperSU源码、签名以及Chainfire自己的开发者账号。
1.4 android avb
SuperSU目前仅支持至android 7.1,并且已经不再更新。Magisk支持安卓5.1以上,并支持最新android 10.0。在android 8.0之后,系统中引入了avb(Android Verified Boot)。avb是google设计的验证启动流程,用于保护boot/recovery/system/vendor分区的完整性。每一个partion可以设置为hash或者是chain partion方式。avb为我们现在称为SafetyNet的系统奠定了基础。system的改机方式,avb状态为红色,可以通过SafetyNet API或者其他代码检测出来。systemless的root方式,由于它没有改动任何系统文件,可以通过avb的检测,另外还可以选择性的隐藏root。
2 Magisk & Xposed
在大部分用户眼里,Magisk与另一款名为Xposed的神器有着高度的相似性。从实现手段上看二者的工作机制都是 拦截 。Xposed通过替换Android系统的zygote进程(app_process文件)来加载自定义功能,这就像是暗度陈仓。在应用运行之前就已经将我们需要的自定义内容强加在了系统进程当中。前面提到过,Magisk通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk分区)里发生。在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。
图2 Magisk
3 Magisk 安装使用
Magisk的内部实现非常复杂,但是安装非常简单。只需要三步即可。
进入Bootloader界面
adb reboot bootloader
刷第三方recovery包TWRP
fastboot flash recovery TWRP.img
在TWRP中刷入你下载的Magisk安装包
adb shell reboot recovery
3.1 update error 1
如果出现update error 1,则表示刷入失败,需要修复boot.img。
- 推送boot.img到sdcard上
- 进入recovery模式
- 点击install
- 点击Install image
- 选择刚才推送的boot.img
- 选择Boot partition
完成以上步骤之后,再去刷入Magisk包即可。