从原理到实践:利用 BROM 漏洞实现联发科设备强制刷机

3 阅读5分钟

一、MTK 芯片 vivo Y3 Root 核心原理讲解

1. 什么是 MTK 芯片?

MediaTek(MTK)芯片是移动设备的 SoC(System on Chip,系统级芯片),并非单纯的 CPU,而是高度集成的核心处理器组:

  • 集成模块:CPU(通用计算)、GPU(图像渲染)、Modem(网络基带)、各类硬件控制器

  • 行业对标:

    • 移动端:主要竞品为高通骁龙(Snapdragon),此外包含苹果 A/M 系列、华为麒麟、三星猎户座
    • PC 端:对标 Intel、AMD 平台级芯片

2. MTK 设备启动链(Boot Chain)

理解 MTK 手机刷机、Root 的核心前提,是掌握设备完整启动流程,MTK 芯片标准启动顺序:

  1. BROM (Boot ROM) :芯片内部固化只读代码,通电后执行的第一级指令,仅负责最基础的硬件初始化。
  2. Preloader:加载至 SRAM 运行,完成 DDR 内存等核心硬件的进阶初始化。
  3. Bootloader (LK/Little Kernel) :初始化剩余硬件,校验系统分区完整性,决定设备启动方向(系统 / Fastboot/Recovery)。
  4. Kernel (系统内核) :加载硬件驱动,搭建安卓系统运行基础环境。
  5. Android OS:最终启动完成,进入用户可操作的手机界面。

3. BROM 模式:通往底层的门禁

BROM 模式是 MTK 芯片专属的工厂级底层维护模式,主要用于生产线烧录、设备救砖。

3.1 BROM 安全保护机制

现代 MTK 芯片为防止非法篡改系统,在 BROM 模式下内置严格签名校验,禁止普通用户通过 USB 随意修改底层分区。

3.2 BROM 进入逻辑与握手流程

  • 触发条件:手机完全关机,通过指定物理按键组合 + 连接 USB 数据线
  • 扫描检测:BROM 初始化后会循环扫描 USB 端口,等待特定握手信号
  • 中断引导:识别有效信号后,强制中断向 Preloader 的正常跳转,芯片锁定在最底层模式
  • 通信通道:开启专用 USB 下载协议,允许外部工具对芯片进行底层控制

4. 提权核心:DA 代理与 Kamakiri 漏洞

vivo Y3 等机型的 Root 核心,就是突破 BROM 的安全校验限制,核心原理如下:

4.1 DA 代理(Download Agent)

通过 mtkclient 等工具,将.bin 格式的 DA 文件加载到设备 RAM 中,充当临时系统代理,所有分区读写、镜像操作均通过它执行。

4.2 Kamakiri 漏洞(核心突破点)

该漏洞是 vivo Y3 绕过 Bootloader、获取 Root 的关键:

  • 漏洞本质:利用 BROM 处理 USB 控制请求时的缓冲区溢出缺陷或逻辑配置漏洞
  • 执行原理:构造特殊攻击载荷(Payload),强制芯片程序计数器跳转到注入的自定义代码段
  • 最终效果:绕过官方签名校验,无需官方授权,即可通过 mtkclient 直接对手机存储执行低级操作(备份 / 刷入 Magisk 修补镜像,实现 Root)

二、MTK 芯片 vivo Y3 Root 实操教程(Ubuntu 环境)

1. 核心工具准备

Ubuntu 系统下针对 MTK 芯片的最强开源工具为 mtkclient,该工具基于 Python 编写,可利用芯片漏洞强制解除 BROM 限制。

1.1 环境搭建

打开终端,依次执行以下命令:

1.1.1 安装系统依赖
sudo apt update
sudo apt install python3 python3-pip git libusb-1.0-0-dev
1.1.2 克隆工具并安装 Python 依赖库
git clone https://github.com/bkerler/mtkclient
cd mtkclient
pip3 install -r requirements.txt

1.2 配置 USB 权限(关键步骤)

为让脚本正常控制 vivo BROM 端口,必须配置 udev 规则,执行以下命令:

# 将当前用户加入权限组
sudo usermod -a -G plugdev $USER
sudo usermod -a -G dialout $USER

# 创建 MTK 设备识别规则文件
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666"' | sudo tee /etc/udev/rules.d/80-mtk.rules

# 重启规则生效
sudo udevadm control --reload-rules

2. 强制进入 BROM 模式并绕过校验

vivo Y3 默认开启 Secure Boot,直接连接电脑仅会识别为充电 / 预加载模式,需按以下步骤操作:

  1. 关机:确保手机完全关机,无任何开机画面
  2. 运行脚本:在 Ubuntu 终端执行命令
python3 mtk.py payload
  1. 物理触发:同时按住音量加 + 音量减(部分机型单按音量键 / 配合电源键),保持按键不放,插入 USB 数据线连接电脑
  2. 成功判定:脚本输出 Hardware version: ... 和 Disabling watchdog... Success,即代表成功绕过 BROM 签名校验(手机屏幕保持黑屏,电脑已获取底层控制权)

3. 获取 Root 权限实战路径

成功进入 BROM 绕过模式后,按以下步骤修改系统镜像获取 Root:

3.1 备份原始 Boot 镜像(必做!)

Root 操作前必须备份,避免手机无限重启

python3 mtk.py r boot boot.img

3.2 解锁 Bootloader (vivo 特有)

vivo Y3 不支持官方解锁,需通过脚本伪解锁 / 擦除限制位

⚠️ 警告:此操作会清空手机所有数据!

# 擦除限制分区(清空数据)
python3 mtk.py e metadata,userdata,md_udc
# 重置设备连接状态
python3 mtk.py da quit

3.3 注入 Magisk 完成 Root

  1. 将备份的 boot.img 拷贝到手机,安装 Magisk App
  2. 打开 Magisk,选择选择并修补一个文件,载入 boot.img,生成 magisk_patched.img
  3. 将修补后的文件拷贝回 Ubuntu 的 mtkclient 目录
  4. 重复第二步,重新让手机进入 BROM 模式,执行写入命令:
python3 mtk.py w boot magisk_patched.img

4. 常见问题处理

4.1 端口占用问题

脚本卡在 Waiting for device,执行命令关闭调制解调器服务:

sudo systemctl stop ModemManager
sudo systemctl disable ModemManager

4.2 物理连接失败

手机直接进入存储 / 充电模式:① 按键时机错误 ② 数据线不支持数据传输,建议使用原装数据线

4.3 USB 驱动报错

提示 USB Error:确认用户已加入 plugdev 权限组,重启电脑后重试