无法提取网络摄像机固件

逆向工程 二元分析 固件 嵌入式
2021-07-10 16:27:49

我正在尝试为松下 WV-S2131L 网络摄像机提取固件它是一个包含 .img 文件的 .zip 文件。我尝试了很多方法来尝试分析这个文件,但我没有发现任何有价值的东西。

Binwalk 一无所获

xxd 至少给了我固件版本

xxd -a s1131_402ES.img | head 00000000: 342e 3032 4530 0000 302e 3030 0000 0000 4.02E0..0.00.... 00000010: 1314 0000 1314 0000 0004 0000 8000 b003 ................ 00000020: 1f06 0000 0000 0000 0000 0000 0000 0000 ................ 00000030: 0000 0000 0000 0000 0000 0000 0000 8000 ................ 00000040: 0000 0000 0000 0000 0000 8000 0000 2003 .............. . 00000050: 0000 0000 0000 0000 0000 a003 9601 0000 ................ 00000060: 0100 0000 0000 0000 0100 0000 0000 0000 ................ 00000070: 0000 0000 0000 0000 0000 0000 0000 797d ..............y} 00000080: 5e12 3e81 1370 6400 a6fa c4e5 058b 3136 ^.>..pd.......16 00000090: 5630 f8f0 2878 5f56 7788 279b a597 114c V0..(x_Vw.'....L

完整的十六进制转储显示没有可识别的字符串

FDisk 说没有可识别的文件系统

7zip 认为它已损坏

我认为它必须是某种类型的二进制图像,但由于没有任何工具,我尝试给出任何可识别分区或文件存在的迹象,也许它被混淆或具有某种类型的加密。

2个回答

执行固件分析时,应始终首先检查熵图,因为这是确定文件是压缩还是加密的最快方法。

在这种情况下,文件的熵图和字节频率分布表明它已加密。因此,没有签名和无意义的字符串。

具体来说:

  • 整个文件的熵水平非常接近最大值。
  • 字节值的分布接近均匀,表明文件更可能被加密而不是被压缩。

通过binwalk -E s1131_402ES.img以下方式生成的熵图

熵图

字节频率分布:

分布

用于生成这些图的代码以及对这种可视化选择背后的推理的一些讨论可以在这个gist 中找到,并作为脚本包含在这里:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [15, 5]
import seaborn as sns; sns.set()

def plot_relative_frequency_distribution(data, filename):

    # unvariate
    ax = sns.distplot(np.array(list(data)), 
                      bins=256, 
                      kde=False,
                      hist_kws={'alpha':0.8},
                      norm_hist=True, 
                      color='blue');
    ax.set(xlabel='Byte Value (base 10)', 
            ylabel='Relative Frequency', 
            title='Relative Frequency Histogram of Byte Values')
    # control x axis range
    ax.set_xlim(-10, 260)
    #ax.set_ylim(0, 0.10)
    ax.set_title(filename)


def plot_cdf(data, filename):
    ax = sns.distplot(np.array(list(data)), 
                      bins=256, 
                      kde=False,
                      hist_kws={'histtype':'step', 'cumulative': True, 'linewidth':1, 'alpha':1}, 
                      kde_kws={'cumulative': True},
                      norm_hist=True, 
                      color='red');

    ax.set(xlabel='Byte Value (base 10)', 
           ylabel='Probability', 
           title='CDF of Byte Values')
            # control x axis range
    ax.set_xlim(-10, 260)
    #ax.set_ylim(0, 0.10)

def create_plots(file):

    with open(file, 'rb') as f:
        data = f.read()

    # control layout
    grid = plt.GridSpec(1, 3, wspace=0.3, hspace=0.1)

    # first plot
    plt.subplot(grid[0, :2])
    plot_relative_frequency_distribution(data, f.name)

    # second plot
    plt.subplot(grid[0, 2:])
    plot_cdf(data, f.name)

    plt.show()

def main():
    create_plots('s1131_402ES.img')

似乎是一个加密文件,可能是用设备(相机)的引导加载程序制作的,需要访问引导加载程序以尝试反转它并获取软件算法。

固件包有一些已知的头文件,比如 deflate 过程所需的 Little Endian (0x03B0xxxx) 文件的总长度。

所以松下品牌可能会为他们的固件应用软件保护,通过拆焊和读取 bga IC,可以很容易地从设备中获取所有代码(启动 + 公司 + 数据)或 nand 闪存,但我怀疑他们会使用加密处理器。

问候。

在此处输入图片说明