*观前提示:本篇内容仅限Android的Bootloader!
| 主笔:雨绕
GuaiTech / “Tech Inspires”
与隔壁的【安卓浅谈】呼应,我们都希望厂商“给解bl锁”。那么我们天天喊要解的是什么东西捏?这里就和大家唠嗑唠嗑传说中的“Bootloader锁”。
BL是啥?
在嵌入式系统中,通常并没有像BIOS那样的固件程序。因此整个嵌入式系统内核的加载和启动就完全由BootLoader来完成。
从硬件层面上说,开机就是给系统上电,此时硬件电路会产生一个确定的复位时序,确保CPU是最后一个被复位的器件(因为假如CPU被复位后并开始运行时,但其他硬件(I/O设备、内存等)内部的寄存器状态可能还没有准备好,就有可能导致硬件初始化错误)。当所有部件完成复位后,CPU开始执行第一条指令,该指令所在的内存地址是由CPU厂商指定且固定的(不同的CPU可能会从不同的地址获取指令,但该地址必须是固定的),该地址对应的程序就是名为Bootloader。
——
引用自:https://blog.csdn.net/CrazyMo_/article/details/114768692(遵循 CC 4.0 BY 版权协议)
所以BL是锁死在CPU里的。这也是所谓“9008强解”是如何存在的。
谷歌官方是这样定义Bootloader的:
A bootloader is a vendor-proprietary image responsible for bringing up the kernel on a device. The bootloader guards the device state and is responsible for initializing the Trusted Execution Environment (TEE) and binding its root of trust. The bootloader also verifies the integrity of the
boot
andrecovery
partitions before moving execution to the kernel.——
引用自:https://source.android.com/docs/core/architecture/bootloader
【注意】听取一些提交者建议,为“保留原汁原味的美”,我们在此一般引用的都是原文。(虽然会增加阅读门槛)
实际上,Bootloader所做的工作就是“负责在设备启动时引导操作系统”,同时验证一些乱七八糟的完整性。
BL如何工作
1.加载并初始化内存。
2.AVB校验。(Android 8.0 及更高版本)
3.验证分区。(如果没解BL直接刷boot分区会卡黑砖!)
*这里可以给大家举个例子。在KSU作者weishu的一期哔站视频中,他演示了不root使用KSU的方法,其中提到了一个叫做Dirty Pipe(CVE-2022-0847)的漏洞。
原视频:https://www.bilibili.com/video/BV1jH4y1n7yr/
*(如果各位对这个漏洞感兴趣可以留言或者告诉我,我可以单独讲讲。)
*然而,在这种情况下倘若动了boot分区,将会直接过不去校验。所以被称之为“临时root”
理所应当。
4.确定启动哪个槽位。(如果是A/B mode)
5.刷写一些东西,貌似和OTA有关?(如果有懂的可以评论区科普一下)
6.加载启动映像。