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断点续传。