3、固件分析-固件提取

  上节初步介绍一些硬件基础知识和分析硬件所须要的基本工具,本篇将讲述利用编程器直接读取芯片固件的方法。 为了读取 Flash 芯片的内容,有如下两种经常使用方式:编程

一、直接将导线链接到芯片的引脚,在经过飞线链接编程器,进行在线读取固件;安全

二、把芯片拆焊下来,经过烧录座编程器,离线读取固件。网络

飞线法读取

经过夹具夹住芯片引脚,而后链接编程器读取芯片内容,经过编程器链接芯片须要注意引脚的顺序,在 IC 芯片上都会有一个小点,大多数状况下,小点对应的引脚即为芯片的第一脚,而链接编程器的导线也须要插入编程器上相应的引脚。工具

案例一:读取中控 F7 门禁固件

拆掉门禁外壳,经过电路图和芯片印字分析,在主板上有一颗 FM25F04A 存储芯片,经过夹具链接芯片到编程器,在经过专用编程器软件,对该芯片进行读取。3d

链接完成,肯定引脚接线正确后,打开编程器对应软件,经过智能识别芯片ID,便可开始读取固件工做。 如没法识别,可根据印字说明,尝试相似的型号,通常状况下兼容。blog

点击读取,便可开始固件提取,成功以后会保存为 BIN 格式文件,打开便可看到 16 进制的内容,为下一步分析提供基础。路由

案例二:读取某智能摄像头固件

拆掉摄像头外壳,经过分析 PCB 上的各个 IC,找到 Flash 存储芯片。监控

在显微镜下,能够看到是一颗 25L64 型号的 Flash 芯片。基础

用夹具链接各引脚,并和编程器链接,进行固件读取。软件

识别到芯片型号为 GD25Q64,点击读取,读取完毕后按照提示保存到文件。

打开保存的 BIN 文件或者查看缓冲区,便可看到固件内容。

在Ubuntu中,用binwalk解包固件,作进一步分析。

案例三:读取某智能摄像头固件

打开外壳,在PCB背面发现一颗 Flash 存储芯片

经过显微镜发现芯片型号为 25L128。

链接编程器读取固件并保存。

案例四:读取某路由器固件

打开外壳,发现 PCB 上有一颗 Flash 存储器,但厂商出于安全考虑,把芯片印字涂抹掉了。

在不知道芯片型号的状况下,咱们链接该芯片,让编程器去尝试读取。

经过智能识别,发现编程器没法识别出具体型号,而由于 Flash 存储芯片的种类多样,经过查找又没法得到该路由器的具体参数,这时咱们经过 UART 串口,读取出 UBOOT 启动信息,串口输出里面发现了该芯片型号为 W25Q128BV。

在编程器中选择该型号,成功提取出固件。

用 binwalk 解包固件。

案例五:读取某智能电饭锅固件

拆掉外壳,背面嵌有一块 PCB,反面是 WIFI 处理芯片,正面为存储器,链接编程器。

经过印字分析为25芯片,存储大小为 2M 字节,尝试该型号芯片,成功读取固件。

案例六:读取某网络监控摄像机固件

在 PCB 上找到一块 25L128 型号的 Flash 存储芯片。

经过夹具链接编程器。

识别到芯片为 MX25L128,选择其中一种,成功提取固件。

用binwalk解包固件内容。