Recovering from identical NAND bgas,exact same bad blk count
Posted: April 22nd, 2020, 0:39
I've dumped the same (pre-programmed) NAND 4GB chip from different embedded devices (after removing them with a hot air gun) several times to obtain the firmware and filesystem. I looked up the chip specs (Toshiba/Kioxia TC58NVG2S0H BAI6), grabbed strings from the raw dump to discover how the chip is being used/drivers/mounted/MTD subsystem params/kernel params, etc after dumping the raw NAND. Binwalk discovers a number of signatures, but the files end up mostly corrupted.
The socket and programmer seem to work just fine. I also built a programmer from an FTDI2232 breakout board to try another method of reading them
Every time I dump the chip, it says there are 496 bad blocks. I used a hot air gun to remove it, removed it as fast as possible (45-60 seconds), evened out the solder so it would sit flush in the socket, all pins are detected, Binwalk is able to identify signatures from the raw dump, but the data is corrupt as all get out....and I cannot figure out why. I've tried DD slicing it in a ton of different ways to recover the bootloader/kernel/file system, but it is always corrupt. I checked to see if an overlay FS was used, and it is disabled in the kernel startup params. I've stared at hexdumps for hours, trying to see if there's something I'm missing.
I know a BCH ECC method is being used (correcting 48 bits per sector (2048 bytes), with 4096 page size and 256 OOB). I have tried just chopping off the OOB area and the data is mangled.
I cannot figure out if there is heat damage, some other ECC algo getting layered over it, or if I'm missing something entirely?
I have been unsuccessful in reversing the ECC algo, even though I located the driver source, as most of the logic is being performed on a hardware-based controller.
Any advice would be GREATLY appreciated, as I've been spinning my mental gears on this for several weeks now (and several hundred dollars worth of additional equipment).
The socket and programmer seem to work just fine. I also built a programmer from an FTDI2232 breakout board to try another method of reading them
Every time I dump the chip, it says there are 496 bad blocks. I used a hot air gun to remove it, removed it as fast as possible (45-60 seconds), evened out the solder so it would sit flush in the socket, all pins are detected, Binwalk is able to identify signatures from the raw dump, but the data is corrupt as all get out....and I cannot figure out why. I've tried DD slicing it in a ton of different ways to recover the bootloader/kernel/file system, but it is always corrupt. I checked to see if an overlay FS was used, and it is disabled in the kernel startup params. I've stared at hexdumps for hours, trying to see if there's something I'm missing.
I know a BCH ECC method is being used (correcting 48 bits per sector (2048 bytes), with 4096 page size and 256 OOB). I have tried just chopping off the OOB area and the data is mangled.
I cannot figure out if there is heat damage, some other ECC algo getting layered over it, or if I'm missing something entirely?
I have been unsuccessful in reversing the ECC algo, even though I located the driver source, as most of the logic is being performed on a hardware-based controller.
Any advice would be GREATLY appreciated, as I've been spinning my mental gears on this for several weeks now (and several hundred dollars worth of additional equipment).