硬件黑客 --- U-Boot UART 提取固件
前置条件
- 已焊接UART接口(TX、RX、GND)
- USB串口适配器已连接电脑
- 已确定正确的波特率
步骤1:连接串口
picocom -b 115200 /dev/ttyUSB0
-b 115200:波特率(根据实际设备调整)/dev/ttyUSB0:串口设备路径
步骤2:进入U-Boot命令行
- 关闭设备电源
- 按住Enter键不放
- 打开设备电源
- 看到
Hit any key to stop autoboot时自动中断 - 出现U-Boot提示符,输入
h查看帮助
步骤3:获取Flash信息
bdinfo
输出示例:
Flash Start = 0xBF000000
Flash Size = 0x800000
记录这两个值:
- 起始地址:
0xBF000000 - Flash大小:
0x800000
步骤4:计算读取字数
打开另一个终端,用Python计算:
python3
>>> 0x800000 / 4
2097152.0
结果:需要读取2097152个字(word)
步骤5:退出当前picocom
Ctrl+A, Ctrl+X
步骤6:重新连接并开启日志记录
picocom -b 115200 --log-file output.txt /dev/ttyUSB0
步骤7:重新进入U-Boot
重复步骤2(关机 → 按住Enter → 开机)
步骤8:执行固件转储
md 0xBF0000002097152
格式:md <起始地址> <字数>
⚠️ 注意:此过程需要数小时,建议过夜运行
步骤9:完成后退出picocom
Ctrl+A, Ctrl+X
步骤10:清理日志文件
用文本编辑器打开 output.txt:
vim output.txt
删除:
- 文件开头的命令和杂项内容
- 文件末尾的多余内容
- 只保留十六进制转储数据
步骤11:转换为二进制文件
使用作者的Python脚本:
python3 parse_uboot_dump.py output.txt firmware.bin
步骤12:验证和分析固件
查看二进制文件:
xxd firmware.bin | head
使用binwalk分析:
binwalk firmware.bin
提取固件内容:
binwalk -e firmware.bin
命令速查表
| 步骤 | 命令 |
|---|---|
| 连接串口 | picocom -b 115200 /dev/ttyUSB0 |
| 带日志连接 | picocom -b 115200 --log-file output.txt /dev/ttyUSB0 |
| 查看帮助 | h |
| 查看系统信息 | bdinfo |
| 内存转储 | md <地址> <字数> |
| 退出picocom | Ctrl+A, Ctrl+X |
| 分析固件 | binwalk firmware.bin |
浙公网安备 33010602011771号