MTKClient:4 条命令让 MTK 手机从 BROM 模式起死回生的免费救砖刷机工具
【免费下载链接】mtkclientMTK reverse engineering and flash tool项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
[23:41] 设备管理器: 未知 USB 设备(设备描述符请求失败) [23:42] fastboot devices (无任何输出) [23:47] 维修报价: 主板损坏,建议整体更换,800 元,无保修一台变砖的联发科(MTK)手机,MTKClient 是一款免费开源的 MTK 救砖与刷机工具,也是少数不要求系统能开机的救援通道:它通过 USB 直连闪存芯片,能完整备份所有分区、把写坏的镜像写回去,甚至直接解锁 Bootloader(引导加载器,决定手机"从哪个系统启动"的那段程序)。
它到底能干什么:一张能力清单看懂 MTKClient
一句话定位:MTKClient 是面向 MTK 芯片设备的命令行工具集,在一条 USB 连接上完成读闪存、写闪存、解锁、内存调试这一整套操作。
为什么能做到:每颗 MTK SoC(系统级芯片)内部都固化了一小段 BootROM——出厂烧死、无法更新、无法删除的代码。系统再坏,开机瞬间它也一定先运行,而且按设计开放了一个 USB 诊断口。可以把它理解成主板上预留的一条应急通道:别的链路全断了,它反而是唯一出口。MTKClient 就是顺着这条通道直接跟存储芯片对话,完全绕过开不了机的系统。较新的芯片采用 V6 协议、BootROM 被收紧,需要额外提供一个有效的 DA 文件(联发科官方调试模块,工具把它加载到设备上执行更深层操作)。
能力速查:
| 能力 | 命令入口 | 干什么用 |
|---|---|---|
| 查看分区表 | printgpt | 列出设备上每个分区的名字、大小和位置 |
| 读/写单个分区 | r / w | 把分区读出到本地文件;把本地文件写回指定分区 |
| 整盘读取 | rf / rl | 导出整块闪存,或把全部分区逐个存到目录 |
| 擦除分区 | e | 清空某个分区,去掉写坏的数据 |
| 解锁 Bootloader | da seccfg unlock | 打开 Root 与第三方 ROM 的前置条件 |
| 绕过 SLA/DAA | payload | 设备启用安全握手、常规连不上时,加载通用补丁程序 |
| 内存读写 | da peek / da poke | 直接读改内存,面向逆向研究 |
| 挂载存储 | fs | 把设备存储挂成电脑目录直接浏览 |
动手前自检:先确认这 4 件事
- 确认芯片型号,而不是手机品牌型号。项目里的救援文件按 SoC 编号匹配(MT6762、MT6765、MT8168 之类),到 Loader/Preloader/ 目录里能找到对应文件,成功率会明显更高。
- 确认环境能跑起来。Python ≥ 3.8,装完依赖;Linux 还需加载 udev 规则,系统才认得这台设备。
- 确认设备能进 BROM 模式。BROM 模式是设备最底层的诊断状态,具体按键组合见下一节,这是所有救援动作的前提。
- 只要能连上,先备份再动手。读命令都是安全的,任何写操作之前,先把整套分区存下来。
五分钟跑通:从零到看到分区表
第 1 步,拿代码并装依赖:
git clone https://gitcode.com/gh_mirrors/mt/mtkclient cd mtkclient pip install -r requirements.txt第 2 步(仅 Linux),让系统认识你的手机:
sudo cp Setup/Linux/*.rules /etc/udev/rules.d/ sudo udevadm control -R && sudo udevadm trigger💡 命令报权限错误时,可临时把 python 换成 sudo python;或把自己的账号加入 plugdev、dialout 组后重启,以后就不再需要 sudo。
第 3 步,让设备进入 BROM 模式:关机 → 按住音量上 + 电源键(部分机型是音量下)→ 保持按住的同时插入 USB 数据线 → 工具识别到设备后松开按键。
按键组合不灵时,不少机型可以用导电物短接主板测试点(TP)强行进入,动手前先查清自己机型的测试点位置。
第 4 步,跑第一条读取命令:
python mtk.py printgpt成功的样子:屏幕上出现一串 GPT 条目(分区名、大小、偏移),同时打印出芯片型号——救援通道正式打通。
三个最高频场景:命令直接抄
场景一:刷机前对 MTK 全部分区做完整备份
做任何底层操作之前,先给设备拍一张"全屋照片":把每个分区逐个存出来,后面出问题可以按房间还原。
python mtk.py rl ./backup_full成功的样子:backup_full 目录里按分区名生成一堆文件,数量和 printgpt 列表对得上。
⚠️ 全量导出通常有几个 GB,先留够磁盘空间;中途断线只需重读对应分区,不必从头再来。
场景二:写回坏分区,把系统救回来
系统写坏开不了机,多数是 boot、recovery 之类的分区被写错了,解法就是把备份写回去。
python mtk.py w boot ./backup_full/boot.img python mtk.py reset成功的样子:提示写入完成,reset 后设备正常进入开机动画。坏的不止一个分区时,也可以把所有备份文件放进一个目录,用python mtk.py wl ./backup_full一次性写回。
⚠️ w(写回)和 e(擦除)都不可逆:动手前用 printgpt 核对分区名,写错分区可能把"软砖"变成"硬砖"。
场景三:一行命令解锁 MTK Bootloader
备份完成、想 Root 或刷第三方 ROM,先打开 Bootloader 锁:
python mtk.py da seccfg unlock成功的样子:命令结束后设备自动重启,首次开机出现"Bootloader 已解锁"警告画面,随后正常进系统。
⚠️ 解锁通常伴随用户数据被清空、保修失效;MT6781、MT6789 等新芯片目前仅支持未锁定(unfused)设备。
进阶能力速查:每个能力一条命令
| 能力 | 命令 | 说明 |
|---|---|---|
| 批量脚本 | python mtk.py script examples/run.example | 把常用命令写进文件按顺序执行,格式见示例脚本 |
| 绕过 SLA/DAA | python mtk.py payload | 常规连接失败时加载通用补丁 payload |
| 读内存 | python mtk.py da peek 0x10000000 0x100 | 从指定地址倒出 0x100 字节内存 |
| 写内存 | python mtk.py da poke <地址> <十六进制数据> | 面向逆向研究,别写进系统关键区 |
| 挂载存储 | python mtk.py fs /mnt/mtk | 把设备存储当电脑目录浏览 |
| 读 efuse | python mtk.py da efuse | 查看熔丝状态,判断芯片是否被物理锁定 |
翻车急救包:常见症状与处理办法
| 表现 | 可能原因 | 处理 |
|---|---|---|
| 提示找不到设备 | 没进 BROM 模式或按键组合不对 | 彻底关机后换另一组音量键组合重试;仍不行查该机型的 TP 短接点 |
| 连上但芯片型号不匹配 | 缺少或选错 preloader(BootROM 之后的第一级程序,负责接管闪存) | 到 Loader/Preloader/ 找对应型号文件,用 --preloader 指定 |
| Linux 下报权限错误 | udev 规则没加载 | 把规则拷进 /etc/udev/rules.d 并刷新,或临时 sudo 运行 |
| 读写中途断开 | 数据线是纯充电线、接触不良 | 换短线高质量数据线,全程给设备接外电 |
| 新芯片(MT6781/MT6789 等)连不上 | V6 协议收紧、preloader 被禁用 | 用 --loader 指定有效 da;启用 DAA/SLA 的设备目前无公开解 |
| 写回后设备开不了机 | 镜像或分区选错 | 用刷机前的全量备份,python mtk.py wl整体写回 |
这篇文章里所有命令可以归成两类:printgpt、r、rl 只读,错了也没事;w、e、unlock 会改数据,做了就回不去——守住这条边界,大部分风险已经避开。下一步不用做大动作:把设备连上、进 BROM 模式,跑一次 printgpt。亲眼看到自己手机的真实分区表之后,"救砖"就不再只是维修店才会的事。
【免费下载链接】mtkclientMTK reverse engineering and flash tool项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考