拆解 VxWorks 固件

逆向工程 拆卸 固件
2021-07-07 23:17:04

我正在尝试拆卸 Cisco Sx300 交换机的固件,如下所示:https ://software.cisco.com/download/release.html%3Fmdfid%3D283019611%26softwareid%3D282463181%26release%3D1.2.7.76

虽然存在一些关于 Wind River 固件其他迭代的文档,但我还没有遇到过针对此特定固件的一组工作工具。

Binwalk 给出了一些结果:

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Cisco VxWorks firmware header, header size: 80 bytes, number of files: 15, image size: 6988894, firmware version: "1.2.7.76"
209           0xD1            LANCOM WWAN firmware
1483          0x5CB           LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 16016448 bytes
3984149       0x3CCB15        LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 859164 bytes
4153128       0x3F5F28        LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 2962457 bytes
4847723       0x49F86B        LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 2122505 bytes
6914211       0x6980A3        LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 66664 bytes
6932632       0x69C898        XML document, version: "1.0"
6950635       0x6A0EEB        LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 121427 bytes

但是,使用 -e 标志提取不会提供有意义的结果。几个文件被提取出来,但其他文件最终成为损坏的档案,或者文件太小而不能成为实际文件。我不确定 LZMA 压缩数据不是误报。

使用 IDA 反汇编失败,因为我不知道加载程序地址。

此 Cisco 帮助资源表明正在进行某种形式的压缩:https : //supportforums.cisco.com/t5/small-business-support-documents/how-to-recover-a-reboot-loop-on-sx300 /ta-p/3134953

此帮助支持帖子确认固件是基于 ARM 的,但我不确定该芯片的确切品牌。

我知道 VxWork 固件的先前迭代在标头中有加载程序地址。对标头的分析在建议的位置 (0x14) 没有找到可用的地址

很可能是 VxWorks 标题

我尝试将固件中的字符串与字符串表进行匹配,尽管进行了彻底的搜索,但还是找不到任何字符串表。这支持我的观点,即它被压缩,或以其他方式打包。

最后,我在二进制文件中搜索可能的地址以推断加载程序地址。我找不到任何常用的地址或范围。这尤其困难,因为 IDA 无法正确分析任何二进制文件。

我在这里错过了一些简单而基本的东西吗?VxWorks 固件有什么特殊技术吗?

1个回答

这支持我的观点,即它被压缩,或以其他方式打包。

你是对的; 该固件映像的大部分内容都经过压缩或加密。为了被反汇编,二进制文件必须被解压/解密。

压缩/加密的证据:

  1. binwalk 熵图 binwalk 熵图

    贯穿整个文件的熵水平似乎接近可能的最大值。

  2. 通过binvis.io 进行可视化

    左侧是固件熵的可视化,右侧是未压缩文件的熵的可视化:

    固件熵 binvis.io bash 熵

  3. ent(伪随机数序列测试程序)

    $ ent sx300_fw-12776.ros 
    Entropy = 7.999864 bits per byte.
    
    Optimum compression would reduce the size
    of this 6988974 byte file by 0 percent.
    
    Chi square distribution for 6988974 samples is 1330.86, and randomly
    would exceed this value 0.01 percent of the times.
    
    Arithmetic mean value of data bytes is 127.3134 (127.5 = random).
    Monte Carlo value for Pi is 3.145007550 (error 0.11 percent).
    Serial correlation coefficient is 0.002524 (totally uncorrelated = 0.0).
    

    http://www.devttys0.com/2013/06/differentiate-encryption-from-compression-using-math/