我的联发科手机变砖之后:用 mtkclient 从零完成底层救砖的全记录
【免费下载链接】mtkclientMTK reverse engineering and flash tool项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
深夜十一点,我把一个第三方固件包刷进手里的联发科手机,屏幕上最后一行进度条卡住不动,紧接着黑屏、强按电源无响应、进入 Recovery 也失败。那一瞬间我意识到:手机不是"坏了",而是"死"了——不是操作系统层面的死机,而是连引导程序都无法启动的硬变砖。最终把我从绝望里拉出来的,是一个名为mtkclient的开源刷机工具:它通过逆向联发科的 Bootrom 协议,实现闪存读取、写入与设备解锁,是维修工程师、Android 开发者和数码玩家处理联发科设备底层问题的得力工具。这篇文章就记录我从变砖到救活、再到彻底玩懂它的全过程,希望给同样踩坑的你一条明路。
第 1 天:变砖的真相,比我想象的更严重
先搞懂"砖"是怎么来的
手机从按下电源键到进入系统,走的是一条流水线:Bootrom → Preloader → Bootloader → 内核 → 系统。每一环都负责把控制权交给下一环。
我刷的那个固件包,恰好破坏了 Preloader 这个环节。Preloader 是联发科芯片在 Bootrom 之后加载的第一个引导程序,它一旦损坏,后面所有环节都没戏——这就是为什么常规的 Recovery、Fastboot 线刷全都救不回来。
💡 类比理解:一台正常手机像一栋楼,门卫(Bootrom)把钥匙交给管家(Preloader),管家开门放你进大堂(Bootloader)。如果管家辞职了,你连大堂都进不去,更别提上楼。
为什么普通刷机工具束手无策,而 mtkclient 可以
它抓住的是芯片最底层的"应急通道"
联发科芯片出厂时内置了一段固化在硅片里的代码,叫Bootrom。它的设计初衷是让产线可以在任何情况下重新烧录固件——相当于一栋大楼留了一条只有消防员能用的地下通道。mtkclient 的整个思路,就是逆向这条通道的通信协议,然后用它绕过损坏的系统,直接操作闪存。
我对照源码目录梳理了它的内部结构,像一支分工明确的救援队:
| 源码路径 | 扮演角色 |
|---|---|
mtkclient/Library/Connection/ | 通信组,负责 USB/串口连接设备 |
mtkclient/Library/DA/ | 装卸组,负责把下载代理(DA)送入芯片内存 |
mtkclient/Library/Auth/ | 认证组,处理 SLA 等安全认证 |
mtkclient/Library/Hardware/ | 加密组,处理硬件加密与安全配置 |
每一个模块对应源码里真实的 Python 文件,这让它不只是一个"双击运行的黑盒子",而是一个可以读源码、改逻辑的开源工程。
把电脑改造成"抢救室":环境准备只看三步
动手之前,先让电脑具备和手机对话的能力。以 Linux 为例,只需三步:
git clone https://gitcode.com/gh_mirrors/mt/mtkclient cd mtkclient pip3 install -r requirements.txt然后给 USB 权限:
sudo usermod -a -G plugdev $USER sudo cp mtkclient/Setup/Linux/*.rules /etc/udev/rules.d sudo udevadm control -R这三行命令的含义分别是:把自己加入设备用户组、把联发科设备的 udev 规则拷进系统、让规则生效。Windows 用户则需要安装 MTK 串口驱动和 UsbDk 驱动,官方 README 里写得很清楚。
让手机进入 Bootrom 模式:第一次握手
这也是整个救砖流程里最容易搞砸的一步
进入 Bootrom 模式不需要系统,只需要硬件操作:关机状态下,按住音量上(或音量下)+ 电源键不放,再用数据线连接电脑,直到工具检测到设备再松手。项目里这张图直观展示了整个过程:
设备连接供电 → 通信握手 → 初始化完成(测试点 TP1),每一步都有清晰的状态反馈
连接成功后,先跑一条最简单的命令验证通信:
python mtk.py printgpt这条命令读取并打印设备的 GPT 分区表。分区表就像一本书的目录,记录着每个分区(章节)在闪存(书)里的起始位置和大小。如果这条命令能正常输出一串分区名(boot、system、userdata……),说明你的手机已经和电脑"握上手"了,救砖正式进入正题。
第一场胜利:把整块闪存完整备份出来
无论后续做什么,先备份永远没错
设备能通信了,我做的第一件事不是急着刷写,而是全量备份:
python mtk.py rf full_backup.binrf是"read full flash"的缩写,把整块 eMMC 闪存逐字节读成镜像文件。这个文件是我的"后悔药"——之后无论我怎么折腾,只要还能进入 Bootrom,就有机会原样还原。
也可以只读单个分区:
python mtk.py r boot boot.bin python mtk.py rl out # 把所有分区分别导出到 out 目录 python mtk.py r preloader preloader.bin --parttype boot1 # 单独备份 preloader备份完成后,我用printgpt输出的分区名对照rl导出的文件,逐个核对 size,确认没有缺漏。整个过程像把一本损坏的书先复印一份存档,再动手修补。
踩坑避雷:新手最容易翻车的 5 个细节
我在这个阶段踩过的坑,基本都能归结为这 5 条:
- Preloader 选错。走 Bootrom 路径时工具需要加载匹配的 Preloader 辅助初始化内存,目录
Loader/Preloader/下躺着上千个设备文件,选错会直接通信失败,要用--preloader Loader/Preloader/你的设备型号.bin显式指定。 - USB 线/接口不靠谱。很多"能充电不能传数据"的线,在 Bootrom 握手阶段会反复超时。换一根短线、插主板后置口,成功率明显提升。
- 电量不足。Bootrom 阶段有些操作较耗电,半路断电等于二次灾难,至少保持 50% 以上电量再开工。
- Windows 驱动没装干净。设备管理器里如果出现带感叹号的设备,先重装 MTK 串口驱动和 UsbDk,再回来排查其他问题。
- 权限没给够。Linux 下忘了加 plugdev/dialout 用户组、没重启,工具会一直报"找不到设备"。
⚠️ 特别提醒:这类底层工具只应该操作你自己拥有的设备。在别人的设备上执行读取、解锁操作前,请务必确认已获得授权。
进阶玩法一:分区级写入与数据恢复
备份是防守,写入才是进攻
既然能读,自然也能写。把备份里单独的 boot 分区导出来验证损坏情况后,我尝试把官方固件中的分区写回去:
python mtk.py w boot official_boot.img python mtk.py e metadata,userdata,md_udc # 擦除数据分区 python mtk.py reset # 重启设备w是 write,e是 erase,命令格式统一为"动作 + 分区 + 文件",非常直觉。
更进阶的玩法是把整块闪存当硬盘直接挂载:
python mtk.py fs /mnt/mtk这条命令通过 FUSE 把设备挂载成本地文件系统,之后就能像操作普通文件夹一样浏览分区、拖出文件——对误删数据后的恢复场景尤其好用,配合ro(按偏移量读取)命令,甚至可以精确提取某个文件系统区域做进一步分析。
进阶玩法二:解锁 Bootloader,重新掌控设备
对普通用户,这就是"解锁自由"的开关
救砖成功后,我顺势完成了整个流程里最激动人心的一步——解锁 Bootloader:
python mtk.py e metadata,userdata,md_udc python mtk.py da seccfg unlock python mtk.py resetda是"Download Agent"子命令组,seccfg unlock负责关闭厂商的安全启动限制。解锁之后,配合 Magisk 就能获取 Root:
python mtk.py da vbmeta 3 # 关闭 vbmeta 校验 python mtk.py w boot boot.patched # 刷入 Magisk 修补过的 boot 镜像 python mtk.py reset到这里,我的手机不仅从砖头变回了手机,还获得了比变砖前更强的掌控力。da子命令组里还有efuse(读取熔丝)、rpmb(读写安全存储)等专业操作,都是面向高级用户的"武器库"。
成为高手:把整套操作写成脚本
一次配置,永久复用
如果每次救砖都要手动敲十几条命令,迟早出错。mtkclient 提供了script子命令,把操作流程写进文本文件即可:
printgpt r boot boot_$(date +%Y%m%d_%H%M%S).img r recovery recovery_$(date +%Y%m%d_%H%M%S).img r system system_$(date +%Y%m%d_%H%M%S).img reset执行:
python mtk.py script backup_script.txt对于维修店等批量场景,还有multi子命令支持在一行里连续执行多个操作,配合mtkclient/Library/mtk_class.py里的可扩展逻辑,完全可以搭建一套属于自己的自动化救砖流水线。
尾声:工具是硬的,心态要软
回看这一路,真正救回手机的,不只是 mtkclient 本身,还有几条经验:
- 理解启动链:Bootrom → Preloader → Bootloader → 系统,搞清楚坏在哪一环,才知道该用什么工具;
- 先备份再动手:
rf全量备份永远是最低成本的后悔药; - 抓好握手环节:Bootrom 模式的进入姿势和 USB 链路质量,决定一半的成败;
- 进阶操作要克制:解锁、擦除、熔丝类操作有不可逆风险,动手前想清楚后果。
如果你手里也躺着一台联发科的"砖头",现在就去试试:
git clone https://gitcode.com/gh_mirrors/mt/mtkclient cd mtkclient pip3 install -r requirements.txt python mtk.py printgpt这条命令输出的分区表,就是你重新掌控设备的第一步。祝你好运,也祝你的设备好运。
【免费下载链接】mtkclientMTK reverse engineering and flash tool项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考