文章

Magisk

Magisk

Magisk

Magisk 介绍

Magisk 是如何工作的?

Xposed 通过劫持 Android 系统的 zygote 进程来加载自定义功能,这就像是半路截杀,在应用运行之前就已经将我们需要的自定义内容强加在了系统进程当中。
Magisk 则另辟蹊径,通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。
ecvs5
Magisk 的实现方式就像是一种魔法,当被挂载的 Magisk 分区被隐藏甚至被取消挂载时,原有系统分区的完整性丝毫未损,玩需要 root 验证的游戏、运行对设备认证状态有要求的应用甚至进行需要验证系统完整性的 OTA 更新都没有任何问题。
因此严格来说 Magisk 可以被看作是一种文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改,从稳定性上来看要优于以往任何一种系统框架,这也是当前它在玩机社区广受认可和好评的原因所在。

Root 不能运行的 App

Root 后不能运行的 App

  1. 建设银行
  2. 就医 160
  3. 中国移动

建议隐藏 Root 的 App

  1. MIUI 的手机管家(可能需要重启手机,不然不会生效;或者杀死 App)
  2. 系统的 App
  3. 银行类的 App
  4. Google Play
  5. Netflix
  6. Pokémon Go

安装 Magisk

前提

  1. 解锁 BL(BootLoader)锁
  2. 安装 ADB 环境

TWRP 的官方支持

[[01.Root和刷机基础#TWRP]]

没有官方 TWRP 支持

  1. 修补 boot 镜像文件
    1. 从你的刷机包中提取当前固件的 boot.img 文件,将它传入到安装了 Magisk Manager 的手机中
    2. 进入 Magisk Manager —— 安装(install)—— install —— 修补 boot 镜像文件
    3. 然后选择传入的 boot.img 文件进行生成,并将生成后的 Patchedboot.img 传输到电脑上。

ohvqu

  1. 使用 Magisk 应用对 boot.img 进行重新打包:
    1. 执行 adb reboot bootloader 进入 Bootloader 界面
    2. 执行 fastboot boot Patchedboot.img 来加载生成后的 boot 分区文件获取临时 root
  2. Magisk Manager
    1. 进入 Magisk Manager,选择安装(install)——install——Direct Install(直接安装)才能将临时 root 转换为永久 root

3nvta

  1. 三星华为 等特殊机型的 Magisk 安装方法参见 Magisk 官方帮助文档
  2. 安装模块
    1. 安装完 Magisk 后,我们就可以通过 TWRP 或者 Magisk Manager 刷入获取到的模块了。模块的获取方式可以是 Magisk Manager 自带的模块仓库,也可以是其他第三方论坛(如酷安、XDA 等)。
  3. 卸载 Magisk
    1. 卸载 Magisk 最为彻底的方式就是在 Magisk Manager 中点击「卸载」、「完全卸载」,应用会自动下载刷完 uninstall.zip 卸载包、自动卸载它自己、自动重启。如果你无法进入系统,在 TWRP 中手动刷入 uninstall.zip 卸载包即可。

Ref

Magisk 更新或修复及系统 OTA

Android 玩家必备神器入门:Magisk 核心功能和翻车自救指南 - 少数派

用 Magisk 如何 Root

大致步骤,具体看 刷机&Root实操

  1. 解锁 BL
  2. 下载 ROM 全量包,提取 boot.img
  3. 下载 Magisk apk,修复 boot.img,并把修复的好的 img 保存到电脑
  4. 校验修复的 boot.img
  5. 刷入修复好的 boot.img
  6. 重启

wb0wj

准备

手机解锁了 Bootloader

解锁 OEM
  • 打开开发者模式

先找到【设置】-【关于本机】-【版本信息】-【版本号】

多次点击【版本号】直到出现提示【您已经处于开发者模式,无需进行此操作】

  • 打开 OEM 解锁,开启 USB 调试模式

找到【OEM 解锁】和【USB 调试】并全部开启

  • adb reboot bootloader
  • 解锁:

老版本:

1
sudo fastboot oem unlock

新版本:

1
fastboot flashing unlock

下载 ADB

https://developer.android.google.cn/studio/releases/platform-tools.html

下载 Google USB 驱动程序 (windows 需要,mac/linux 不需要)

https://developer.android.google.cn/studio/run/win-usb

手机 Rom

  • 安装在手机的 ROM

可见:ROM下载 - Magisk中文网

提取 boot.img

payload-dumper-go

GitHub - vm03/payload_dumper: Android OTA payload dumper

执行命令:

1
./payload-dumper-go ../rom/payload.bin

231gg

然后在当前目录可以看到 boot.img 提取出来了

5jlu4

vm03/payload

GitHub - vm03/payload_dumper: Android OTA payload dumper

  • Python
1
python3 payload_dumper/payload_dumper.py 66057b64768347d8b02a16f6d2ada6fd/payload.bin --out data

elqk5

  • Docker
1
2
3
4
docker run --rm -v "${PWD}":/data -it vm03/payload_dumper 66057b64768347d8b02a16f6d2ada6fd/payload.bin --out data

# rom包 66057b64768347d8b02a16f6d2ada6fd/payload.bin 
# 输出目录 --out data
Github Actions

GitHub - yyzq3/actions\_android\_bootimg\_payload\_dumper: 利用Github Actions解包payload.bin并提取boot.img

下载 Magisk app

修复 boot.img

  • 选择刚刚从全量包提取出来的 boot.img
  • 主页→安装→选择并修补一个文件 ,这里选 boot.img

aduu9

  • 修复 boot.img,修复后在 /sdcard/download/ 下会有 magisk_patched-xxx.img
  • Pull 到电脑:adb pull /sdcard/download .
  • 进入 fastboot 修复

校验修复后的 boot.img

fastboot boot <boot 镜像文件> 执行命令后,将会把此镜像传输至手机。手机会暂时地使用这一镜像进行启动,而不会直接将其刷入。你将会看到手机先回到带有 “Fastboot Mode” 字样的 Logo 界面,然后播放开机动画,进入系统。
注意,开机动画显示异常、开机时间比正常开机长、开机后的卡顿比正常情况长、开机后一段时间不显示锁屏等,都不是正常现象。如果出现这类情况,说明此镜像不能正常工作。

请注意区分 fastboot boot boot.imgfastboot flash boot boot.img。前者是试用启动,只是暂时地用镜像启动设备,而不会修改设备;后者是刷入镜像,会将镜像直接写入 Boot 分区。

1
2
adb reboot bootloader 
fastboot boot magisk_patched-27000_lidNV.img

Mac 上一加 ACE2V 失败了:

g2a05

Windows 也失败了:

wzbzs

进入退出 fastboot 模式

进入 fastboot 模式

1
adb reboot bootloader            # 进入 fastboot 模式

查看设备是否连上

  • Fastboot devices

mp3ol

  • 看到此时的手机设备状态是锁着的【DEVICE STATE - locked】
1
 fastboot flashing unlock # 解锁 BL
  • 如果 waiting for any device ,就是 usb 驱动需要更新

手机进入 fastboot mode,如果出现执行 fastboot devices 命令没有设备信息显示的情况,这种情况基本和手机软件没有关系,基本都是 PC 环境所导致,一般是 fastboot 驱动安装问题(和 ADB 驱动程序不是一个东西),也有由于 fastboot. Exe 工具版本太旧导致无法检测到设备的情况。

在 Windows 电脑的设备上查看

pvlby

可以下载个驱动精灵更新驱动

95qts
再次执行 fastboot devices
pl6l0

退出:
按住 电源键 + 音量+ 键 10 秒后退出

刷入修复后的 boot.img

1
fastboot flash boot magisk_patched-26300_Z 5 mKN.img

遇到的问题

问题 1:BL 锁未解锁

如果出现下面这样的,就是没有解锁 BL,需要解锁 BootLoader

m8jfi
成功后:

u8fot

  • fastboot reboot 重启设备;或者长按 电源键 + 音量+
1
fastboot reboot
  • 判断是否 Root 成功,就看 Magisk 当前的版本号 是否有

xqy9e

问题 2: usb_read failed with status e 00002 ed ERROR

emv66

查阅很多资料有说 USB 线不好用或者是 U 口有问题等等,经换线、换电脑、换操作系统的排查发现均不是以上问题。后怀疑应该是刷机包本身有问题或者版本不匹配造成

解决:进入 fasstbootd 模式

1
2
3
4
5
# 一加ACE2V 演示
adb reboot bootloader
fastboot reboot fastboot
fastboot boot magisk_patched-27000_1HVrn.img # Magisk修复后的boot.img
fastboot reboot

wo4gi

会把用户的数据清空,谨慎操作

重启后重新下载 Magisk APP 就是已经 Root 的了

[[Magisk]] 模块

[[Magisk模块]]

升级系统保留 Magisk Root

一加Ace2V 为例演示手机升级系统保留 magisk 完美 root 权限:

查看是否支持 A/B 分区

  • adb shell getprop ro.build.ab_update
  • adb shell getprop | get treble
  • 查看当前分区:adb shell getprop ro.boot.slot_suffix

步骤

zs812

zsryd

其他

Magisk 模块开机无法启动,如何自救?

安装模块后手机出现应用闪退、显示错误和无法开机等种种异常,大概率是使用的某个模块出了问题。

救砖思路:

  • 有救砖模块会自己救砖
  • 没有救砖模块,进行 Recovery 模式,如 TWRP,进入 Magisk 模块目录 data/usb/modules,删除模块
  • 如果还能访问 Magisk App,在模块界面中,「移除」出问题的模块,然后重启以完全卸载此模块
  • 如果已经无法打开 Magisk App,但能使用 adb,用数据线连接电脑,输入 adb wait-for-device shell magisk --remove-modules,这会删除所有模块并重启
  • 如果连 adb 都不能访问,那么请尝试进入安全模式。不同机型安全模式启用方式不同:开机状态下,比较常见的启用方式是按住电源键呼出的重启按钮;关机状态下,一般能通过特定的实体按键激活。进入安全模式后,Magisk 会自动禁用所有模块。再重启一次,模块禁用的状态会被保留,设备应当能恢复正常。
  • 如果装有第三方 Recovery,利用 Recovey 的文件管理功能(高级 > 文件管理),定位到 /data/adb/modules,将其中的问题模块重命名为「remove」,Magisk 会在重启时自动卸载该模块。更简单粗暴的方式是直接删除该目录下问题模块文件。如 TWRP ghrvd
  • 装有第三方 Recovey 时,我们还能将 Magisk. Apk 重命名为 uninstall.zip,在 Recovery 下刷入,这可以完全卸载 Magisk
  • Magisk 检测到手机进入安全模式之后,就会自动禁用所有模块:Android 11 刷入 Magisk 模块后无法开机的解决方法 - 搞机男

Ref

刷入 boot.img 不能开机

如果刷入 magisk.img 不能开机,可以把前面提取的 boot.img 通过 fastboot 刷回去,恢复原 boot,一般都能正常开机!
boot.img 保留一份在电脑,避免出问题了可以自救下!还原 boot 指令

1
2
fastboot flash boot boot.img
# boot.img为原始ROM的boot.img,不是通过Magisk修复后boot.img
本文由作者按照 CC BY 4.0 进行授权