oppo reno3 的 root 步骤

一个月前 oppo reno3 终于开放深度测试了,今天终于申请下来,火速 root,顺带还学习了一波安卓启动保护的知识。关键词:oppo reno3 5g,PDCM00,root,twrp,recovery。

一、手机参数和准备

  • 型号:oppo reno3(等于 oppo reno3 5g)PDCM00
  • 操作时间:2020年08月23日
  • ColorOS 版本:V7
  • 安卓版本:10
  • 刷机包版本:正式版-A.18
  • root 方式:twrp。

下载深度测试 apk,申请,等待 30 天后申请通过。

建议准备:到官网下载最新的 ozip 回来,刷入手机,保证ozip 和手机里的操作系统是一致的,防止刷 image 不匹配。

二、解锁 bootloader(会丢失所有数据)

申请通过后,点击“开始深度测试”会进入bootloader,也可以 adb reboot bootloader 进入。 他家的 bootloader 长的巨丑无比,屏幕上就两行非常非常小的字,本来想拍照展示的,但字实在太小了无法拍摄,这两行小字是:

1
2
Oppo Verify pass
fastboot_unlock_verify OK

输入 fastboot flashing unlock

1
2
3
4
5
➜ fastboot flashing unlock
(bootloader) Start unlock flow

OKAY [ 24.942s]
Finished. Total time: 24.942s

之后根据屏幕提示,进行按键操作,然后会重启并且丢失所有数据,证明 bootloader 已解开。

三、刷入 twrp 错误的实践过程(请全文先看完,不然会变砖,还要救回来)

使用wzsx150大神提供的 recovery-TWRP-3.4.1B-0313-OPPO_RENO3-CN-wzsx150.img,下载刷入。

1
fastboot flash recovery recovery-TWRP-3.4.1B-0313-OPPO_RENO3-CN-wzsx150.img

错误示范:fastboot reboot recovery ,直接“高级——安装 root”。会导致无法再次进入 recovery,导致无法进入 system,只能进入 bootloader。

然后就变成砖了,可以使用下面的【选择二】救回来。

四、刷入 twrp 正确的实践过程

1
fastboot flash recovery recovery-TWRP-3.4.1B-0313-OPPO_RENO3-CN-wzsx150.img

以下两步二选一:

选择一:

fastboot reboot recovery 后,一定一定一定要在高级里,关闭 AVB,否则无法再次进入操作系统,无法再次进入 recovey,只能用【选择二】去修复。

选择二:

假设你忘了关闭 AVB 了,下面是唯一的救砖办法,关掉 check 就可以开机或进入 recovery 了。

先到官网 https://www.coloros.com/rom/firmware?id=1769171177539911788 下载完整的、对应版本的 ozip 回来,再用工具转化为 zip(网上很多工具),从里面把 vbmeta.img 提取出来,之后执行:

1
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img

执行时一定要带上 --disable-verity --disable-verification

之后,就可以用 twrp 里“高级——安装 root” 的功能进行安装了(它会刷入 SuperSU 和 Magisk,是比较新的版本),据作者说 3.4.1b 的 twrp 不要刷其他 Magisk,可能会抽风,所以就用它自带的了。

wzsx150 也《救假砖》里提到过该方法:

fastboot模式下,使用adb-fastboot工具,刷入vbmeta.img(可以是官方的原版文件,也可以是修改版的)注:要求adb-fastboot工具必须支持这些参数,使用我发布的一键刷入工具里的fastboot工具即可。

五、效果

1
2
3
4
adb shell
OP4ADD:/ $ su
OP4ADD:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0


六、关于变砖的原因猜测

我自己实践的路线是,先进行了错误示范,然后用 【选择二】把砖救回来了,关于这个现象,网上有人提到过,例如:https://www.juyifx.cn/article/354879296.html

PS:首次刷入recovery,进入twrp-recovery后,需先关闭AVB校验,再签名boot或者刷入ROOT,不会可能导致手机系统破坏,不能开机了。 重要说明必须执行关闭avb2.0校验否则刷完root或者rec开机会变假砖提示系统损坏[汗]

毕竟自己是做安卓的,这个知识点还是可以稍微学习一下的。 首先,我们没有主动修改 vbmeta.img,但问题解决了,说明是参数起了作用,于是去追 fastboot 的源码

1
2
3
4
fastboot --help
........
--disable-verity Sets disable-verity when flashing vbmeta.
--disable-verification Sets disable-verification when flashing vbmeta.

https://android.googlesource.com/platform/system/core/+/master/fastboot/fastboot.cpp#976

1
2
3
4
5
6
7
8
9
10
11
12
13
// There's a 32-bit big endian flags field at offset 120 where
// bit 0 corresponds to disable-verity and bit 1 corresponds to
// disable-verification.
//
// See external/avb/libavb/avb_vbmeta_image.h for the layout of
// the VBMeta struct.
uint64_t flags_offset = 123 + vbmeta_offset;
if (g_disable_verity) {
data[flags_offset] = 0x01;
}
if (g_disable_verification) {
data[flags_offset] = 0x02;
}

可以看到刷入过程中会写一个 flag 到手机里,各自影响 1bit。 这两个 bit 的作用在下方代码: https://android.googlesource.com/platform/external/avb/+/refs/heads/master/libavb/avb_vbmeta_image.h

1
2
3
4
5
6
7
8
9
10
11
12
/* Flags for the vbmeta image.
*
* AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED: If this flag is set,
* hashtree image verification will be disabled.
*
* AVB_VBMETA_IMAGE_FLAGS_VERIFICATION_DISABLED: If this flag is set,
* verification will be disabled and descriptors will not be parsed.
*/
typedef enum {
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED = (1 << 0),
AVB_VBMETA_IMAGE_FLAGS_VERIFICATION_DISABLED = (1 << 1)
} AvbVBMetaImageFlags;

说实话,这段注释我读的云里雾里,反正就是跳过两种校验,它们之间的关系我不敢妄言,有点像包含关系,贴三个链接自行理解吧:

反正就是,vbmeta 会验证其他分区的可信程度;我们修改了 recovery,校验失败,就无法进入 recovery;我们用 twrp 安装了 magisk 和 supersu,就无法进入 system。后来我们关掉了校验,一切就正常了。

关掉校验有两种方式,对应上面的【选择 1】和【选择 2】,一个是用 twrp patch 掉 boot,一个是修改 vbmeta。