2. 固件镜像获取与识别

任务说明

本案例以某开源路由器固件为例,完成固件镜像的获取、类型识别与文件系统提取。目标是通过实际可复现的步骤,掌握固件分析前的基础操作:使用file判断镜像格式,使用binwalk扫描文件系统偏移并提取内容。

环境准备

操作系统:Ubuntu 22.04 LTS(或任一主流Linux发行版)。所需工具:wget、file、binwalk。安装命令:

sudo apt update && sudo apt install -y wget file binwalk

固件获取

以TP-Link TL-WR841N V14固件为例(该型号固件公开可下载,体积约4MB,适合教学)。下载命令:

wget -O wr841n.bin "https://static.tp-link.com/resources/software/TL-WR841N_V14_150429.zip"

下载完成后解压:

unzip wr841n.bin.zip && ls -lh *.bin

若官网链接失效,可自行从设备厂商支持页面下载任意一款路由器固件,后续分析步骤完全一致。

固件类型识别

使用file命令查看镜像基本信息:

file wr841n.bin

预期输出类似:

wr841n.bin: u-boot legacy uImage, firmware, Linux... , Linux/ARM, OS Kernel Image

该输出表明这是一个U-Boot格式的固件镜像,包含Linux内核。但file只能识别镜像头部,无法定位文件系统位置,需要进一步使用binwalk扫描。

文件系统扫描与提取

运行binwalk扫描固件内部结构:

binwalk wr841n.bin

预期输出中会列出多个偏移地址,其中关键行类似:

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             U-Boot legacy uImage, ...
1048576       0x100000        Squashfs filesystem, little endian, version 4.0, compression:lzma

偏移量0x100000(1MB处)即为Squashfs文件系统起始位置。执行提取:

binwalk -e wr841n.bin

该命令会自动识别文件系统类型并解包。完成后当前目录下会生成_wr841n.bin.extracted文件夹,其中包含解包后的文件系统目录(如squashfs-root/)。

验证提取结果

检查解包后的文件系统内容:

ls -la _wr841n.bin.extracted/squashfs-root/

若能看到etc/、bin/、usr/等标准Linux目录结构,说明文件系统提取成功。进一步验证关键配置文件:

cat _wr841n.bin.extracted/squashfs-root/etc/passwd

能正常读取文件内容即代表整个固件获取与识别流程闭环完成。

常见问题

  • binwalk未识别出文件系统:部分固件使用非标准偏移或加密,可尝试binwalk -A或binwalk -M深度扫描。
  • 解压后文件为空:确认固件未加密。若为加密固件,需先解密才能分析,不在本案例范围内。
  • 官网下载速度慢:可改用厂商镜像站或使用wget -c断点续传。