banner
raye~

Raye's Journey

且趁闲身未老,尽放我、些子疏狂。
medium
tg_channel
twitter
github
email
nintendo switch
playstation
steam_profiles

安卓手机root二三事

image

起因是这样的,很久之前(大概 1 年前吧),有一部 Google Pixel5 手机,是拿来做测试的。自然是少不了折腾,magisk、太极等都安排上。结果在一次操作失误后,把手机重置了。于是又只能重来一遍,结果在刷入 Magisk 的时候失败了,导致手机无限重启,当时还挺后悔,想着用不了了,后来就晾在一边没管了。

结果上周,心血来潮给手机充了个电,居然又能用了?时间居然真的可以修复 bug 吗🤣

安卓这块确实不是很熟,于是决定恶补一下这里的知识

一些概念#

  1. OTA

OTA(Over-The-Air)映像是指通过无线方式传送到设备上的系统或应用更新包。OTA 更新允许设备制造商、运营商或应用开发者将更新推送到用户设备,而用户无需连接到计算机或使用其他外部工具。

简单来说就是平常系统升级的时候,通过无线的方式去下载获得的包。具体 OTA 升级原理是要看这个 android ota 升级原理 3,不过此处我们简单知道概念就好

  1. Magisk
    关于 Magisk 的原理,可以理解为 magisk 是挂载一个与系统文件隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。

DraggedImage

既然跟分区相关,那就得了解下分区是什么
类比 Windows 磁盘的分区,本质上是在磁盘上去划分一段段连续的存储区域,并且按照一定的格式来组织数据。就像 Windows 有启动分区一样,回顾下启动过程:

  1. CPU 执行 BIOS 初始化、自检等程序,加载磁盘内容到物理内存 0x7c00 处
  2. 从引导扇区的 Boot 程序开始执行
  3. ……

安卓本质上也是一个 Linux 系统,启动过程自然也是可以类比,那么这里就不难理解安卓的分区了:

  • boot 分区:包含启动加载器需要的所有信息,如内核。
  • system 分区:包含 Android 操作系统本身。
  • recovery 分区:包含恢复模式的代码,用于更新、备份或恢复系统。
  • userdata 分区:包含用户数据和应用程序。
  • cache 分区:用于存储临时数据和 OTA 更新。

这些信息往往写在磁盘最开的几个 KB 中,如果你了解 mbr、gpt 等磁盘分区表,就不难理解了
在 Windows 上可以通过 WinHex 直接查看启动分区的内容,那么安卓如何操作呢?

可以通过 dd 命令:

adb shell su -c "dd if=/dev/block/bootdevice/by-name/boot_a of=/sdcard/boot.img"
adb pull /sdcard/boot.img

由于现在安卓系统支持 A/B 分区方案,即有两个独立的系统分区, boot_aboot_b ,这样的设备可以在一个分区上运行系统,同时在另一个分区上进行后台更新,然后在下一次重启时切换到新的分区,从而实现无缝的系统更新。

注:本质上 Linux 一切皆文件,boot_a 实际指向的是 /dev/block 下的设备文件

redfin:/ # ls -al /dev/block/bootdevice/by-name/boot_a
lrwxrwxrwx 1 root root 15 1970-01-04 03:33 /dev/block/bootdevice/by-name/boot_a -> /dev/block/sda6

那么这里 Magisk 要做什么也就呼之欲出了,本质上就是提取 boot.img 的内容,然后给它打 patch,实现一个 Magsik 的分区

  1. bootloader

如果还记得操作系统启动流程,那么 bootloader 实际上一个很重要的功能就是初始化内存、加载磁盘的引导分区。所以只要能进入 bootloader 界面,那么手机大概率都是有救的

adb reboot bootloader
  1. fastboot

fastboot 类似于 adb,可以与设备的 bootloader 通信。主要用来解锁,以及刷入

注意设备必须处于 bootloader 模式(也称为 fastboot 模式)才可以使用 fastboot

常用的 fastboot 命令:

  1. fastboot devices:列出连接到计算机的设备

  2. fastboot flash [partition] [filename]:刷写指定的分区。例如,要刷写 recovery 分区:

fastboot flash recovery recovery.img
  1. fastboot boot [kernel] [ramdisk]:不直接刷写到设备,而是仅从给定的内核 /ramdisk 引导

  2. fastboot erase [partition]:擦除指定的分区

  3. fastboot oem unlock:解锁设备的 bootloader

安装 Magisk#

大体上来说可以分为几个步骤

  1. 解锁 bootloader
  2. patch boot.img
  3. 刷入 patch 后的 boot.img
  4. 通过 Magisk Manage 安装 Magisk

第一步要看手机品牌而定,Google 在这一块还算是比较开放的
同时,Pixel 最好的一点就是,官网已经提供好了设备的 image: 下载链接

只需要确定好手机版本号即可(不像小米,还需要有积分才能申请到开发版)

DraggedImage-1

下载好,解压找到 boot.img ,传入手机,通过 Magisk Manage 打 patch,导出。

从 patch 后的 img 启动,这个操作一般是没有风险的,如果直接 覆盖则可能出问题(不过问题也不太大)

fastboot boot magisk_patched-26100_nRGcd.img
Sending 'boot.img' (98304 KB)                      OKAY [  2.521s]
Booting                                            (bootloader) boot.img missing cmdline or OS version
OKAY [  1.577s]
Finished. Total time: 4.145s

启动之后,此时就能临时获得 root 权限。当然重启后就会失效,因为重启后还是从原来的 boot.img 启动

这时候可以通过 Magisk Manage 刷入即可,这种方式相对来说更加安全

问题回顾#

后来回顾了下,原来是这个问题:

也有一些其他的解决方案,如关闭验证等,但是我尝试了没啥用就没管了

 Magisk boot 刷入无限重启问题 

Magisk 模块推荐(内空)#

本来是应该要推荐一些的 Magisk 模块的,奈何我已经很少用安卓了,安装 Magisk 的目的也就是为了 root 而已🤣

 刷了 Magisk 之后装什么?我推荐这 20+ 个模块 

参考#

 玩机的必备操作 —— Pixel3 安装 Magisk 
 [已解决] Pixel 4 刷入 Magisk 在 fastboot 模式下找不到设备 和如何救砖 
 [原创] 云手机底层技术揭密 : Android 系统启动与 Magisk 原理 
 [原创] Magisk 学习之刷入 vbmeta.img 及关闭 avb2.0 校验 

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。