路由器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压缩数据段...]

关键点:

  1. IMG0 (VxWorks) Header:VxWorks操作系统使用的映像头

    • 起始偏移:20 (0x14)
    • 大小:909,568字节
  2. U-Boot信息

    • 版本:U-Boot 1.1.3 (2017年6月2日编译)
    • 偏移:43,956 (0xABB4)
  3. 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初步分析

  1. 加载提取的文件
  2. 提示按"C"在认为的开始处进行反编译
  3. 观察汇编代码

发现问题:

  • 函数名称缺失
  • 代码可读性差

5.2 基址分析

从汇编代码中发现跳转地址0xB0000600,推测程序段基址可能在0xB0000000。

5.3 使用Ghidra分析

  1. 加载文件
  2. 设置基址为0xB0000000
  3. 发现问题:部分地址仍以0x80000000开头
  4. 调整基址为0x80000000

结果:

  • 反编译效果改善
  • 字符串引用问题解决

6. 关键知识点总结

  1. 固件结构

    • VxWorks操作系统映像
    • U-Boot引导加载程序
    • 大量LZMA压缩数据段
  2. 压缩特征

    • LZMA压缩,8MB字典大小
    • 属性值0x5A或0x6E
  3. 安全信息

    • 包含PEM证书和私钥
    • 版权信息显示可能基于TP-LINK代码修改
  4. 逆向工程要点

    • 正确识别基址至关重要(0x80000000)
    • 需要结合多种工具分析
    • 小端序架构
  5. 方法论

    • 从自动工具(binwalk)开始
    • 手动验证和提取关键部分(dd)
    • 多工具交叉验证(010 Editor, IDA, Ghidra)

7. 完整工作流程

  1. 使用binwalk进行初步分析
  2. 识别关键数据段(最大LZMA段)
  3. 使用dd精确提取目标段
  4. 二进制编辑器验证提取完整性
  5. 解压和分析内容
  6. 逆向工程确定基址和架构
  7. 使用Ghidra/IDA进行深入分析

8. 经验教训

  1. 不要依赖单一工具:binwalk自动提取可能不完整
  2. 手动验证很重要:dd提取确保准确性
  3. 基址是关键:错误的基址会导致反编译失败
  4. 多角度分析:结合二进制分析、逆向工程等多种方法
  5. 跳出舒适圈:不能只做"脚本小子",需要深入理解底层原理

9. 参考资源

  1. binwalk官方文档
  2. LZMA压缩算法规范
  3. VxWorks系统架构文档
  4. U-Boot引导加载程序分析指南
  5. Ghidra逆向工程手册

通过本教程,您应该能够掌握从路由器固件中提取和分析关键组件的方法,特别是针对迅捷FR100P-AC这类使用VxWorks系统和LZMA压缩的嵌入式设备。

迅捷PoE AC路由一体机FR100P-AC固件提取与分析教程 1. 准备工作 1.1 所需工具 binwalk :固件分析提取工具 dd :二进制数据提取工具 010 Editor:二进制文件分析工具 IDA Pro:反汇编和逆向工程工具 Ghidra:开源逆向工程工具 1.2 环境准备 建议在Linux环境下进行操作,确保已安装上述工具并配置好环境。 2. 初始固件分析 2.1 使用binwalk初步分析 2.2 分析结果解读 输出显示了固件的结构组成: 关键点: 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提取 参数说明: if :输入文件 of :输出文件 bs :块大小(1字节) skip :跳过前57,620字节 count :提取619,532字节 3.3 使用010 Editor分析 将提取的57620.lzma文件在010 Editor中查看: 检查文件头是否完整 识别可能的冗余数据(灰度分析) 4. 解压与分析LZMA数据 4.1 使用binwalk分析提取的文件 输出包含: 关键发现: 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压缩的嵌入式设备。