固件基础
了解固件结构是救砖和刷机的关键。
固件结构
路由器固件通常包含以下几个部分。
Flash 分区
| 分区名称 | 大小(典型) | 内容 |
|---|---|---|
| u-boot | 256KB-512KB | 引导程序 |
| kernel | 3MB-5MB | Linux 内核 |
| rootfs | 剩余空间 | 根文件系统 |
| nvram | 64KB-128KB | 配置存储 |
| art | 64KB | 无线参数 |
文件系统类型
- SquashFS:只读压缩文件系统,常见于原厂固件
- JFFS2:可读写,常见于 OpenWRT
- UBIFS:大容量 NAND Flash 使用
- YAFFS2:早期嵌入式设备使用
固件格式
常见扩展名
- .bin:通用二进制格式
- .trx:Linksys/华硕固件格式
- .chk:Netgear 专用格式
- .img:通用镜像格式
固件头部
大多数固件以固定头部开头:
00 00 00 00 4D 49 50 53 # MIPS 标识
或
FF FF FF FF # TP-Link 常见
启动流程
完整启动序列
- 上电 → CPU 初始化
- U-Boot → 读取环境变量
- 内核加载 → 从 Flash 读取内核
- 文件系统 → 挂载根文件系统
- 网络初始化 → 启动网络服务
- Web 服务 → HTTP 服务就绪
U-Boot 启动参数
bootcmd=bootm 9f020000 bootargs=console=ttyS0,115200 root=/dev/mtdblock2
中断启动
在启动过程中按特定键可进入:
- 回车键:进入命令模式
- tftp:网络启动
- firmware:指定固件位置
Bootloader 介绍
U-Boot
最通用的开源引导程序。
- 支持多种 CPU 架构(MIPS/ARM/x86)
- 支持网络启动(TFTP)
- 可修改启动参数
- 常见于小米、华为部分机型
setenv ipaddr 192.168.1.1 setenv serverip 192.168.1.100 tftpboot 0x81000000 firmware.bin erase 0x9f000000 +0x300000 cp.b 0x81000000 0x9f000000 0x300000
Breed
国内路由器常见的闭源引导程序。
- 界面友好(Web 控制台)
- 支持多固件备份
- 内置 TFTP 恢复
- 常见于 PandoraBox、Padavan 固件
CFE
Broadcom 芯片专用引导程序。
- 适用于 Netgear、华硕部分机型
- 串口控制台操作
- 支持 NFS 网络启动
原厂 Boot
- 功能简单
- 只能刷官方固件
- 部分可解锁刷第三方
固件修改
提取固件
# 使用 binwalk 提取 binwalk -e firmware.bin # 或手动解压 tar -xvf openwrt.bin
修改工具
- firmware-mod-kit:固件修改工具包
- binwalk:固件分析工具
- squashfs-tools:SquashFS 文件系统工具
刷入固件
- 通过 Web 界面上传
- 通过 TFTP 刷入
- 通过 U-Boot 命令行
- 通过 TTL 串口直接写入 Flash
安全检查
固件签名
现代路由器对固件有签名验证:
- 安全启动:仅允许官方固件
- Bootloader 锁:禁止刷写
- 闪存锁:防止读取
绕过方法
- 使用 TTL 串口直接刷写
- 短接 Flash 芯片特定引脚
- 利用漏洞降级到低版本