玩机知识
镜像分区简介与注意
在上一章中,我们介绍到了在使用 Magisk/KernelSU 获取 root 时需提取、修补、刷入 boot 镜像,那么手机中都有哪些镜像分区?它们对我们刷机有哪些影响?在本章我们将进行介绍
分区架构简介
在介绍各镜像分区前我们先介绍两种常见的分区架构(分区架构有 onlyA,AB,onlyA 动态分区,AB 动态分区,VAB 架构),
AB 架构与 VAB 架构
AB 架构:使用了两套 System 以对上一套系统进行备份,防止因系统更新/刷机失败后无法进入系统,可以进行无缝更新,防止因更新而打断用户使用,在进入 A/B 系统失败后,下次重启会自动尝试进入 B/A 系统,代价是由于占用了双份 System 空间,实际并无逻辑分区,本质上是虚拟镜像),所以占用大量用户空间,为解决此问题,谷歌在 Android11 +引入了 VAB 架构。
VAB 架构:逻辑分区依旧不存在,AB 的的动态分区架构中,逻辑分区里面,不管是 system_a 还是 system_b,都是可以刷写 img 镜像文件的,是真实存在的,有空间大小的 AB 分区来回切换的时候,system_a 和 system_b 就会被来回切换着挂载到根目录而 VAB 架构呢?system_a 是有空间大小的,但是 system_b 是没有分配空间大小的(空间占用 0 字节)。不管你切换到 A 分区,还是切换到 B 分区,它都只会挂载 system_a。这个 system_b 不会被使用。具体它是怎么挂载的呢,我也说不清楚,谷歌开发者文档中也没有太多的介绍,我目前是按照我自己的刷机知识及经验推论出来的,不保证是 100%正确,如果有大佬指出我的错误,那简直是雪中送炭: 1、A 分区时,挂载 system_a,并使用所有的_a 分区。
2、B 分区时,将 system_a 重命名为 system_b,同时 0 字节大小的 system_b 也重命名为 system_a,挂载重命名后的 system_b,并使用所有的_b 分区。
3、在系统内 OTA 更新时(假设当前是处于 A 分区,更新成功后为切换到 B 分区),需要更新的系统补丁包,解压后存放在 data 分区,复制一份 system_a,并重命名为 system_b_tmp,放到 data 分区的某个隐藏目录中,将下载好的系统更新包,整合进复制出来的 system_b_tmp,得到更新完整包 system_b_tmp,重启手机,如果成功挂载 system_b_tmp,那么就把 system_b_tmp 替换掉动态分区的 system_a,并重命名为 system_b,原本 0 字节的 system_b 重命名为 system_a,并切换至 b 分区。更新完成。如果 system_b_tmp 更新失败,则不会动原有的分区,system_a 分区依然原样。——来源 Rannki 大佬
实际上 VAB 中不存在 recovery 分区!(注:骁龙八以后的新机型又把他恢复成了一个单独的分区。。),rec 实际被集成到 boot 中的 ramdisk,如果你要刷入第三方 rec,不可以直接将 rec 镜像直接刷入 boot!正确的办法比如先获取 root 后(详见第三章)在系统中使用某些工具(如多统工具籍)修补式刷入,若机子支持临时引导则可在 bootloader 模式下使用 fastboot boot path
命令临时引导进 rec,再在 rec 的高级设置中修补永久安装。
镜像分区
system:我们所使用的系统的文件在放在此处它的大小会影响开机速度,它的修改可能造成无法开机或无法正常使用
product:厂商软件和一些 OEM 的存放处,OEM 厂商通过定制原生 system image 的方式来实现运营商相关 Feature 或需求。为了支持不同的语言、运营商等,每个 system image 都会不同,这样的定制无法通过唯一的 system image 来实现。因此,可以考虑这样的方式:使用一个和 system 分离开的 Prouduct 分区来包含定制内容。
cust: cust 分区用于存储特定用户或特定市场的定制系统文件和配置。它包含了用户定制的系统文件和配置项,用于满足特定用户需求或特定市场的要求。它可能包括特定应用程序、主题、预装软件、语言文件、设置和其他用户定制的内容。一些 ROM 作者经常往此放置广告,因此也戏称为广告分区
boot:①kernel:内核 ②ramdisk 虚拟内存小型恢复分区(recovery)③dtbo:GPU/CPU 调度配置信息等
vendor:主系统分区,主要是包含开发厂商定制的一些应用和库文件,很多时候开发厂商也直接将这个分区的内容直接放入 system 分区。
userdata:用户数据分区,存放用户数据,包括系统和用户安装的应用程序和使用时生成的数据,一是位于 data 的应用私有数据目录,一类是/sdcard 实际为/data/media/0 的挂载的应用公有目录,即我们平时在手机自带文件管理所看到的目录
cache:临时存放数据的分区,通常用于存放 OTA 的升级包。
recovery:存放传统 Recovery 系统的 linux kernel 文件和 ramdisk(VAB 架构中大部分不再存在,而是被集成到了 boot 中)
关于 data 解密与 system 镜像挂载失败的解决办法
data 解密:先提取 vendor 分区修改 data 加密状态(篇幅问题) 通过 fastboot 格式化 data(会清除所有数据!)后解密(不建议解密!!这项是为了您的数据安全着想,若第三方 rec 支持解密 data),参考教程
system 挂载失败解决办法:(仅适用于因 EROFS 导致的无法读写)利用 DNA 脚本(或软件)去除校验后刷入,参考教程:
刷写镜像分区与救砖
由于 VAB 中谷歌引入 Super 动态分区的概念导致我们无法直接在 fastboot 下刷写 system,vendor 等分区,谷歌引入了 fastbootd 模式以方便刷写 Super 中的各类分区,原先的 fastboot 则用来刷写 super,boot 等分区
而第三方 recovery 不仅支持刷写 bootloader 和 fastbootd 能刷写的分区,部分定制还可直接解密 data(第三方 rec 实际上就是很多已经编译好的脚本直接用来跑,使用 rec 刷机又称卡刷)
部分厂商专用刷机工具及所处模式:
Oppo/1+提供的是高通平台的 9008 刷机,也就是深度救砖
当我们 rec 和 fastboot 都进不去时,就只有尝试使用深刷进行救砖,但是现在一般都要有授权才能进入深刷进行刷机,我们可以尝试在某宝找人帮你
注
常见变砖情况
卡一屏: 可能是没有解锁 bl 就去刷机导致的,也有可能是卡 AVB2.0 校验,去除即可
卡二屏: 系统损坏或出现问题,可以先尝试停用所有模块(包括 magisk 和 xposed),也有可能是因为 dm 校验,可以去 rec 里去除 dm 校验试试……
基带/IMEI 丢失: 刷回基带备份即可(所以一定要注意提前备份!!),小米手机若是开发版也可尝试使用
*#*#2527337#*#*
恢复基带?开机键无反应: 先检查是不是电源键坏了或者没电了,如果不是,大概率黑砖了,需要 9008 救砖
进不了系统,开机自动进入 fastboot: 大概率是卡 AVB2.0 校验,去除校验即可,也有可能是分区损坏(乱刷 boot 吧嘻嘻)
进不了 Fastboot,只能进 recovery: 不好说……可能是 boot 损坏,9008 下刷入 boot 试试?
xposed 安装与使用
什么是 xposed?
xposed,一个在不修改软件安装包和系统框架的情况下影响/修改它们的行为的开源框架。
经历了 xposed (Android9 以下)-Exposed (Android8-10)--LSPosed(Android11 +至今)的迭代(非同一批开发者!),而免 root 的框架从太极,应用转生到 LSpatch 的迭代。
它们的作用很大, 比如如果我们想修改系统底层,一方面由于安卓限制我们不能直接修改/System,另一 方面又怕乱改导致进不去系统,这时我们就可以使用 xposed 来 hook 系统框架以防让此类事情发生。
再比如有时我们为了破解或者增删一些软件的功能,会尝试去修改安装包以达到目的,但大部分厂商都加强了对盗版的打击,签名效验/加固 /SSL 固定证书校验等方式层出不穷,这对我们改包带来了很大的困难,有时无从下手,这时我们可以考虑使用 xposed 以达到不修改安装包仍可影响软件行为的目的(服务器验证纯纯自*!)
安装 xposed
(鉴于目前迭代更新速度极快,我们将只讨论 Android10 以上的情况)
首先,如果你的手机能解锁,那么我们更推荐使用 Zygisk-LSposed(解锁方法和利弊详见什么是 Bootloader)解锁后安装 Magisk24.2 +并打开 Zygisk,在 Github 下载模块后在 Magisk 中安装并重启,此时 lsposed 会默认寄生在并显示通知,你也可以选择创建快捷方式到桌面或者安装 Manger(不会影响隐藏效果,riru 另说),进入后看到 已安装则表示安装成功(附图),如果你的设备无法解锁,也可以尝试使用太极(限制模块白名单作用域,更安全,2024 年 5 月 8 日,开发者宣布永久停更太极,应用转生由于稳定性差不再推荐)或者 LSpatch(与 LSPosed 一个开发团队,于 2024 年初停更),在软件内修补后安装,有本地和便携两种模式 本地可以调整模块作用域但必须保证 lspatch 随时保话,便携模式无法调整模块,但无需保活 lspatch 且可在其它设备上使用,但部分软件签名效验很强因此就算过签也无法正常使用这也是免 root 的弊端,且像腾讯类软件一旦破坏原签名将无法调起 WX/QQ 进行支付/登录,在所有接入 TX 第三方平台的软件上生效。(2024.01.09,机圈震动,lsposed 开发者被人恶意辱骂宣布停更,并牵扯多个开源项目,目前 lsposed 已归档)
使用 xposed 模块
使用方法很简单,安装好 xposed 模块与要 hook 的软件, 在 Lsposed 中勾选对应的作用域即可(如果需 hook 系统框架则必须重启),可以在 GitHub、爱玩机工具箱仓库等地方找(除此之外的地方不对安全性作保证!!请谨慎安装使用!)模块,另外注意 LSP 全局化虽好,但不要滥用,毕竟不是所有软件都通用一个模块。如果在勾选时发现有来软件提示在排除列表无法勾选,请去 Magisk 设器置中关闭遵守排除列表或在隐藏的应用中取消勾选。
为什么更推荐使用 Zygisk-LSPosed?
首先,原生 XP 与 EXP 都有一个显著的缺点,无法指定模块 hook 的作用域, 这导致系统启动和应用启动都十分缓慢,LSPosed 可以指定模块的作用域,还可以随时取消,且不用重启(系统框架除外),让我们使用方便了许多,另外从隐藏方面讲,原生 XP 与 EXP 通过直接替换注入达到 hook,很容易被软件检测到,而 Zygisk-LSPosed 在 Zygisk 中运行 XP,发现可能性小(riru-LSPosed 不能在 Zygisk 中运行,原理与原生 xp 差不多,且早已停更),且由于原生 XP 作者很早就停止了开发,虽然后来有 EXP 接手(现在开发者也是鸽子了……),但目前最高只支持 Android10,支持的 xposedAPI 版本比较低了且不支持 native hook 因此不论从哪方面讲,我们都更推荐 Zygisk-lsposed(除非安卓版本过低用不了)
xposed 使用注意事项
请谨慎 hook 系统类应用和系统框架,一方面若 hook 不当会导致无法正常使用(一般卸载模块重启即可解决,建议提前安装救砖模块防止重启卡二屏导致进不了系统,另 一方面如果模块含恶意行为,那么大概率无法感知到,第三方应用同理,因此,日常使用请尽量选择 Github 开源的摸块或可信度高的 xposed.
一般 xposed 都有推荐作用域和对应软件适配版本范围,超出作用域适配范围外的 hook 可能不起作用或部分功能失效。
xposed 并不是万能的,它不能办到所有你想干的事, 特别当软件涉及到检测 xposed 等行为/加固/服务器验证会导致 xposed 失效或软件闪退,
此时应更换软件或老老实实用