Magisk¶
警告
由于Andorid技术进展,在Pixel设备上,采用了动态分区以及双启动分区技术,特别是Android 10开始采用了内核安全加强,导致 TWRP Recovery管理器 已经无法在Pixel的Android 10上工作。所以,本文重新更新撰写,按照最新版本安装方法重新撰写。
Android作为开源系统,基于Linux的内核以及开源软件,形成了远比iPhone iOS开放的手机生态系统。Andorid虽然不鼓励普通用户root系统,但是对于geeker和haker还是提供了及其强大的 root
功能,你可以完全掌控Android。
不过,从Android 6.0(棉花糖)开始,Google阻断了之前流行的root方法,即直接将su守护程序放置到 /system
分区,并在启动时取得所需权限。也就是现代的Android系统已经不允许任何方式修改 /system
分区。
什么是 Magisk¶
出于增加安全性的考虑,Google 推出了 SafetyNet 这样的检测,以确保 Android Pay 等一些 App 的安全运行。
Magisk 是出自一位台湾学生 @topjohnwu 开发的 Android 框架,是一个通用的第三方 systemless 接口,通过这样的方式实现一些较强大的功能。
Magisk通过启动时在 boot
中创建钩子,把 /data/magisk.img
挂载到 /magisk
,构建出一个在 system
基础上能够自定义替换,增加以及删除的文件系统,所有操作都在启动的时候完成,实际上并没有对 /system
分区进行修改(即 systemless
接口,以不触动 /system
的方式修改 /system
)。这样就实现了绕过SafetyNet使用root的方法。
备注
看到这里,你是不是觉得这种方式很熟悉,非常类似 Docker Atlas 中镜像和文件层的概念?
Magisk可以实现的功能包括:
集成root (MagiskSU)
root和Magisk的日志功能
Magisk Hide(隐藏 Magisk 的 root 权限,针对 Snapchat、Android Pay、PokémonGo、Netflix 等)
备注
这个Magisk Hide功能可能比较有用,在使用StarBucks、银行软件,如果Android系统被root过,StarBucks应用软件会拒绝启动,通过这个方法可以避免问题。
为广告屏蔽应用提供 systemless hosts 支持
通过 SafetyNet 检查
Magisk 功能模块
安装Magisk¶
在 Root Pixel设备 中介绍了如何安装Magisk,但是方法只适合非Pixel设备。对于 Pixel 3 这样的采用动态分区以及双启动分区技术的设备,需要参考 topjohnwu / Magisk 官方最新方法操作。
一定要从GitHub上 topjohnwu/Magisk 官方下载release版本,其他不可靠来源的安装都会导致重大安全隐患。例如,安装最新release版本 Magisk app
安装完 Magisk 之后,首次运行,请检查主屏幕,是否检测到
Ramdisk
,类似下图:
这里的 Ramdisk
检测表示使用设备是否在启动分区使用了 ramdisk
,如果设备没有boot ramdisk,则需要采用Recovery方式,即要激活Magisk需要每次都重启到recovery。例如,对于三星Galaxy S10手机,需要采用boot into recovery。
对于使用 boot ramdisk
的设备,需要获取 boot.img
的副本
对于 不
使用 boot ramdisk
的设备,则需要一份 recovery.img
的副本
现在需要检查设备是否使用独立的
vbmeta
分区:如果官方firmware软件包中有一个
vbmeta.img
,就表明你的设备使用了vbmeta
分区也可以使用如下命令检查设备:
adb shell ls -l /dev/block/by-name | grep vbmeta
输出中有 vbmeta
, vbmeta_a
或者 vbmeta_b
,则表示设备是使用独立的 vbmeta
分区的。例如,我的 Pixel 3 输出就有:
...
lrwxrwxrwx 1 root root 16 1971-01-10 12:45 vbmeta_a -> /dev/block/sde10
lrwxrwxrwx 1 root root 16 1971-01-10 12:45 vbmeta_b -> /dev/block/sde22
...
我的 Pixel 4 输出显示:
lrwxrwxrwx 1 root root 16 1970-07-02 10:21 vbmeta_a -> /dev/block/sde10
lrwxrwxrwx 1 root root 16 1970-07-02 10:21 vbmeta_b -> /dev/block/sde26
lrwxrwxrwx 1 root root 16 1970-07-02 10:21 vbmeta_system_a -> /dev/block/sda12
lrwxrwxrwx 1 root root 16 1970-07-02 10:21 vbmeta_system_b -> /dev/block/sda13
使用 boot ramdisk
使用独立的
vbmeta
分区基于第一条,应该使用
boot.img
镜像
Patching Images¶
Pixel 3 下载LineageOS镜像¶
我之前在 Magisk root Android设备并支持OTA更新 采用Google Android官方下载的 factory image 中的
boot.img
,但是目前我已经不再使用Google 官方 Android ,改为 Pixel 3上安装LineageOS 19.1 。所以参考 How to Root LineageOS ROM via Magisk Boot.img
但是,需要注意 Pixel 3上安装LineageOS 19.1 下载的 lineage-19.1-20220517-nightly-blueline-signed.zip
解压以后有一个 payload.bin
,但是没有常规的 system.img
vendor.img
和 boot.img
等分区文件。实际上,这些文件都包含在 payload.bin
这个大文件中,我们需要解压缩这个文件来获得镜像文件。
payload.bin
不是zip或rar压缩文件,而是一种Payload Dumper Tool的特殊应用程序格式
cyxx / extract_android_ota_payload 提供了一个
extract_android_ota_payload.py
,执行以下命令先安装需要的python模块:git clone https://github.com/cyxx/extract_android_ota_payload.git cd extract_android_ota_payload python3 -m pip install -r requirements.txt
然后执行解压
payload.bin
文件:python3 extract_android_ota_payload.py payload.bin
就能获得 boot.img
文件(以及其他)
将
boot.img
推送到手机中:
adb push boot.img /sdcard/Download/boot.img
在手机上运行前面安装好的
Magisk
程序,然后点击Install
按钮,此时Magisk
会让你选择需要patch的文件,则选择刚才上传到手机中的boot.img
文件,并继续
此时手机终端会提示生成了文件: /storage/emulated/0/Download/magisk_patched-24300_DHRRP.img
(其实就是位于 /sdcard/Download/
目录下)
将patched过的镜像下载到电脑上:
adb pull /sdcard/Download/magisk_patched-24300_DHRRP.img
将Android设备重启到Bootlader/Fastboot模式:
adb reboot bootloader
输入如下命令验证设备已经进入 fastboot
模式:
fastboot devices
可以看到:
912X1U972 fastboot
将补丁过的
boot.img
刷入:fastboot flash boot magisk_patched-24300_DHRRP.img
此时补丁过的boot镜像就会刷入到手机的当前激活的slot:
Sending 'boot_b' (65536 KB) OKAY [ 0.330s]
Writing 'boot_b' OKAY [ 0.278s]
Finished. Total time: 0.937s
对于使用独立的
vbmeta
分区,可以使用以下命令对vbmeta
分区进行patch:fastboot flash vbmeta --disable-verity --disable-verification vbmeta.img
然后重启设备:
fastboot reboot
完成后检查
Magisk
应用,可以看到是Installed
状态
为Pixel 4编译LineageOS 20(Android 13)¶
现在我的最新实践是采用 为Pixel 4编译LineageOS 20(Android 13) ,所以 Pixel 4上安装LineageOS 20 可以直接使用自己编译过程生成的 boot.img
来进行补丁(也就是跳过上述从官方安装包解压 boot.img
的步骤)。方法和上述 Pixel 3 实践类似:
将
boot.img
推送到手机中:
adb push boot.img /sdcard/Download/boot.img
在手机上运行前面安装好的
Magisk
程序,然后点击Install
按钮,此时Magisk
会让你选择需要patch的文件,则选择刚才上传到手机中的boot.img
文件,并继续
此时生成patch过的文件可以通过 adb ls /sdcard/Download/
看到,名为 magisk_patched-26300_NHXW1.img
将patched过的镜像下载到电脑上:
adb pull /sdcard/Download/magisk_patched-26300_NHXW1.img
然后将手机重启到
fastboot
模式:
adb reboot bootloader
输入如下命令验证设备已经进入 fastboot
模式:
fastboot devices
可以看到:
9B1AFS000009SC fastboot
将补丁过的
boot.img
刷入当前激活的slot:
fastboot flash boot magisk_patched-26300_NHXW1.img
此时显示补丁过的boot镜像是刷入到手机当前激活的slot:
Sending 'boot_b' (65536 KB) OKAY [ 1.790s]
Writing 'boot_b' OKAY [ 0.485s]
Finished. Total time: 2.705s
这里只flash了当前激活的
boot_b
,那么还有一个boot_a
需要flash,则使用命令(需要明确指定分区boot_a
,前面没有明确指定boot_b
则是因为boot_b
是当前激活分区,所以用boot
指代就行 ):
fastboot flash boot_a magisk_patched-26300_NHXW1.img
完成显示:
Sending 'boot_a' (65536 KB) OKAY [ 1.830s]
Writing 'boot_a' OKAY [ 0.496s]
Finished. Total time: 2.686s
重启设备:
fastboot reboot
旧版Magisk安装(归档)¶
警告
以下旧版安装方法是非Pixel设备的操作方法,仅归档参考。我在 Pixel 3 设备实践见前文。
安装 Magisk 需要解锁 Bootloader 并刷入第三方 Recovery。
从 Magisk GitHub release 下载 Magisk-v20.3.zip 和 MagiskManager-v7.5.1.apk
首先安装 TWRP - 见 Root Pixel设备 或者 TWRP Recovery管理器
进入TWRP,点击
Advanced => ADB Sideload
进入sideload模式,就可以通过sideload方式安装 Magisk:adb sideload Magisk-v20.3.zip
备注
也可以把Magisk的zip文件push到手机的 /sdcard
目录下,然后通过 TWRP 的 Install
功能进行安装。
旧版Magisk Manager¶
将 MagiskManager-v7.5.0.apk 推送到手机的
/sdcard
目录:adb push MagiskManager-v7.5.0.apk /sdcard
然后在手机端通过文件管理器安装MagiskManager
Magisk安装选项¶
备注
Magisk安装选项有3个,需要注意,不是所有手机环境都适合这3个选项,错误选择可能导致问题。
Preserve AVB 2.0/dm-verity
这个选项用于禁止或保护Android Verified Boot。dm-verity是用于确保系统没有被篡改的机制。由于我们需要修改系统,所以大多数设备在安装Magisk时需要禁用这个功能。但是,也有设备需要激活dm-verity,否则不能启动。
默认启用 Preserve AVB 2.0/dm-verity
Preserve enforced encryption
默认Android加密用户数据和激活kernel enforce,这样你必须使用加密。一些用户可能希望关闭设备加密,则需要disable这个选项。
默认启用 Preserve enforced encryption
Recovery mode
注意Recovery mode 是在不支持A/B分区设置的Android设备上使用,此时Magisk是直接安装到system-as-root设备中。这种情况下,你需要将Magisk安装到recovery image而不是boot image。
注意这个选项和设备相关。在 Pixel和Pixel XL 设备上不要启用这个选项,否则安装以后会导致下次重新安装出现报错 Unable to detect target image
,见下文。
Unable to detect target image¶
在Magisk Manager中重新安装Magisk时遇到报错:
! Unable to detect target image
! Installation failed
解决方法时获取设备的stock boot image的副本。你可以从安装选项中选择 Select and Patch a file
然后浏览并找到boot image文件来打补丁。
Magisk使用¶
隐藏root¶
备注
新版 Magisk 去除了 MagiskHide
,取代以 Magisk Zygisk 实现root隐藏
由于Google服务等很多Android上应用、游戏和服务都十分重视保护自己的版权信息,所以这些软件检测到手机遭到root就会拒绝认证设备。
Magisk Hide可以绕过这些检测。
首先进入 Magisk Manager 检测是否通过了谷歌服务中的 SafetyNet 安全性测试
想要通过 SafetyNet 测试,最好使用原厂系统,或者是值得信赖的第三方 ROM 正式版(也就是 Official Builds),以减少不必要的麻烦。
如果是 basic integrity
这一项没有通过认证,那说明你遇到了大麻烦:试着开启「Magisk 核心功能模式」或者卸载所有模块,如果还是没有通过,那么你可能需要换一个系统或者第三方 ROM 了。
如果是 ctsProfile
这一项没有通过,那说明你的 ROM 没有通过其兼容性测试,一些 beta 版本或者国内厂商的 ROM 可能出现这种问题。这时我们下载使用 MagiskHide Props Config 模块往往能够解决问题。
在 Magisk Manager 的侧边菜单中找到 Magisk Hide 项,选中我们想要隐藏的目标 App 即可。最近更新的 Magisk 19.0 版本还加入了「应用组件」层面进行 Magisk Hide 的功能。
至于对哪些应用进行 Magisk Hide,这个就要看具体需要: 一般来说,Google Play 服务和商店是必须的,但也请注意这条来自开发者的注意事项:如无必要,不要随意在 Magisk Hide 列表添加 App 而造成滥用(Do not abuse MagiskHide!)。
如果你还不放心,还可以去 Magisk Manager 的设置中打开「隐藏 Magisk Manager」。此时 Magisk Manager 将会进行一次重新安装,以便打乱软件包名来躲过对 Magisk Manager 的检测。
替代 SuperSU 进行 root 权限管理¶
身兼 root 工具的 Magisk,直接使用 Magisk Manager 中的默认设置就能用得舒心。App 向你提请超级用户权限的时候,用户可以选择永久同意、一定时间内同意或者是拒绝,超时之后没有进行选择,那么便会选择拒绝。
获取、管理 Magisk 模块¶
模块的本质,是将原本需要玩家繁复操作的玩机过程与 Magisk「不改动系统」(Systemless-ly) 的特性结合在一起,并进行打包和分发。模块极大地简易了玩机操作,一个小小的 .zip 包文件可能包含了另一套全字重字体,可能囊括了一整套内核参数调教方案,可能附加了一些额外的小功能或是界面美化……模块只是简易了玩机操作的实践,但并没有将它无害化,该翻车的操作还是会翻车,这个时候模块的管理就变得尤其重要。
任何有能力制作模块的开发者都能分发自己制作的模块,也可以选择是否提交到官方的模块仓库。
在模块仓库中点击下载,便会自动开始下载、刷入的步骤,刷入完成后你可以选择关闭或者是直接重启生效。模块更新也是一样的步骤。但如果你是手动下载的模块 .zip 包,一切都需要手动。进入模块菜单项,点击下方的加号图标进入文件目录选取目标模块 .zip 包,即可开始模块的刷入或是更新。
如果「翻车」进不了系统:
无论是提前安装好,还是翻车后进入 TWRP 安装,你都需要用到 Magisk Manager for Recovery Mode 模块(仓库中搜索 mm 即可)。翻车后进入 TWRP 中的终端输入使用指令即可开始管理模块,详见该模块的使用说明。
参考¶
Magisk Installation 官方文档,基本参考
What is Magisk? 官方介绍
How to install Magisk 官方安装指南
Magisk - Installation and troubleshooting - 这是非常详细的排查手册,如果你遇到Magisk安装使用问题,请参考该文档