我正在尝试对路由器的固件进行逆向工程。该设备有一个 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
那么,这些交换和备用选项有什么用?当我尝试转储swap
或noswap
使用命令时得到相同的文件时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
所以我相信flashsize
from psi
command 与这两个参数有关。还有这里的列表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
。这些是我目前得到的。