摘自维术《当我们谈论解锁 BootLoader 时,我们在谈论什么?》

维术:虚拟框架作者,太极、两仪等优秀项目作者,个人很崇拜的大佬
在他的公众号里看到了这篇文章...惊为天人,于是写了这篇笔记
原作者写作的时候很遵守学术规范...我这个就是纯粹自己写着玩的
原文地址:https://mp.weixin.qq.com/s/-9VKyraHq5Qt2PTzqVqZOg

在之前的文章中,我们初步介绍过bl锁的概念。
不过当时我自己也对这玩意没什么理解...只是知道刷机必然需要解锁bl,否则没办法修改系统文件。
因此,在我们之前的解锁、修复小米平板四项目中,这个任务看起来才如此困难...
(再次警告大家Miflash一定要选择全部删除选项)

根据维基百科的介绍,Bootloader 是负责启动计算机的软件
它的作用可以简单描述为:初始化各组件,并且启动计算机系统
如果不法分子希望通过“安全测试”之类的方法启动恶意系统盗取用户资料或是为了洗白盗窃赃物,那么bootloader可能需要某种机制来防止这种事情的产生
在bl的启动机制中,系统厂商创造了“bl锁”

首先,我们简要介绍一下bl的启动机制
当我们按下电源键,CPU芯片会加载运行在只读存储上的PBL (Primary Boot Loader),这一阶段的作用是上电自检并启动下一个组件。SBL(Secondary Boot Loader),现在又被叫做 XBL (eXtended Boot Loader)。
SBL的作用是初始化硬件环境和代码安全环境,并且验证、加载下一个组件ABL(Android Boot Loader,也叫 aboot)
值得一提的是,SBL放在了可修改的eMMC上。因此,SBL可以用来恢复系统,这也就是我们之前使用过的9008模式。因为9008强制刷写了eMMC,并且比ABL更加底层,因此可以在硬件不损坏的前提下救活任何一部失手成砖的设备。这也为盗窃销赃打开了方便之门,因此小米官方为这一过程也设置了加密。

“SBL执行完之后会验证并加载ABL,ABL的主要功能是从设备验证并加载boot.img然后启动Linux Kernel进而启动用户操作系统,根据选择的不同,可能会进入到Android系统或者Recovery模式。ABL 还有一个很重要的功能,它提供了一个 fastboot 协议,用户可以用 PC 通过 USB 连接设备,通过这个 fastboot 协议控制设备;我们通常所说的「线刷」,小米的兔子界面以及我们通过命令行工具 fastboot 刷机实际上就是运行在ABL下。正因ABL功能比较复杂,它内部其实运行着一个 mini 的操作系统,这个操作系统就是 lk(Little Kernel)。”
因此,我们常用的刷机模式基本都是在ABL层面实现的。

不过为什么我们刷入的系统可以在bootloader的验证过程中得以启动呢?原理其实很简单,解锁 BootLoader 实际上就是让 BootLoader 启动链上某些阶段的签名验证不生效。通常来讲,厂商解锁bl的过程是强制ABL不验证boot.img

bootloader存在一个信任传递机制。PBL内容不可变,所以是可信的。因此通过PBL验证的XBL总是可信的,通过可信XBL的ABL也总是可信的。
因此,有时厂商在设计上的问题让自行解锁成了可能。
不过,有时PBL代码存在问题,这就造成了某些芯片级的漏洞。比如我们熟悉的联发科的芯片,就曾经出现过不少 BootROM 漏洞。这使得用户可以自行通过互联网设备的某些工具解锁特定型号。
如果厂商没有完整地实现整个安全启动链,那也是可能强制解锁的。比如老的华为设备,其解锁码存放在可刷写的proinfo分区下,用户就可以拿别的设备的解锁码和proinfo分区刷入直接通过验证。曾经的vivo对boot.img的验证并不严格,用户自定义一个fastboot就可以直接解锁。

最后,虽然我个人基本不锁bl,但如果他人希望得到解锁bl的设备中的数据会更加容易。这也是我们原则上推荐锁bl的原因...
尽管宅宅的手机基本不会离手,并且里面也没什么重要数据...
对于未解锁的用户来说,即便哪天你的设备真的丢失,那么其实也很难获取到您手机中的数据了。
除非您真的是什么富二代或者手机中存储了国家机密(

最后修改:2023 年 01 月 04 日
请我喝杯可乐?