我试图对路由器的固件进行反向工程。该设备具有NAND芯片,并具有BusyBox v1.14.1的原始版本。 nanddump命令存在,但参数有趣,因为我无法在Google上找到任何信息。同样,nandwrite命令不存在,相反,他们编写了另一个名为psi的工具来写入芯片。以下是它们与原始同类产品相比的用法输出。



$ nanddump
Usage: nanddump mtdX [noswap || swap] [nospare || spare] sector_count
        sector_count can be provided as "0" which means the whole partition


那么,这些交换和备用选项有什么用?当我尝试使用swapnoswap转储时,使用命令cat /dev/mtd* > mtd*.bin时得到的文件相同。但是,使用spare参数会提供一个稍大的文件。这是我从功能完备的busybox中得到的内容

$ nanddump
BusyBox v1.21.1 (2013-07-08 10:56:01 CDT) multi-call binary.

Usage: nanddump [-o] [-b] [-s ADDR] [-f FILE] MTD_DEVICE

Dump the specified MTD device

        -o      Dump oob data
        -b      Omit bad block from the dump
        -s ADDR Start address
        -l LEN  Length
        -f FILE Dump to file ('-' for stdout)


对于其他工具,psi



$ psi
usage: psi -o <command> -t <configtype> -f <filename|env.var.name> -s <flashsize> -r <rebootflag>
supported commands: <read> <write> <erase>
supported config types: <asd> <cfg> <env> <flash> <firmware>
supported reboot flags: <yes> <no>
Note: -s parameter is for flash dump/undump only


该工具似乎可以同时读写。好吧,这很难弄清楚,因为我无法使用它来读取mtd分区,并且它也不允许读取固件分区。它仅写入该分区。这是来自busybox的nandwrite命令。



$ nandwrite
BusyBox v1.21.1 (2013-07-08 10:56:01 CDT) multi-call binary.

Usage: nandwrite [-p] [-s ADDR] MTD_DEVICE [FILE]

Write to the specified MTD device

        -p      Pad to page size
        -s ADDR Start address


所以我相信flashsize命令中的psi与这两个参数有关。
这也是mtd的列表



$ cat /proc/mtd
dev:    size   erasesize  name
mtd0: 01000000 00004000 "RootFS"
mtd1: 08000000 00020000 "FlashAll"
mtd2: 00020000 00020000 "Bootloader"
mtd3: 00220000 00020000 "BootloaderConfig"
mtd4: 00220000 00020000 "Config"
mtd5: 00220000 00020000 "ASD"
mtd6: 02200000 00020000 "Kernel"
mtd7: 02200000 00020000 "KernelBackup"
mtd8: 02e60000 00020000 "disk"
mtd9: 00220000 00020000 "edr"
mtd10: 00500000 00020000 "bbt"


自定义nanddump在读取RootFS时会引发错误。这些都是我现在所拥有的。

#1 楼

不知道交换的内容,但是备用区域或OOB区域是每页末尾用于存储元数据的附加区域,例如:


坏块标记
ECC(错误检查和纠正)代码
系统可能会使用的自定义数据

spare选项似乎启用了转储,这就是转储稍微大一些的原因。

有关NAND闪存组织的更多信息,请参阅劳特巴赫的这份不错的文档

评论


感谢您的答复。我检查了那个文件,确实是一个不错的文件。如您所说,我确认备用选项可用于芯片数据表中的额外数据。我也意识到交换更改了转储的字节序。我有一个引导加载程序转储,其中的“ cfe”用普通的写成,交换时变成“ efc”。我也能够使用psi命令转储。它以64KB数据的倍数转储。我相信那是页面大小,但是我不确定。 psi命令没有ecc选项

– ekardon
20-5-20在2:56