E2633转正官方版分析(Telnet篇)

2039 字
10 分钟
E2633转正官方版分析(Telnet篇)
郑重声明

本文仅进行技术研究分析,不提供工具、密钥、密码、固件等信息。 请勿将文中思路用于任何侵权或违法用途;如内容涉及权益问题,请联系作者核实处理。

免责声明与使用约定
  1. 禁止以任何形式出售、打包收费、付费分发、引流获利,或将本教程及随附工具用于其他商业获利行为。
  2. 对教程、文档或工具进行二次修改、转载和再分发时,必须保留原作者 zlion。
  3. 固件刷写、Telnet和 MTD 操作均可能造成数据丢失、设备变砖或其他不可预期后果。操作者应对自己的设备和全部操作结果负责并自行承担风险。
  4. 如本文内容存在侵权、错误引用或其他权益问题,请联系作者核实;确认后将及时删除或修正相关内容。

1. 开启 Telnet#

Telnet 请自行开启,具体方法本文不再提供。

2. 备份 Tag 和 Wi-Fi 分区#

Tag 分区(mtd2)与 Wi-Fi 分区(mtd3)建议在刷写固件前先备份。在路由器 Telnet 终端执行:

Terminal window
cat /proc/mtd

可以看到:

mtd2: 00100000 00020000 "tag"
mtd3: 00100000 00020000 "wifi"

两者大小均为 0x100000,即 1048576 字节。

Tag 分区是裸结构化数据,直接读设备节点:

Terminal window
cat /dev/mtd2 > /tmp/tag-backup.bin

Wi-Fi 分区(mtd3)是 JFFS2 文件系统,开机已经挂载在 /wlan,里面只有 caldata 一个文件(196,608 字节)。备份时直接读这个文件 —— 恢复时原样写回即可,不需要任何解包步骤:

Terminal window
cat /wlan/caldata > /tmp/caldata-backup.bin
若 /wlan 没有挂载

先执行 mount -t jffs2 /dev/mtdblock3 /wlan,再按上面的命令备份。

确认电脑的 TFTP 服务已启动,根目录允许写入。

上传 Tag 备份:

Terminal window
tftp -p -l /tmp/tag-backup.bin -r tag-backup.bin 192.168.5.7

上传 Wi-Fi 校准备份:

Terminal window
tftp -p -l /tmp/caldata-backup.bin -r caldata-backup.bin 192.168.5.7

192.168.5.7请替换为电脑当前的局域网 IP。


3. Web 本地上传分析研究#

注意(2026/08/29更新)

中兴官方系统自带Web本地上传升级界面:http://192.168.5.1/supgrade.html 由@cnjn研究发现,以下内容仅作研究分享。

3.1 接口和表单#

抓到的 Web 流程:

GET /?_type=vueData&_tag=vue_nowversion_lua
POST /?_type=vueData&_tag=prepare_firmware_upgrade
POST /?_type=vueData&_tag=do_firmware_upgrade

multipart 字段名:

VersionUpload

核心表单头:

Content-Type: multipart/form-data; boundary=...
Content-Disposition: form-data; name="VersionUpload"; filename="firmware.bin"
Content-Type: application/octet-stream

3.2 SessionTimeout 的定位#

页面返回过 logintoken,响应头也返回过 X_XSRF_TOKEN。曾出现:

HTTP 200
IF_ERRORSTR = SessionTimeout

以及多种 token 组合均失败:

prepare same token => SessionTimeout
prepare sessOnly => SessionTimeout
prepare sessionOnly => SessionTimeout

后续在同一登录 Session 内获取页面 token、Cookie 和 XSRF token,并先调用 vue_loadprevent_data,曾得到:

prepare same:<page token> => SUCC

这只说明准备阶段通过,不说明上传和刷写一定成功。

3.3 升级管理器调试#

Telnet 下可以打开升级管理器日志并查看状态:

Terminal window
sendcmd cspd.cspd.upgrade_mgr setDebug 1
sendcmd cspd.cspd.upgrade_mgr show
sendcmd cspd.cspd.upgrade_mgr -p
sendcmd cspd.cspd.upgrade_mgr -l

show 中的 State、Location、TempDirName、FlashingPid 和 MediaPid 可帮助判断升级是否真正进入后端。研究中 Web 失败后常见:

State :0
Location :
TempDirName :
MediaPid :

同时没有 /var/tmp/fw.bin,这更像请求未进入后端刷写,而不是固件已经写入。

3.4 请求体上限实验#

测试文件现象判断
约 300 KiB100% 后 HTTP 200,SessionTimeout能传完整请求,会话仍有问题,不进入后续校验升级流程
约 320 KiB100% 后连接重置接近/超过请求体限制
约 330 KiB约 97% 后重置multipart 边界也占空间
约 512 KiB约 62% 后重置设备端提前关闭连接
22,413,844 bytes 官方包无法稳定上传不适合该页面

300Kib测试
300Kib测试
320Kib测试
320Kib测试

/bin/httpd 中发现:

content length is beyond limit.
Http request body read fail.
Upload file fail for not enough space, g_nContentLength(%d) >= g_nAllowedSpace(%d)
fwrite fail when upload.
VersionUpload
/var/tmp/fw.bin
do_firmware_upgrade
my_upload_file

这证明有 body length、临时空间和写文件分支;字符串本身不能证明唯一的上限数值。

3.5 /tmp 空间与 Web 限制#

当时读取到:

/var/tmp 约 40960 KiB,可用约 40736 KiB
/tmp 约 20480 KiB,可用约 19456 KiB

官方包约 21.38 MiB,在 /var/tmp 理论上放得下,但仍被 HTTP 处理路径重置。磁盘空间够,不等于请求体限制够,也不等于升级进程会接受该文件。

3.6 Wireshark 过滤器#

只看 HTTP 上传:

ip.addr == 192.168.5.1 && ip.addr == 192.168.5.7 && tcp.port == 80

只看电脑到路由器:

ip.src == 192.168.5.7 && ip.dst == 192.168.5.1 && tcp.dstport == 80

只看重置/重传:

tcp.flags.reset == 1 || tcp.analysis.retransmission

早期过滤 udp 只能看到 DNS、多播或调试包,不能证明 HTTP 升级。抓包中由 192.168.5.1:80 返回 RST, ACK,与设备端连接关闭相符。

3.7 Web 结论#

  • 进度 100% 只表示浏览器发完请求,不表示设备已经校验或写入。
  • SessionTimeout 和 ERR_CONNECTION_RESET 必须分层排查。
  • 大于几百 KiB 的正式升级包应走 Telnet + TFTP + 本地 fw_flashing,不应继续反复提交 Web 请求。
  • 隐藏页面是真实刷写路径,不是安全测试页面。

4. fw-flashing 与双槽启动#

4.1 参数和最小失败测试#

Terminal window
/bin/fw_flashing
/bin/fw_flashing -h

输出包含:

fw_flashing:no parameter
d:r:p:f:m:v:

确认 -f:

Terminal window
echo test > /var/tmp/fw-test.bin
/bin/fw_flashing -f /var/tmp/fw-test.bin
echo $?

输出:

fw_flashing name=/var/tmp/fw-test.bin,states.st_size =5
read magic failed!
GetVersionInfo error==========fw_flashing error==========

说明 -f 确实接受路径,并要求带固件 Magic/版本头。

4.2 官方包成功刷写#

电脑端确认:

Terminal window
dir fw.bin
certutil -hashfile fw.bin MD5

路由器获取并校验:

Terminal window
cd /var/tmp
rm -f /var/tmp/fw.bin
tftp -g -l /var/tmp/fw.bin -r fw.bin 192.168.5.7
ls -l /var/tmp/fw.bin
md5sum /var/tmp/fw.bin

本次包 MD5:

de682a3dce2b128cf7edeb8ac5f958a1

执行:

Terminal window
/bin/fw_flashing -f /var/tmp/fw.bin

关键输出:

RunningVerStartAddr:700000
RunningHeadHighAddr:2300000
g_ver_towrite=2
g_upgrade_startaddr=0x2300000
g_upgrade_endaddr=0x3f00000
firmware_size=22413312
firmware_offset=0x214
sect_size=0x20000
WriteVersion head success!
==========fw_flashing success==================

说明程序选择备用高槽、擦除并写入了包体,同时更新了版本头。

4.3 强刷完整步骤(Telnet 通道)#

适用于 Web 上传被限制(第 3 节结论)、需要走 Telnet 直接刷写的场景。全程在 Telnet 下完成,fw_flashing 只写备用槽,写入成功并重启前当前系统不受影响。

强刷前提
  1. 已按第 1 节开启 Telnet,能登录设备。
  2. 强刷不能用官方版固件,必须用修改版 —— 官方原版包与这批机器的启动校验对不上,刷了设备起不来。
  3. 刷写只动版本槽,不碰 Tag/Wi-Fi 分区;但稳妥起见建议先按第 2 节做好备份。

① TFTP 传输固件到设备(192.168.5.7 换成电脑 IP,电脑侧 TFTP 服务需已启动):

Terminal window
cd /var/tmp
rm -f /var/tmp/fw.bin
tftp -g -l /var/tmp/fw.bin -r fw.bin 192.168.5.7

② 设备侧复核完整性。大包经 TFTP 落盘后必须复核,与电脑端 certutil -hashfile fw.bin MD5 的值对比:

Terminal window
ls -l /var/tmp/fw.bin
md5sum /var/tmp/fw.bin

大小或 MD5 不一致就重传,不要带着坏包执行刷写。

③ 直刷备用槽:

Terminal window
/bin/fw_flashing -f /var/tmp/fw.bin

结果判断:

输出含义
WriteVersion head success! + ==========fw_flashing success==================已写入备用槽并更新版本头(完整输出见 4.2),执行 reboot 进新系统
read magic failed! / GetVersionInfo error包不是整包或版本头损坏,当前系统不受影响,换包重来
fw_flashing error / flash addr overflow校验或地址越界,停止刷写,核对固件与机型

④ 失败与回退。

fw_flashing 校验失败时不会写入任何槽,设备照常使用。刷写成功但新系统启动异常时,原系统仍保留在另一槽,双槽机制提供回退可能(回退行为未实测,见 5.3,不要主动刷坏包去验证)。注意回退只回滚固件:改过的 Tag 型号、回写过的 config 都不会跟着回退。

5. 试错部分#

5.1 Tag 直接写失败#

尝试 cat、mknod、chmod 后仍 MD5 不一致。设备没有 mtd_debug、flash_erase、nandwrite,只有 fw_flashing、upgradetest 等程序;这些程序没有暴露 Tag 写入接口。

后来发现,官方固件本身就自带 /bin/setmac,它通过 libtagparam.so + libmtduserapi.so 自动完成擦除并重算 CRC32 —— 改 Tag 用一条命令就够了。

5.2 Web 反复失败#

升级准备失败:SessionTimeout
上传连接失败
net::ERR_CONNECTION_RESET

进度 31%、62%、97%、100% 后都见过失败。用小文件先拆分问题,确认大文件主要被 HTTP 路径限制后,停止继续提交 22 MiB 包,转为本地 fw_flashing。

5.3 未验证自动回退#

已确认 currentverphyaddr、backverphyaddr、两个 IsBad 字段,但没有故意刷坏包测试回退。不要为了得到一个“确定答案”而破坏当前可启动槽。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
E2633转正官方版分析(Telnet篇)
https://blog.zlion.top/posts/e2631-research-telnet/
作者
zlion
发布于
2026-08-04
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Shiyan
Hello, I'm Shiyan.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
13
分类
6
标签
43
总字数
39,065
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0