固件字节反转?

一、前言

使用RT809H编程器提取Nand Flash时候,查看芯片手册了解Flash芯片的存储分布,去除OOB之后,使用binwalk解包没有发现文件系统,如下图所示:

二、分析

一般来说Nand Flash容量比较大,会使用一些EXT、UBI文件系统方便修改内容,我们再次使用binwalk -E查看固件的熵,发现并不是加密的,很可能是做了一些特殊处理。

我们使用16进制工具人工分析固件,我们发现一些很特别的标志#IBU、!IBU

参考《ubifs文件系统(二)》我们知道UBI的Erase count header标志是UBI#,Volume identifier header标志是UBI!,我们大胆猜测提取的固件是发生了存储时大小端反转,至于是几个字节反转,还得继续分析。

我们找到了一段unil ...x ,这里猜测是4字节反转,转换后刚好为 linu x... ,也就是linux字符串,是一个正常的字符串.

编写python脚本自动处理,还原正常的固件

#!/usr/bin/python3

with open("firmware.bin", "rb") as f:
    data = f.read()
    out = bytearray(data)
    f.close()

f = open("out.bin","ab")
for i in range(len(data)//4):
    out[4*i:4*i+4] = data[4*i:4*i+4][::-1]
f.write(out)
f.close()

处理后再次用binwalk分析,最终能够正常解包。

三、疑问

1、已经发现2种H27U1G、MX30LF1G的芯片存在这种情况。

2、为什么会发生反转,是FLash的特性?编程器不兼容?还是CPU处理的原因?

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注