文章总结: 本文详细介绍了对TP-LinkTL-WR841N路由器的硬件逆向过程,包括拆机、UART调试、固件提取、U-Boot逆向分析等,并提出了相应的安全防御建议。
综合评分: 85
文章分类: 渗透测试,漏洞分析,硬件逆向,安全工具,网络安全
从 UART 焊到拆 Flash:TP-Link TL-WR841N 硬件逆向深潜
原创
黑卷
黑卷
赛博安全攻防日记
2026年9月30日 10:31
上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
从 UART 焊到拆 Flash:TP-Link TL-WR841N 硬件逆向深潜
一台二手 TP-Link TL-WR841N v13,如何从密封外壳走到 UART root、tftp / SPI 抽固件,再到 U-Boot 逆向。
r0keb · 2025-11-15
目标机:TL-WR841N v13
作者选了一台在电商平台上很常见的老款家用路由——TP-Link TL-WR841N(本人这台是较早的 v13,二手入手)。研究目标很明确:从零拆机,走到物理抽固件,并把 U-Boot 与内部二进制摸一遍。
图 1:目标路由正面。
图 2:背面接口与铭牌区。
图 3:铭牌上的型号与序列号。
拆机足迹:MT7628NN + SPI Flash
撬开外壳后,板子上最醒目的是矩形 RAM 与方形 SoC。
图 4:拆开后的主板全貌。
图 5:主板特写。
RAM 本身不是这次重点,但丝印与料号仍建议记下来——信息越多越好。
图 6:板载 RAM。
CPU 一侧是 MediaTek MT7628NN:
图 7:MediaTek SoC。
图 8:MT7628NN datasheet 摘要。
翻到板子另一面,负责装系统的 SPI Flash 露了出来:
图 9:板背面的 SPI Flash。
特写丝印为 25Q64CS1G(GD25Q64 一类 64 Mbit 料),后面抽固件会再碰它。
图 10:Flash 丝印 25Q64CS1G。
找 UART:万用表确认 GND / TX / RX
板边有一组很像调试口的焊盘:
图 11:疑似 UART 调试焊盘。
即便板子上标了 GND,作者仍用万用表对已知地(网口金属外壳等)复核:
图 12:确认 GND。
图 13:以连接器外壳作参考地。
上电后,RX 侧能看到启动时的数据抖动,TX 侧相对安静——这是典型的「设备在说话、主机还没接回去」的串口特征。
串口协议速览
UART 是异步串行协议:双方约定波特率(常见 115200 等),用起始位对齐,没有单独时钟线。设备互联时务必 GND 对 GND,TX 交叉接 RX。
图 14:UART 帧结构示意。
图 15:TX/RX 交叉连接示意。
图 16:接线关系示意。
接上串口:TX 侧先听启动日志
作者先用逻辑分析仪听 TX 输出:
图 17:逻辑分析仪接到 UART TX。
图 18:Logic 2 中的串口波形。
解码后能看到完整的 U-Boot / 内核启动信息(去掉开头脏字节后),例如:
DDR Calibration DQS reg = 00008A89
U-Boot 1.1.3 (Oct 12 2016 - 08:49:46)
Board: Ralink APSoC DRAM: 64 MB
...
The CPU feqenuce set to 580 MHz
MIPS CPU sleep mode enabled.
(完整启动日志很长,此处只保留代表性片段。)
图 19:分析仪里看到的 UART 数据流。
RX 接回去:USB-TTL 直接拿到 shell
换 3.3V UART-TTL USB(该适配器支持 5V/3.3V,通信选 3.3V),飞线接到 RX/TX/GND,用串口终端(文中为 Tera Term)打开:
图 20:USB-TTL 适配器。
图 21:UART 飞线。
图 22:串口终端侧配置。
结果很直接——上电即有命令执行能力,复位后的启动序列同样打在串口上:
The CPU feqenuce set to 580 MHz
MIPS CPU sleep mode enabled.
CPU revision is: 00019655 (MIPS 24Kc)
...
~ #
图 23:串口已进入交互 shell。
机内逛一圈:BusyBox、弱口令与开放端口
控制台命令集很瘦,底层是 BusyBox v1.19.2:
~ # whoami
/bin/sh: whoami: not found
~ # ls
web usr sbin mnt lib dev
var sys proc etc bin ...
枚举时撞到无线配置文件 Wireless/RT2860AP/RT2860AP.dat,里面有完整的路由器配置;机身背面贴纸本身也印了默认无线口令。关联成功时串口还会打出 WPA2/AES 相关日志。
/var/passwd 里是 md5crypt 哈希。作者用 john 跑字典后还原为极弱口令 1234——防御视角下,这几乎等于「出厂口令没改」的典型风险:
/var # cat passwd
admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh
dropbear:x:500:500:dropbear:/var/tmp/dropbear:/bin/false
/bin/login 用 admin / 上述口令可再登一次,但此时串口本身已经是特权 shell,意义不大。
从电脑侧对 192.168.0.1 做端口扫描,能看到陈旧且风险面偏大的服务(HTTP、Dropbear SSH 等)。作者也注明:BusyBox、httpd、Dropbear 上都有大量公开历史问题可跟进做防御排查。
系统脚本 info.sh 能列出进程与权限;mount 显示根是只读 squashfs,/var 可写——后面传二进制、抽分区都靠这块可写空间。
图 24:Web 界面里的固件 / 硬件版本。
管理页显示固件很老:
Firmware Version:
0.9.1 3.16 v0001.0 Build 161012 Rel.33002n
Hardware Version:
TL-WR841N v13 00000013
图 25:版本字符串特写。
抽固件:夹子读 Flash 未遂,改走 tftp
对照 Flash datasheet,先搞清引脚与读命令(文中按 SPI 读时序操作;夹具在线读是常见硬件手法):
图 26:Flash 基本规格。
图 27:封装引脚。
图 28:读协议相关说明。
图 29:Read Data (0x03) 时序。
在线探针接到 Flash 脚后,逻辑分析仪能看到上电时的数据活动:
图 30:在线夹读 / 探针连接。
图 31:上电时 Flash 总线活动。
图 32:总线波形细节。
CH341:改 3.3V 后仍未识别
作者准备用 CH341 编程器抽固件。原板默认 5V,而 Flash 是 3.3V 料,直接上会有烧芯片风险,于是先改板到 3.3V:
图 33:CH341 改压前。
图 34:飞线改到 3.3V。
图 35:万用表确认改压结果。
图 36:夹子接到 Flash。
图 37:CH341 夹读整套环境。
遗憾的是:改压与夹具都就绪后,Windows / Linux 下均未能稳定识别该芯片,夹读这条路暂时放弃。
备选:串口已 root → tftp 推 BusyBox、回传 mtd
既然 UART 已经是 root,且 /var 可写、系统自带 tftp,作者在电脑上搭 atftp,放入 mipsel 的完整 BusyBox,再拉到路由上:
/var # tftp -g -r busybox-mipsel 192.168.0.100
busybox-mipsel 100% |*******************************| ...
/var # ./busybox-mipsel uname -a
Linux TL-WR841N 2.6.36 #83 Wed Oct 12 08:54:10 HKT 2016 mips GNU/Linux
用增强版 BusyBox 列端口、进程后,把 /dev/mtd、mtdblock 经 tftp 回传到主机,并做 md5 对账确认无 I/O 截断。file 显示其中一块是 SquashFS,可用 unsquashfs 解开完整根文件系统。
SquashFS 里看到了什么
解开后能看到大量指向 BusyBox 的 applet,以及监听 22 端口的 Dropbear 2012.55。配置目录里还有 host key 与口令哈希;哈希识别为 MD5 类后被还原为弱口令 admin。尝试 SSH 登录时,服务端配置不允许该远程登录方式——口令弱是风险,但这条远程路径被策略挡住了。
作者还观察到本机 UDP 48400 上有异常服务:对其灌入无意义数据后,对应进程表现异常(粗暴连通性/稳健性探测,不是完整利用链)。/sbin/init 与 /bin/busybox 的 md5 一致,实质都是 BusyBox;/etc/inittab 存在,意味着若有人改固件再刷回,启动行为可被篡改——这是供应链/本地刷写场景下的防御提醒。BusyBox 字符转义类历史问题作者未能稳定触发,仅作风险标记。
拆焊 Flash:XGECU T48 物理镜像
夹读失败、tftp 又只覆盖了运行中可见的分区视图,作者最终 拆下 Flash,用 XGECU T48 做物理全片读取:
图 38:拆焊后的 Flash 芯片。
图 39:芯片装入编程器适配座。
图 40:XGECU T48 读取现场。
图 41:读 Flash 软件界面。
图 42:读出的镜像内容预览。
binwalk 解析物理镜像 GD25Q64C.BIN,并与 tftp 拿到的镜像对比——两边并不完全一致(运行中 dump 与冰冷全片各有视角)。熵图显示整体未见整片加密:
图 43:binwalk 与熵分析相关截图。
图 44:固件熵,未见整片加密特征。
U-Boot 逆向(学习向)
从物理镜像里 dd 抠出 u-boot.bin,strings 能看到 MIPS / Ralink 相关串。导入 IDA 时作者强调:基址要设成 0xBC000000,否则重定位与交叉引用会乱成一团。
dd if=GD25Q64C.BIN of=u-boot.bin bs=1 skip=... count=...
strings -n 10 u-boot.bin | grep -i mips
图 45:IDA 中按体量定位的初始化函数。
在 IDA 里可以较顺地找到启动初始化、加载 Linux 内核、以及解析/过滤 OS image 的函数(反编译很长,这里不贴完整伪代码)。还能看到与 MT7628 相关的板级初始化逻辑:
图 46:与 MT7628 相关的函数视图。
小结与防御启示
这条链路把「家用旧路由」的硬件研究路径走完整了:
-
UART 调试口未关闭
:USB-TTL 即 root,是最致命的本地暴露面
-
默认/弱口令
(无线侧、
passwd中的1234、Dropbear 侧admin)在防御评估里应一律当高危配置债 -
在线夹读失败不等于安全
:串口 root + tftp 仍可搬空 mtd;拆焊编程器还能拿到与运行 dump 不同的全片视角
-
旧组件堆叠
(BusyBox 1.19.2、Dropbear 2012.55、2016 年固件)意味着公开漏洞面长期敞开
-
U-Boot 可被静态分析:量产设备应关闭或鉴权串口、裁剪 boot 命令、避免未授权刷写
对厂商与防御方:量产关闭调试口或加鉴权;强制改默认口令;裁掉不必要的 tftp/调试 applet;OTA/刷写做签名校验;Flash 与 bootloader 完整性监控。
免责声明:
本人所有文章均为技术分享,均用于防御为目的的记录,请勿用于其他用途,否则后果自负。
🔧 更多内容在星球「车联网攻防日记」
这里长期更新,专注 IoT / 车联网 / 机器人 / AI 安全实战:
· 每天一篇一线漏洞拆解与复现思路,紧跟最新 CVE
· 累计整车实测 20+、IoT 组件 100+ 的经验沉淀与踩坑笔记
· 车联网 / V2X / 固件逆向 的资料、工具与字典
· 星球里提问,我 24 小时内必答,一起挖洞、上分、接项目
👇 扫码进星球,和一线师傅一起研究
往期推荐
- EOL 路由照样打穿:Netgear WGR614v9 UART + Bitdefender Box SPI 降级 RCE
- 拆机焊 UART 还不够:Nokia Beacon 1 从受限串口到 CGI 注入 + Qiling 算口令
- 19.9 美元路由拆到 RCE:Dbit N300 UART + Boa 溢出(CVE-2026-20374)
- 四根铜焊盘听出 root:TP-Link TL-WR845N UART 未认证调试口
- 从 UART 焊到未认证后门:ANJIA PTZ 摄像头(CVE-2026-31077)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:赛博安全攻防日记 黑卷
黑卷《从 UART 焊到拆 Flash:TP-Link TL-WR841N 硬件逆向深潜》