帮助逆向Linksys E1200路由器固件

逆向工程 固件
2021-06-12 23:19:23

我能够下载Linksys E1200 路由器固件,我想对其进行逆向工程。我相信它正在运行某种基于 Linux/Unix 的固件,并且可能在 ARM CPU 上运行。我已经binwalk反对它,但我不知道下一步该怎么做。

这是我得到的输出:

32            0x20            TRX firmware header, little endian, image size: 7684096 bytes, CRC32: 0xB533F216, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x14FF20, rootfs offset: 0x0
60            0x3C            gzip compressed data, maximum compression, has original file name: "piggy", from Unix, last modified: 2016-07-13 03:17:53
1376064       0x14FF40        Squashfs filesystem, little endian, non-standard signature, version 3.0, size: 6307458 bytes, 1721 inodes, blocksize: 65536 bytes, created: 2016-07-13 03:23:19
1个回答

下一步是-e使用binwalk. 然后可以进一步分析这些提取的文件。binwalk使用-A引导加载程序和内核文件上选项运行将提供有关固件指令集架构的线索。执行熵扫描-E可以深入了解提取文件的结构,并且对于识别压缩或加密区域很有用。

有多种用于提取 squashfs 文件系统的工具,例如squashfs-toolssasquatch

固件分析中采用的方法的一个很好的例子可以在这里找到:逆向工程固件:Linksys WAG120N

固件下载链接可用后更新:

为确保binwalk可以正确提取 SquashFS 文件系统映像,请执行以下步骤:

  1. 安装squashfs-tools

    sudo apt-get install squashfs-tools

  2. 在~中,sasquatch从github克隆

    git clone https://github.com/devttys0/sasquatch.git

  3. ~/sasquatch,执行build.sh(检查README.md以确保安装了所有依赖项)

还要检查binwalk本地安装的版本

$ binwalk

Binwalk v2.1.2b
Craig Heffner, http://www.binwalk.org

萃取

计算固件二进制文件的 md5sum:

$ md5sum FW_E1200v2.0.7.005_US_20160713_code.bin 
eb3752a5b72ccb0c9a92079fab88663e  FW_E1200v2.0.7.005_US_20160713_code.bin

运行binwalk签名扫描以确认输出:

$ binwalk FW_E1200v2.0.7.005_US_20160713_code.bin 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
32            0x20            TRX firmware header, little endian, image size: 7684096 bytes, CRC32: 0xB533F216, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x14FF20, rootfs offset: 0x0
60            0x3C            gzip compressed data, maximum compression, has original file name: "piggy", from Unix, last modified: 2016-07-13 03:17:53
1376064       0x14FF40        Squashfs filesystem, little endian, non-standard signature, version 3.0, size: 6307458 bytes, 1721 inodes, blocksize: 65536 bytes, created: 2016-07-13 03:23:19

输出似乎与原始帖子中的输出匹配。

萃取:

$ binwalk -e FW_E1200v2.0.7.005_US_20160713_code.bin 

文件被提取到目录_FW_E1200v2.0.7.005_US_20160713_code.bin.extracted/

$ file *
14FF40.squashfs: data
piggy:           FoxPro FPT, blocks size 0, next free block index 15993608
squashfs-root:   directory 

里面squashfs-root是提取的文件系统:

$ ll squashfs-root/
total 88
drwxrwxrwx 13 user01 user01  4096 Jul 12  2016 ./
drwxr-xr-x  3 user01 user01  4096 Jun 26 15:16 ../
drwxr-xr-x  2 user01 user01  4096 Jul 12  2016 bin/
drwxr-xr-x  2 user01 user01  4096 Jul 12  2016 dev/
drwxrwxrwx  4 user01 user01  4096 Jul 12  2016 etc/
drwxr-xr-x  3 user01 user01  4096 Jul 12  2016 lib/
drwxr-xr-x  2 user01 user01  4096 Jul 12  2016 mnt/
drwxr-xr-x  2 user01 user01  4096 Jul 12  2016 proc/
drwxr-xr-x  2 user01 user01 12288 Jul 12  2016 sbin/
drwxr-xr-x  2 user01 user01  4096 Jul 12  2016 sys/
drwxr-xr-x  2 user01 user01  4096 Jul 12  2016 tmp/
drwxrwxrwx  6 user01 user01  4096 Jul 12  2016 usr/
lrwxrwxrwx  1 user01 user01     7 Jun 26 15:16 var -> tmp/var
drwxr-xr-x 32 user01 user01 28672 Jul 12  2016 www/

小猪

运行filepiggy产生假阳性:

piggy:           FoxPro FPT, blocks size 0, next free block index 15993608

运行binwalk反对piggy表明它包含 Linux 内核代码:

$ binwalk piggy 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
2617344       0x27F000        Linux kernel version "2.6.22 (zhang@sw3) (gcc version 4.2.3) #5 Tue Jun 7 18:33:13 HKT 2016"
2641040       0x284C90        CRC32 polynomial table, little endian
2656556       0x28892C        CRC32 polynomial table, little endian
2852300       0x2B85CC        Unix path: /usr/gnemul/riscos/
2854956       0x2B902C        Unix path: /usr/lib/libc.so.1
2927975       0x2CAD67        Neighborly text, "NeighborSolicitsts"
2927999       0x2CAD7F        Neighborly text, "NeighborAdvertisementsmp6OutDestUnreachs"
2928200       0x2CAE48        Neighborly text, "NeighborSolicitsirects"
2928228       0x2CAE64        Neighborly text, "NeighborAdvertisementssponses"
2930275       0x2CB663        Neighborly text, "neighbor %.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x lost on port %d(%s)(%s)"

由 生成的熵图binwalk -EJ piggy显示了一个大的连续区域,其熵大约为 0.68:

小猪熵

这种熵水平与包含目标代码的区域的预期一致。

我们可以做出什么样的二进制文件的指令集架构是通过运行一个受过教育的猜测binwalk-A争论:

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1788          0x6FC           MIPSEL instructions, function epilogue
2636          0xA4C           MIPSEL instructions, function epilogue
4540          0x11BC          MIPSEL instructions, function epilogue
4932          0x1344          MIPSEL instructions, function epilogue
6092          0x17CC          MIPSEL instructions, function epilogue
6476          0x194C          MIPSEL instructions, function epilogue
6952          0x1B28          MIPSEL instructions, function epilogue
7040          0x1B80          MIPSEL instructions, function epilogue
8024          0x1F58          MIPSEL instructions, function epilogue
8392          0x20C8          MIPSEL instructions, function epilogue
9532          0x253C          MIPSEL instructions, function epilogue
9840          0x2670          MIPSEL instructions, function epilogue
12552         0x3108          MIPSEL instructions, function epilogue
12682         0x318A          MIPS instructions, function epilogue
12836         0x3224          MIPSEL instructions, function epilogue
13364         0x3434          MIPSEL instructions, function epilogue

ISA 可能是 MIPS 小端。