NAND Flash 固件读取及解包处理

IoT 2年前 (2022) admin
1,194 2 0

读取

       一般对于无法从官网上拿到固件、或固件加密无法解密、或无法从内存读取固件时,我们可以用热风枪吹下flash芯片,用编程器读取固件内容。


       在拆卸NAND Flash时,需要注意两点,一是温度,二是风速。温度过高会损坏设备,温度过低无法融化焊锡,对于含铅焊锡使用温度在330-350摄氏度之间,如果采用无铅焊锡,温度则在350-370摄氏度之间。比较好的做法是使用高温胶带将芯片四周包裹起来,起到隔热保护的作用,对于不同的芯片,最好先下载查看芯片手册,有些对温度有特别的要求。而风速根据作业区的不同来调节,对于小元件,需要注意因风压过高而吹走,对于较大的元件,或周围无塑胶件时,可以适当调大风量,通过高风压来补偿大散热面积的热量损失,但需要注意风速大加热速度也快。


       在拆卸完芯片后,需要注意芯片是有方向的,在第一脚的地方有一个圆点,在焊接或编程器读取时,对准圆点。读取固件时,推荐使用烧录座进行读取(使用芯片夹容易受外围电路干扰),如图为烧录座,对于不同封装的芯片也需要更换不同的烧录座。

NAND Flash 固件读取及解包处理

       根据芯片上的丝印,选择对应的型号,进行读取,如图。

NAND Flash 固件读取及解包处理

       在读取过程中可能由于硬件问题或数据传输问题(比特翻转),导致部分数据读取出错,因此一般需要多次读取,并校验读取结果,若校验结果一致,则读取正常。此外,若多次读取结果不一致,可以采用基于统计的方法修复错误数据,取变化字节中出现频率最高的值为原始数据的值。


固件处理

       Flash芯片分为Nor Flash和Nand Flash,这两种芯片的外观差异较大,如图,可以直接分辨,也可以通过芯片手册识别,这两者明显的差别在于nand flash 不可随机寻址。Nand Flash常见于路由器、个人云等IOT设备上。对于Nor Flash,在读取固件后,直接进行固件解析即可,而对于Nand Flash,在读取固件后还需要对数据进行处理,修复错误数据以及去除ECC校验位。

NAND Flash 固件读取及解包处理


1、Nand Flash特性

       Nand Flash有特定的存储结构,可分为plane,block以及page。IoT设备会在软件层面实现坏块管理,充分利用Nand Flash的存储空间,延长使用寿命。坏块管理一般使用ECC校验算法,ECC校验算法一般每256字节原始数据生成3字节校验数据,在Nand Flash上存储原始数据的同时会存储校验数据。


       由于ECC校验算法的使用,导致我们从Nand Flash中读出的数据混合了原始数据和校验数据。要想对固件进行正确的解析,必须去除这些校验数据。一般Nand Flash每页存储512字节原始数据,并分配16字节用于存储校验数据、坏块标记和文件系统信息,这16字节被称为spare area。但是原始数据和spare area的排布并不是固定的,常见的排布方式有两种。

NAND Flash 固件读取及解包处理


2、对F50L1G41LB的处理

       以F50L1G41LB为例,其由1块plane组成,每块plane由1024 block组成,每块block由64 page组成,每page有(2048 + 64)=2112字节。其中64字节为OOB区,用作校验和坏块管理,具体管理方式可参考该flash的datasheet。

NAND Flash 固件读取及解包处理

     通过编程器提取该flash固件,可得文件大小138,412,032字节

=1(plane)*(1024block)*64(page)*2112(byte),恰好符合datasheet描述。但需要注意的是,此时binwalk并不能有效识别该固件的组成及提取其中的文件系统。因此需要对固件数据进行处理,筛选坏块并去除OOB区。


       在F50L1G41LB的datasheet里可以找到两句描述,分别是 the 1st or 2nd page of every initial invalid block has non-FFh data at the 1st byte column address in the spare area和with a separate 64-Byte spare area,因此在处理数据时,我们需要去除坏块和丢弃每页后的64个字节校验值。


       接下来我们分别对未处理固件使用binwalk解包,如图,解包之后文件系统为空,并且存在很多未识别压缩文件。

NAND Flash 固件读取及解包处理

       对处理好后的固件进行解包,如图。文件系统被完整解包出来。

NAND Flash 固件读取及解包处理


其他获取固件的方式

       除了以上所说的固件获取方式,当可以拿到设备的串口时,还可以修改uboot启动参数,如init=/bin/sh或者tftp挂载;用第三方Linux挂载硬盘,替换shadow;或者在系统启动时添加init=passwd root -d等。


NAND Flash 固件读取及解包处理

联想GIC全球安全实验室(中国)

[email protected]

原文始发于微信公众号(联想全球安全实验室):NAND Flash 固件读取及解包处理

版权声明:admin 发表于 2022年10月19日 下午5:00。
转载请注明:NAND Flash 固件读取及解包处理 | CTF导航

相关文章

2 条评论

您必须登录才能参与评论!
立即登录