自定义 nanddump 和 nandwrite 工具

逆向工程 固件 倾倒 内存转储
2021-06-25 11:49:44

我正在尝试对路由器的固件进行逆向工程。该设备有一个 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 分区,并且它不允许读取固件分区。它只写入该分区。这是nandwrite来自busybox命令。

$ 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

所以我相信flashsizefrom psicommand 与这两个参数有关。还有这里的列表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 闪存组织的更多信息,请参阅Lauterbach 的这份不错的文档