V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LUREN
V2EX  ›  Android

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

  •  
  •   LUREN · 2020-12-09 20:34:10 +08:00 · 8565 次点击
    这是一个创建于 1227 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    32 条回复    2021-01-05 13:37:50 +08:00
    yklaxds
        1
    yklaxds  
       2020-12-09 20:35:40 +08:00 via Android
    9008 模式‘不解也可以刷
    LUREN
        2
    LUREN  
    OP
       2020-12-09 20:38:28 +08:00
    @yklaxds 除了这种,好像正常流程都要解 bootloader 。bootloader 是起到验证刷机包的功能吗,好奇为什么原厂 rom,甚至是原厂最新 rom 也要解除 bootloader 验证才能刷
    billlee
        3
    billlee  
       2020-12-09 21:29:43 +08:00
    出于防盗的考虑吧? locked bootloader 的情况下不能通过 fastboot 来抹除数据。
    systemcall
        4
    systemcall  
       2020-12-09 22:02:07 +08:00
    解锁 bootloader 也只是解除了 bootloader 自己的限制,设备启动的时候如果 bootloader 的签名不对照样不能启动(所以直接换闪存一般不能启动,要把一些关键的信息保留来通过对 bootloader 的校验和 bootloader 自己的校验
    感觉 bootloader 默认情况下应该是限制了启动方式外加对要启动的系统进行校验吧。还是要看平台自己的设计,我记得一些电视盒子就没有那么严格
    kimgo110
        5
    kimgo110  
       2020-12-09 22:03:55 +08:00 via Android
    9008 是可以完全刷成出厂状态,解锁 BL 都能重新锁回去…
    TreantLee
        6
    TreantLee  
       2020-12-09 22:31:27 +08:00
    @yklaxds 小米新机型加入了限制了 只有售后授权才能 9008
    TreantLee
        7
    TreantLee  
       2020-12-09 22:35:13 +08:00
    @billlee 应该不是 recovery 直接恢复出厂啊 登录账号之类 倒是通常的恢复出厂也解不掉
    mxalbert1996
        8
    mxalbert1996  
       2020-12-09 23:24:00 +08:00 via Android
    因为通过 fastboot 刷机的操作就需要解锁,就是这么设计的。
    cmostuor
        9
    cmostuor  
       2020-12-09 23:32:25 +08:00
    @LUREN bootloader 负责验证 Flash 分区是否完整 是否被篡改, 验证刷机包是否完整那是 fastboot 和刷机包里的 updater 的事。 解锁 bootloader 是为了跳过前面的机制。 安卓是开源的 读那该死的代码比啥瞎比比都强
    S179276SP
        10
    S179276SP  
       2020-12-09 23:34:14 +08:00 via Android
    华为的出厂模式刷机貌似不需要,淘宝刷 EMUI 国行系统国际系统就这样刷的。
    cmostuor
        11
    cmostuor  
       2020-12-09 23:34:49 +08:00
    @cmostuor 纠正 验证刷机包是否完整那是 recovery 和刷机包里的 updater 的事
    dingwen07
        12
    dingwen07  
       2020-12-10 02:52:29 +08:00 via iPhone
    三星用官方的 odin 软件刷机就不需要,甚至可以混刷原厂 rom 。中间肯定没有解锁 bl 的过程,因为三星解锁 bl 会熔断 knox 。
    Linhuai
        13
    Linhuai  
       2020-12-10 08:18:02 +08:00 via Android
    来学点东西
    taobibi
        14
    taobibi  
       2020-12-10 10:53:26 +08:00
    @TreantLee 这样说来现在国行的小米已经没法刷国际版 ROM 解锁谷歌全家桶了?
    flynaj
        15
    flynaj  
       2020-12-10 11:22:43 +08:00 via Android   ❤️ 1
    小米手机不用解可以刷官包,不过要用它的工具并且验证手机关联的帐户。
    @taobibi 解 bootloader 就可以随意刷了。
    LUREN
        16
    LUREN  
    OP
       2020-12-10 15:30:59 +08:00
    @flynaj 不用解可以刷官包指的是用它那个小米助手吗?不用解属于卡刷还是线刷?
    yanheqi
        17
    yanheqi  
       2020-12-10 15:57:14 +08:00
    很早前最早用 HTC 的手机看过文章,大概意思,就是厂商在那个系统存储区上加密了,加了锁,而这种锁 bootloader,你一般人根本解不开,因为厂商有专门的设备。当时我看到文章说是上百万的设备。加密了 ROM 区,你也就刷不进去,必须要用厂商的放出的方法进行 bootloader 解锁。
    yanheqi
        18
    yanheqi  
       2020-12-10 15:58:05 +08:00
    以前刷机,弄 xposed 在 HTC 论坛看到的,具体文章,时间久远肯定找不到了,这论坛我也早没上过了,估计也没了。
    acess
        19
    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
        20
    acess  
       2020-12-10 17:06:32 +08:00
    就我的理解,改写闪存里面保存的东西( SBL 、aboot 、boot 分区、system 分区……),想改总是可以改的,最不济还可以把闪存芯片用热风枪吹下来。
    所以刷机锁最关键的地方并不是拒绝你刷写,而是你刷了非官方以后,能通过检查数字签名发现了刷了非官方,然后拒绝启动——虽然闪存上的东西能改,但是 PBL 是固化不能改的,一切一切的根源都来自 PBL,所以才把 PBL 叫“信任根”。(苹果的 checkm8 漏洞,就是 PBL 的限制被人研究出办法来绕过了)
    acess
        21
    acess  
       2020-12-10 17:13:33 +08:00
    aboot 这个阶段,有个条件判断来控制是否“解锁”,解锁了就允许刷入、启动执行任意内容,否则就只能是原厂的东西。
    一般来说,需要把机器序列号什么的提交给官方申请解锁,官方对其数字签名,然后刷机工具把这个数字签名给 aboot,aboot 就知道自己被允许解锁了,会写一个标志位,然后 aboot 就根据这个标志位判断是否是解锁状态。
    印象里,以前有些机型,把这个标志位放到闪存上了,于是就可以绕过官解,直接解锁。
    其他的机型估计就麻烦了,貌似还动用了高通 efuse 之类的复杂技术。
    TreantLee
        22
    TreantLee  
       2020-12-10 23:34:42 +08:00
    @acess 疑似 firehose 加密 用户自己用 qfil 或 miflash 刷会报错 用小米售后的账户登录 miflash 可正常刷机 而且现在云端开启查找手机授权也没法 9008 刷 但是某些机型特定版本系统还是可以免授权的
    TreantLee
        23
    TreantLee  
       2020-12-10 23:36:38 +08:00
    @S179276SP 我猜你在说三键 那基于 erecovery 还是 recovery 和 fastboot 没什么关系 甚至能改写分区表 分区镜像官方才能刷写
    acess
        24
    acess  
       2020-12-11 00:02:27 +08:00
    @TreantLee 别的我不知道,其实 QFIL 的刷写器程序(下载到手机上执行的)本来就应该是保密的吧……也许是小米的刷写器里面做了什么限制吧。刷写器本身也有数字签名,没签名不能执行。
    acess
        25
    acess  
       2020-12-11 00:05:46 +08:00
    @TreantLee 虽然刷写器也需要有数字签名,但是含有(带有效数字签名的)刷写器的“线刷救砖包”貌似一直以来都不太保密,再加上有些机型锁 bootloader 并没有严格贯彻签名不对就拒绝启动的政策,所以“9008 强刷”才成为广为人知的坊间传闻。
    也许就是小米在这方面改了?每次刷入时,都需要一个类似申请 bootloader 解锁的程序,向官方服务器提交机器序列号,等官方服务器签名了,才能刷?嗯,我啥也不知道,纯瞎猜的……
    S179276SP
        26
    S179276SP  
       2020-12-11 01:07:56 +08:00 via Android
    @TreantLee 也不是 3 键,淘宝刷机的叫我下载个远程 temaview,然后他把我的 usb 口连到一个 IP 地址,然后我的手机就进入到 出厂模式,就开始刷机了,应该是手机刚从工厂生产出来,准备装系统的模式,可以绕过 bootloader 。
    yolee599
        27
    yolee599  
       2020-12-11 08:55:35 +08:00 via Android
    现在出的机型,解 bootloader 之前储存是加密的
    yolee599
        28
    yolee599  
       2020-12-11 09:07:41 +08:00 via Android
    @TreantLee 我刷过,自己的电脑安装 teamviewer,再安装一个远程 usb 映射软件,手机进入 fastboot 模式插上电脑,然后别人远程操作,帮你解锁 bootloader 和安装第三方 recovery 。大概步骤应该是 dump 某个分区的数据,分析,然后改一下,再写回去。要是当时有抓包就好了。
    TreantLee
        29
    TreantLee  
       2020-12-12 15:44:52 +08:00
    @S179276SP 工厂是刷写烧录包,在工程系统下检验,之后 sd 卡升级到正常系统,三键是有线刷的,开机(开生产模式)确实可以直接转成三键线刷模式
    @yolee599 如果是有解锁码的解 bl ( emui<=9 )读(其实是写随机数字或者 16 个 0 )解锁码是开机下才能进行啊
    如果你说的是海思 710_810_820_970_980_985_990 解 bl 其实是从 fastboot 引导到 com1.0 写的
    分析倒不至于 买行业现成的软件
    uriah
        30
    uriah  
       2020-12-15 05:06:42 +08:00
    moto fastboot 升级刷机 平级刷机无需解锁 bl
    idrawer
        31
    idrawer  
       2021-01-05 09:56:20 +08:00
    @acess 您好,也就是说短接手机机身上一些触点进入的 bootloader 和使用工程线进入的层级是不同对吗
    acess
        32
    acess  
       2021-01-05 13:37:50 +08:00
    @idrawer 这两个办法要进的,都是高通紧急下载模式( EDL,又称 9008 ),不是 fastboot 。区别应该就是检测是否进入 9008 的时机不一样。打个可能不恰当的比方,就好像 Win8 以后,结合 UEFI 启动,进 BIOS 可以是开机时按 DEL 键(不同品牌按键不一样,有不少机器来不及按),也可以是系统进去以后,键盘按住 SHIFT 的同时鼠标点开始菜单的重启,然后选择进入“UEFI 固件设置”。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   925 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.