大致分为以下3种

  1. 可以直接通过linux的binwalk提取的
  2. 由于linux对文件类型判断错误,对存储文件系统压缩包使用了错误的工具
  3. 固件被加密,导致需要通过一些手法来绕过或者解密固件,进行文件系统的提取的

以下会通过一些典型的例子进行讲解

常见的路由器分为几种:

直接使用binwalk提取(标准固件)

1
binwalk -Me firmware.bin

典型案例:

  • TP-Link Archer系列路由器

  • D-Link DIR系列部分型号

  • 大部分开源固件(OpenWrt等)

常见文件系统类型:

  • SquashFS:最常见,只读压缩文件系统

  • JFFS2:可写文件系统,常用于配置存储

  • CramFS:旧式压缩文件系统

  • UBIFS:用于NAND闪存的文件系统

在binwalk -Me之后,虽然大部分情况下文件系统已经被提取出来了,但是一些软链接并没有被成功建立起来(为了安全的考量),但是对于需要进行系统模式qemu仿真情况下,我们需要保证文件系统的完整性,例如有一个squashfs-root的文件夹,我们将其rm -r然后unsquashfs xxx.xxx,就能获得完整的文件系统拉

文件系统识别错误的处理

大部分未被加密的情况下,binwalk足以解决大部分的文件系统的提取

但是还是存在一些问题,最典型的就是binwalk对ubireader_extract_images没有正确使用

有时候在提取部分小米,Tp-link以及部分厂商的固件时会出现类似于:

1
2
3
4
5
.
├── frimware
   └── _xxx.bin_extrace
   ├──3A.ubi
   └──.....

发现在提取出ubi的情况下,未出现完整的文件系统,用ubireader_extract_images 3A.ubi,然后一般会出现四个映像,正常使用unsquashfs提取最大的映像即可

加密固件的处理

经典老图: