路由器dd手动提取固件---迅捷PoEAC路由一体机FR100P-AC固件提取
字数 1716 2025-08-22 12:23:25
迅捷PoE AC路由一体机FR100P-AC固件提取与分析教程
1. 准备工作
1.1 所需工具
binwalk:固件分析提取工具dd:二进制数据提取工具- 010 Editor:二进制文件分析工具
- IDA Pro:反汇编和逆向工程工具
- Ghidra:开源逆向工程工具
1.2 环境准备
建议在Linux环境下进行操作,确保已安装上述工具并配置好环境。
2. 初始固件分析
2.1 使用binwalk初步分析
sudo binwalk -Me --run-as=root fr100pacv1.bin
2.2 分析结果解读
输出显示了固件的结构组成:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
20 0x14 IMG0 (VxWorks) header, size: 909568
43956 0xABB4 U-Boot version string, "U-Boot 1.1.3 (Jun 2 2017 - 18:37:14)"
57492 0xE094 IMG0 (VxWorks) header, size: 852096
57620 0xE114 LZMA compressed data, properties: 0x6E, dictionary size: 8388608 bytes, uncompressed size: 1267504 bytes
677152 0xA5520 LZMA compressed data, properties: 0x5A, dictionary size: 8388608 bytes, uncompressed size: 1758 bytes
[...后续大量LZMA压缩数据段...]
关键点:
-
IMG0 (VxWorks) Header:VxWorks操作系统使用的映像头
- 起始偏移:20 (0x14)
- 大小:909,568字节
-
U-Boot信息
- 版本:U-Boot 1.1.3 (2017年6月2日编译)
- 偏移:43,956 (0xABB4)
-
LZMA压缩数据
- 主要分布在57,620 (0xE114)到905,026 (0xDCF42)之间
- 特征:
- 属性:0x5A或0x6E
- 字典大小:8MB (8,388,608字节)
- 解压后大小:从几百字节到数万字节不等
3. 手动提取关键数据段
3.1 识别主程序段
通过可视化分析,发现从57,620开始的压缩数据段占比最大,推测为主程序。
3.2 使用dd提取
dd if=fr100pacv1.bin of=57620.lzma bs=1 skip=57620 count=619532
参数说明:
if:输入文件of:输出文件bs:块大小(1字节)skip:跳过前57,620字节count:提取619,532字节
3.3 使用010 Editor分析
将提取的57620.lzma文件在010 Editor中查看:
- 检查文件头是否完整
- 识别可能的冗余数据(灰度分析)
4. 解压与分析LZMA数据
4.1 使用binwalk分析提取的文件
binwalk 57620.lzma
输出包含:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
176636 0x2B1FC Copyright string: "Copyright(C) 2001-2011 by TP-LINK TECHNOLOGIES CO., LTD."
522740 0x7F9F4 PEM certificate
523412 0x7FC94 PEM RSA private key
559336 0x888E8 Copyright string: "Copyright FAST_TECHNOLOGIES"
790532 0xC1004 HTML document header
790597 0xC1045 HTML document footer
947428 0xE74E4 PEM certificate
[...更多证书和密钥信息...]
1183672 0x120FB8 SHA256 hash constants, little endian
1242908 0x12F71C XML document, version: "1.0"
关键发现:
- TP-LINK和FAST TECHNOLOGIES的版权信息
- 多个PEM格式的证书和私钥
- 小端序(SHA256 hash constants, little endian)指示
- XML文档
5. 逆向工程分析
5.1 使用IDA Pro初步分析
- 加载提取的文件
- 提示按"C"在认为的开始处进行反编译
- 观察汇编代码
发现问题:
- 函数名称缺失
- 代码可读性差
5.2 基址分析
从汇编代码中发现跳转地址0xB0000600,推测程序段基址可能在0xB0000000。
5.3 使用Ghidra分析
- 加载文件
- 设置基址为0xB0000000
- 发现问题:部分地址仍以0x80000000开头
- 调整基址为0x80000000
结果:
- 反编译效果改善
- 字符串引用问题解决
6. 关键知识点总结
-
固件结构:
- VxWorks操作系统映像
- U-Boot引导加载程序
- 大量LZMA压缩数据段
-
压缩特征:
- LZMA压缩,8MB字典大小
- 属性值0x5A或0x6E
-
安全信息:
- 包含PEM证书和私钥
- 版权信息显示可能基于TP-LINK代码修改
-
逆向工程要点:
- 正确识别基址至关重要(0x80000000)
- 需要结合多种工具分析
- 小端序架构
-
方法论:
- 从自动工具(binwalk)开始
- 手动验证和提取关键部分(dd)
- 多工具交叉验证(010 Editor, IDA, Ghidra)
7. 完整工作流程
- 使用binwalk进行初步分析
- 识别关键数据段(最大LZMA段)
- 使用dd精确提取目标段
- 二进制编辑器验证提取完整性
- 解压和分析内容
- 逆向工程确定基址和架构
- 使用Ghidra/IDA进行深入分析
8. 经验教训
- 不要依赖单一工具:binwalk自动提取可能不完整
- 手动验证很重要:dd提取确保准确性
- 基址是关键:错误的基址会导致反编译失败
- 多角度分析:结合二进制分析、逆向工程等多种方法
- 跳出舒适圈:不能只做"脚本小子",需要深入理解底层原理
9. 参考资源
- binwalk官方文档
- LZMA压缩算法规范
- VxWorks系统架构文档
- U-Boot引导加载程序分析指南
- Ghidra逆向工程手册
通过本教程,您应该能够掌握从路由器固件中提取和分析关键组件的方法,特别是针对迅捷FR100P-AC这类使用VxWorks系统和LZMA压缩的嵌入式设备。