为什么 fastboot 线刷要先解 bootloader,即使刷的原厂 rom

2020-12-09 20:34:10 +08:00
 LUREN

不懂就问,看网上的介绍,bootloader 目的是为限制刷第三方 rom,但为什么刷原厂 rom 也要先解 bootloader 呢?有大佬可以从 bootloader 工作原理上解惑吗?

13726 次点击
所在节点    Android
32 条回复
yklaxds
2020-12-09 20:35:40 +08:00
9008 模式‘不解也可以刷
LUREN
2020-12-09 20:38:28 +08:00
@yklaxds 除了这种,好像正常流程都要解 bootloader 。bootloader 是起到验证刷机包的功能吗,好奇为什么原厂 rom,甚至是原厂最新 rom 也要解除 bootloader 验证才能刷
billlee
2020-12-09 21:29:43 +08:00
出于防盗的考虑吧? locked bootloader 的情况下不能通过 fastboot 来抹除数据。
systemcall
2020-12-09 22:02:07 +08:00
解锁 bootloader 也只是解除了 bootloader 自己的限制,设备启动的时候如果 bootloader 的签名不对照样不能启动(所以直接换闪存一般不能启动,要把一些关键的信息保留来通过对 bootloader 的校验和 bootloader 自己的校验
感觉 bootloader 默认情况下应该是限制了启动方式外加对要启动的系统进行校验吧。还是要看平台自己的设计,我记得一些电视盒子就没有那么严格
kimgo110
2020-12-09 22:03:55 +08:00
9008 是可以完全刷成出厂状态,解锁 BL 都能重新锁回去…
TreantLee
2020-12-09 22:31:27 +08:00
@yklaxds 小米新机型加入了限制了 只有售后授权才能 9008
TreantLee
2020-12-09 22:35:13 +08:00
@billlee 应该不是 recovery 直接恢复出厂啊 登录账号之类 倒是通常的恢复出厂也解不掉
mxalbert1996
2020-12-09 23:24:00 +08:00
因为通过 fastboot 刷机的操作就需要解锁,就是这么设计的。
cmostuor
2020-12-09 23:32:25 +08:00
@LUREN bootloader 负责验证 Flash 分区是否完整 是否被篡改, 验证刷机包是否完整那是 fastboot 和刷机包里的 updater 的事。 解锁 bootloader 是为了跳过前面的机制。 安卓是开源的 读那该死的代码比啥瞎比比都强
S179276SP
2020-12-09 23:34:14 +08:00
华为的出厂模式刷机貌似不需要,淘宝刷 EMUI 国行系统国际系统就这样刷的。
cmostuor
2020-12-09 23:34:49 +08:00
@cmostuor 纠正 验证刷机包是否完整那是 recovery 和刷机包里的 updater 的事
dingwen07
2020-12-10 02:52:29 +08:00
三星用官方的 odin 软件刷机就不需要,甚至可以混刷原厂 rom 。中间肯定没有解锁 bl 的过程,因为三星解锁 bl 会熔断 knox 。
Linhuai
2020-12-10 08:18:02 +08:00
来学点东西
taobibi
2020-12-10 10:53:26 +08:00
@TreantLee 这样说来现在国行的小米已经没法刷国际版 ROM 解锁谷歌全家桶了?
flynaj
2020-12-10 11:22:43 +08:00
小米手机不用解可以刷官包,不过要用它的工具并且验证手机关联的帐户。
@taobibi 解 bootloader 就可以随意刷了。
LUREN
2020-12-10 15:30:59 +08:00
@flynaj 不用解可以刷官包指的是用它那个小米助手吗?不用解属于卡刷还是线刷?
yanheqi
2020-12-10 15:57:14 +08:00
很早前最早用 HTC 的手机看过文章,大概意思,就是厂商在那个系统存储区上加密了,加了锁,而这种锁 bootloader,你一般人根本解不开,因为厂商有专门的设备。当时我看到文章说是上百万的设备。加密了 ROM 区,你也就刷不进去,必须要用厂商的放出的方法进行 bootloader 解锁。
yanheqi
2020-12-10 15:58:05 +08:00
以前刷机,弄 xposed 在 HTC 论坛看到的,具体文章,时间久远肯定找不到了,这论坛我也早没上过了,估计也没了。
acess
2020-12-10 16:59:51 +08:00
@yklaxds
@kimgo110
9008 强刷不是什么神奇万能的东西……
我有台稍微新点的小米(仍然很老),就是可以刷进去,但是无法正常开机,开机时只有红色警告,不能继续正常启动。
另一台更老点的机器,9008 刷进非官方固件,其实开机也仍然会警告的,但是能继续正常开机(解不解 bootloader 锁都一样)。

@TreantLee 有点好奇你说的“售后授权才能 9008”是啥意思……反正我手里的机器,最多就是短接一下主板上特定的触点就可以进了。



aleph security 博客写过这方面的东西。没记错的话,Android 机器有一条启动链:PBL->SBL->aboot->Linux kernel
原则上,每个阶段,都会验证下一个阶段要执行的程序代码的数字签名,如果数字签名无效,就拒绝启动。
其中 PBL ( primary bootloader )烧写固化在芯片内,不可更新。短接法进 9008 应该就是这个阶段起作用,最后救砖手段。
SBL ( secondary bootloader ),反正我手里的机器是写在 EMMC (啊,低端机器,没办法)闪存上的。短接 D+/GND 的“USB 深度刷机线”就是这个阶段起的作用。
aboot 就是一般说的 bootloader 、fastboot 了,一般解锁解的就是这一个阶段,说白了和上面都一样,就是程序里写了个条件判断。
然后 aboot 会加载执行保存在 boot 分区的东西,除了 Linux 内核,还有 ramdisk 、启动参数之类的东西(嗯,新机器可能都用 System-as-root,甚至没有 ramdisk 了?)
最后,Linux kernel 启动后,按照配置,会继续验证 system 分区的数字签名(通过 dm-verity,所以 magisk 需要修改 boot 分区才能解除这个限制)。
acess
2020-12-10 17:06:32 +08:00
就我的理解,改写闪存里面保存的东西( SBL 、aboot 、boot 分区、system 分区……),想改总是可以改的,最不济还可以把闪存芯片用热风枪吹下来。
所以刷机锁最关键的地方并不是拒绝你刷写,而是你刷了非官方以后,能通过检查数字签名发现了刷了非官方,然后拒绝启动——虽然闪存上的东西能改,但是 PBL 是固化不能改的,一切一切的根源都来自 PBL,所以才把 PBL 叫“信任根”。(苹果的 checkm8 漏洞,就是 PBL 的限制被人研究出办法来绕过了)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/733887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX