MTKClient 联发科刷机一次讲透:从备份救砖到刷入自定义系统的实操路线
【免费下载链接】mtkclientMTK reverse engineering and flash tool项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
凌晨一点,手机屏幕永远停在开机 logo 上——系统更新到一半断电,或者某次"清理"误删了关键文件,总之它就是不起来了。你刷过网上的救砖教程,下载了一堆号称"一键"的软件,结果不是要收费就是认不出设备。这种情况,联发科(MTK)芯片的手机其实有一条更直接的出路:利用芯片出厂时留下的底层引导通道(BootROM),绕过系统的限制直接读写存储芯片。而 MTKClient 正是把这条通道做成命令行工具的开源项目。这篇指南会用一次"从备份到救砖"的真实路线,带你搞懂它怎么用、哪些操作千万不能碰。
认识 MTKClient:它不是刷机包,是通往芯片的钥匙
人话版:这一节告诉你手上拿的到底是什么工具,以及它和 SP Flash Tool 这类官方工具的区别。
MTKClient 是一个运行在电脑上的命令行程序,它的工作方式有点像"芯片级的串口调试器":通过 USB 让联发科芯片的 BootROM 区域先跑起来一小段自带的代码,然后就能以底层权限读取和写入闪存。这意味着:
- 不依赖系统是否还能开机。哪怕手机连 recovery 都进不去、屏幕完全黑着,只要 BootROM 没被厂商焊死(大多数老芯片都留有口子),就有机会救回来。
- 不需要厂商授权账号。很多品牌会限制刷机工具必须绑定账号,MTKClient 走的是公开研究路线,绕开了这道墙。
- 读写是全量级的。你能读到单个分区(比如 boot),也能把整块闪存一字不差地备份到电脑上。
和官方 SP Flash Tool 相比,MTKClient 的差异化在于:它能自动识别芯片型号并选择合适的漏洞路径(项目内部称之为 kamakiri、amonet、hashimoto 等),对老设备几乎是"插上就通"。你不需要去猜该选哪个 scatter 文件。
15 分钟快速上手:第一次连接设备的最短路线
人话版:这一节不讲解原理,先让你亲眼看到工具识别出手机,拿到第一次成功体验。
第 1 步:装环境(Linux 为例,约 5 分钟)
sudo apt install python3 git libusb-1.0-0 python3-pip libfuse2 git clone https://gitcode.com/gh_mirrors/mt/mtkclient cd mtkclient pip3 install -r requirements.txt pip3 install .第一行装的是 Python 和 USB 通信库;中间两行把项目拉到本地并进入目录;后面两行安装项目自身的依赖。Windows 用户也可以跑,但需要额外装好 MTK 串口驱动和 UsbDk,这里不展开。
接着把当前用户加入 USB 设备权限组,并装上 udev 规则(否则工具可能"看不到"设备):
sudo usermod -a -G plugdev $USER sudo usermod -a -G dialout $USER sudo cp mtkclient/Setup/Linux/*.rules /etc/udev/rules.d sudo udevadm control -R sudo udevadm trigger提醒:加入 dialout 组后需要注销或重启一次,权限才会生效。这一步最容易漏,漏了会表现为"设备明明插着,工具就是没反应"。
第 2 步:让设备进入 BROM 模式(约 1 分钟)
联发科设备通电后的第一段引导代码就是 BROM,它存在于芯片内部只读存储器中,系统坏不坏它都在。进入方法:
- 手机完全关机(拔掉所有线)。
- 按住音量上 + 电源(部分机型是音量下 + 电源)。
- 保持按住的同时插入 USB 数据线连接电脑。
- 看到工具打印出检测信息后松手。
下面是官方项目里的初始化流程图,三个步骤的顺序就是这么简单:连上设备 → 进入调试模式 → 通过测试点(TP1)完成硬件级验证。
第 3 步:跑第一条命令(约 1 分钟)
python mtk.py printgpt这条命令会读取设备的 GPT 分区表,也就是"闪存的地图"。如果你在终端里看到一串分区名(boot、system、userdata、nvram……),恭喜,通道已经打通了,接下来所有操作都有了基础。
到这里,你已经完成了"从零到连上"的最短路径。剩下的所有高级玩法,都是在同一个连接通道上换不同的指令而已。
高频实战场景:备份、写回与解锁
人话版:这一节讲三个你迟早会用到的操作,每个都说明"什么时候用、命令怎么写、做完会怎样"。
场景一:动手前先整机备份(强烈建议第一个做)
任何时候打算对设备做修改,先备份。备份不需要理解分区含义,一条命令把整块闪存读出来:
python mtk.py rf full_backup.bin这条命令把整个闪存按顺序读到一个文件里。之后哪怕你把系统折腾到完全无法开机,只要闪存没物理损坏,理论上都能通过"整块写回"恢复原样。
如果只想备份单个分区(比如只动 boot),用这个:
python mtk.py r boot boot.img意思是"把名为 boot 的分区读到 boot.img 文件"。你也可以一次读多个分区,用逗号分隔:
python mtk.py r boot,vbmeta boot.img,vbmeta.img备份完成后你会得到一个或多个.img文件,建议立刻换一个存储位置再复制一份。备份文件救命的时刻,往往是你最不想丢它们的时候。
场景二:把备份写回,或者刷入自定义系统
先做一件最稳的事:确认设备分区表,避免写错位置。
python mtk.py printgpt然后写回单个分区:
python mtk.py w boot boot_new.img注意参数顺序是"分区名 文件路径",和读命令一致。如果是刷第三方 ROM 的 boot 镜像,通常还需要先处理 vbmeta(见场景三)。
提醒:写入操作是"不可撤销"的。写之前务必确认文件来源可信、分区名正确,并且已经做过备份。写错 boot 顶多开不了机,写错 preloader 或 nvram 就可能要动用更底层的恢复手段了。
场景三:解锁引导加载器(Bootloader)
品牌机默认锁着 Bootloader,不解锁就没法刷第三方系统。解锁前先备份,然后执行:
python mtk.py e metadata,userdata,md_udc python mtk.py da seccfg unlock python mtk.py reset第一条命令擦除用户数据相关分区——没错,解锁会清空手机数据,所以解锁前把照片和文件导出;第二条把安全配置标志改为 unlock;第三条让设备重启生效。
提醒:重新锁定只需把
unlock换成lock。解锁后部分机型开机时会显示黄色警告页,这是正常现象,等几秒就会进入系统。
场景四(延伸):结合 Magisk 获取 Root
流程是"备份 boot → 用手机端 Magisk 修补 → 写回修补后的镜像",同时关闭 vbmeta 校验:
python mtk.py da vbmeta 3 python mtk.py w boot magisk_patched.img python mtk.py resetda vbmeta 3的意思是"同时关闭 dm-verity 和校验",这样修改过的 boot 才能正常加载。
避坑指南:哪些操作容易让设备变砖
人话版:这一节用"常见失误 vs 正确做法"的对照,把风险讲清楚,但不吓唬你。
| 常见失误 | 后果 | 正确做法 |
|---|---|---|
| 没备份就写分区 | 写坏后没有恢复数据 | 任何写入前先rf全量备份 |
| 分不清 boot 和 preloader | 写错 preloader 可能更麻烦 | 动 preloader 前多看printgpt输出 |
| 解锁后没擦 userdata | 系统起不来或一直回恢复模式 | 解锁前先e metadata,userdata,md_udc |
| 刷到一半拔线或电脑休眠 | 写入中断,镜像损坏 | 关闭自动休眠,用质量好的数据线 |
| 新芯片当老芯片处理 | 工具报错"找不到握手" | 使用--loader指定 DA 文件 |
新芯片(如 MT6781、MT6789、MT6855 等)的 BootROM 已经打了补丁,必须显式提供 DA 文件:
python mtk.py --loader Loader/Preloader/your_device_preloader.bin r boot boot.img--loader告诉工具"用这个文件里的下载代理",绕过对新协议 V6 的自动识别。
最后一条实用建议:任何命令失败、输出看不懂时,加--debugmode再看一次。详细日志能帮你把"玄学问题"变成可搜索的错误信息。
进阶探索:给好奇者的几个彩蛋
人话版:这一节介绍普通用户用不到、但对研究设备底层很有用的能力,点到为止。
- 把整块闪存挂成文件夹:
python mtk.py fs /mnt/mtk会用 FUSE 把设备挂载成一个目录,像浏览普通磁盘一样翻看分区内容,排查"哪个分区占满了"很方便。 - 直接读内存:
python mtk.py da peek 0x10000000 0x1000能读取芯片某段物理内存的内容,调试驱动或分析固件时会用到;对应的poke是写入内存。 - 读一次性熔丝(efuse):
python mtk.py da efuse输出芯片的熔丝状态,能看出厂商有没有开启 SLA/DAA 等额外校验,这决定了设备还能走哪条路。 - 生成 RPMB 相关密钥:
python mtk.py da generatekeys生成并显示 RPMB 密钥,RPMB 是存储芯片里一块带认证保护的区域,感兴趣可以从这里入手研究。
这些操作都属于"研究向",对你理解芯片安全体系很有帮助,但日常刷机用不到,不必一开始就啃。
收尾与延伸
三个心法,记住就够了:
- 备份永远在写入之前——
rf一下不费事,却能让你在最坏情况下全身而退。 - 先读后写,先查后动——
printgpt是每次操作的起点,分区名写错一次可能就要多折腾几小时。 - 报错不可怕,可怕的是不看日志——
--debugmode开起来,把信息贴到社区提问,问题解决得比闷头试快得多。
想继续深入,可以从这几处入手:
- 命令行全部命令一览:mtk.py(开头就是命令表)
- 官方使用说明:README.md、README.zh-CN.md
- 脚本批量执行示例:examples/run.example
- 各芯片引导代码研究:src/stage1/、src/stage2/
最后说一句:刷机最迷人的地方,不是让手机变"新",而是你第一次搞懂了它坏掉时到底发生了什么。MTKClient 给了你一把钥匙,但方向盘始终在你手里——稳一点,多备份,慢慢来。
【免费下载链接】mtkclientMTK reverse engineering and flash tool项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考