Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Как слить дамп прошивки роутера

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

  • производитель TP-Link
  • модель TL-WR841N
  • версия v8
  • spi флешка en25f32
  • архив Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью ubootwr841n-fullflesh(dump).rar ( 3.36 МБ )
    если есть на форуме указываем ссылку на пост TP-Link TL-WR841 — Обсуждение (Пост diassxak #47655604)

Сообщение отредактировал stp101 — 19.12.21, 03:59

Сообщение отредактировал diassxak — 02.05.20, 12:34

производитель TP-Link
модель TL-WR842ND
версия v1
spi флешка W25Q64FV
WiFI пароль 77777777
прошивка Huntsman 2014-01-25 вот с этого топика Huawei E3372s и E3372h (МТС 827F, 829F, Мегафон М150-2, Билайн E3372/E3370) — Обсуждение (Пост babel82 #37852402)

Сообщение отредактировал almetv — 08.08.16, 07:27

Производитель TP-Link
Модель TL-WR940N
Версия v2
SPI флешка W25Q32FVS
:happy:

  • производитель TP-Link
  • модель TL-WR1042ND
  • версия v1.6 (подошел на 1.4)
  • флешка W25Q64FV

Как сохранить дамп с прошивки роутера?

Данная инструкция, также актуальна для всех роутеров, которые имеют доступ через telnet, но не имеют возможности подключения USB-носителей.

1. Открываем консоль роутера через telnet (в Windows XP — Пуск — Выполнить — cmd )

или с помощью программы PuTTY

3. Смотрим имеющиеся блоки

Видим примерно такое:

dev: size erasesize name
mtd0: 00010000 00001000 «boot»
mtd1: 00010000 00001000 «MAC»
mtd2: 00010000 00001000 «config»
mtd3: 00100000 00001000 «kernel»
mtd4: 002c0000 00001000 «rootfs»
mtd5: 003d0000 00001000 «Linux»
mtd6: 00400000 00001000 «ALL»

4. Создадим папку www

5. Переходим в папку www с помощью команды

6. Дальше поочередно вводим команды:

touch ../httpd.conf
killall httpd
dd if=/dev/mtd0 of=mtd0.bin
dd if=/dev/mtd1 of=mtd1.bin
dd if=/dev/mtd2 of=mtd2.bin
dd if=/dev/mtd3 of=mtd3.bin
dd if=/dev/mtd4 of=mtd4.bin
dd if=/dev/mtd5 of=mtd5.bin
dd if=/dev/mtd6 of=mtd6.bin
httpd -c ../httpd.conf

7. Заходим в административную панель роутера через браузер по адресу 192.168.0.1 (или соответствующий), и получаем ошибку 404

8. Для сохранения каждого блока, в адресной строке браузера набираем поочередно следующие запросы:

Для каждого файла откроется диалог загрузки. Нажимаем «Сохранить» и указываем путь сохранения каждому файлу.

9. Перезагружаем роутер, чтобы восстановить стандартный WEB-интерфейс.

Как слить дамп прошивки роутера

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Процедура обновления

Обновление устройств XM было рассмотрено в отдельной статье, здесь же я поделюсь дополнительными сведениями, которые могут оказаться полезными при восстановлении, когда что-то пошло не так (отключили свет в процессе обновления, была залита несовместимая прошивка или был другой сбой).

При повреждённом загрузчике мы получаем полный «кирпич», описываемый здесь метод уже не применим, восстанавливать придётся на программаторе, в данной статье его рассматривать не будем.

Подключаем UART

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Общение с загрузчиком производится из консоли командами, которые подаются через специальный отладочный интерфейс — UART. В качестве консоли (терминала) удобнее использовать Putty (Kitty), хотя сгодится даже встроенный в Windows гипертерминал.
Чтобы иметь возможность слать команды из терминала, нам понадобится USB-UART преобразователь.
Самый распространённый — это преобразователь на базе микросхемы Prolific PL-2303HX. Для восстановления одного устройства его будет достаточно, но если вы профессионально занимаетесь ремонтом, лучше приобрести преобразователь на базе микросхемы FTDI FT232R, он более надёжный и не так подвержен помехам в линии.

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Подключив UART преобразователь, получим в системе дополнительный последовательный COM порт, номер которого нужно узнать в диспетчере устройств. Этот номер указываем в программе-терминале, а также задаём другие параметры порта: скорость 115200, чётность нет, стоп. бит 1.

Для подключения соединяем минусовой («земляной») провод устройства с общим (GND) проводом преобразователя, RX устройства соединяем с TX преобразователя, а RX, соответственно, с TX.

Включаем устройство и наблюдаем такую картинку:

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Это лог загрузки. На короткое мгновение на экране мелькнёт приглашение Press Ctrl+C to stop autoboot. Нужно поймать этот момент и нажать комбинацию клавиш Ctrl+C, после чего мы попадаем в командный интерфейс загрузчика.
Даём команду printenv , это выведет на экран переменные окружения загрузчика и сообщит нам дополнительную информацию о подопытном.

Нас пока интересуют два параметра:
ipaddr=192.168.1.10 — IP адрес устройства
serverip=192.168.1.107 — IP адрес нашего компьютера
их можно изменить командой setenv или подставить компьютеру IP адрес из serverip на время восстановления.

TFTP сервер

Поиграв с командами, вероятно, вы захотите пойти дальше и восстановить устройство.
Для этого нам понадобится ещё одна программа — TFTP сервер, я рекомендую tftpd32.

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Устанавливаете его и настраиваете согласно картинке.

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Бэкап — наше всё

Теперь подключаем нашу многострадальную камеру/регистратор сетевым кабелем к той же сети, что и компьютер с программой терминала и TFTP сервером, запускаем tftp сервер

Перед экспериментами обязательно нужно сделать резервную копию (дамп). Для этого нужно узнать размер flash памяти устройства. В этом нам поможет команда sf probe 0 .

xmtech # sf probe 0
8192 KiB hi_fmc at 0:0 is now current device

Отсюда видно, что размер флеши — 8192кб, что составляет 0x800000h в шестнадцатеричной системе. (Для флеши 16384кб это число будет 0x1000000h).

Ещё понадобится узнать адрес доступной оперативной памяти, чтобы скопировать дамп в память или загрузить туда блоки. Дайте команду printenv и посмотрите переменную bootcmd= . В самом конце всегда присутствует команда bootm и адрес памяти. В нашем случае bootm 0x82000000 (бывают также 0x42000000)

Тогда команды для резервной копии будут такими:

После чего в папке tftp сервера появится файл dump.bin, содержащий полную резервную копию.

Восстановление

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Теперь осталось немного, даём в консоли следующие команды:
run dc
run du
run dr
run dw
После чего перезагружаем командой reset .

Обычно это позволяет восстановить работоспособность в случае порчи одного из модулей. Также может понадобится стереть все настройки (см. следующий абзац)
Если файлы не грузятся с tftp сервера (в консоли циклические попытки), то скорее всего мешает брандмауэр Windows — отключите его или добавьте tftpd32 в исключения.

Сброс пароля

Из таблицы нас интересует последний раздел — mtd. Как видно из bootargs, его размер 320кб, что составляет 50000h в шестнадцатеричной системе, а начальный адрес — 0x7b0000.
Здесь хранятся настройки устройства, и, самое важное, пароли пользователей. Если его стереть, то система пересоздаст этот раздел заново с настройками по умолчанию, и, соответственно, с пустыми паролями.

даём следующие команды:
sf probe 0
sf erase 0x7b0000 0x50000
reset

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

В новых прошивках появилась защита флешки от записи, поэтому сразу после sf probe 0 нужно давать ещё команду sf lock 0 , чтобы снять защиту.

Внимательный читатель может обратить внимание, что раздел mtd последний, и для его вычисления достаточно вычесть размер mtd 0x50000 из размера флешки 0x800000, получим те же 0x7b0000. Так даже проще, если нас интересует только один раздел.

Хочу ещё раз напомнить, что это только пример, у вас будут другие цифры. Использование неправильных значений обязательно приведёт к порче устройства!

Слишком сложно!

Как снять дамп памяти через uboot и найти UART и извлечь прошивку с помощью uboot

Не каждый пользователь осилит установку и настройку tftp сервера, не говоря уж про вычисления размеров и смещений для сброса настроек, поэтому мы разработали удобную программу с дружественным интерфейсом, упрощающую действия пользователя. Программа позволяет производить четыре основных операции:
1. Создание резервной копии (дампа) устройства
2. Восстановление камеры/регистратора из созданного дампа
3. Восстановление устройства с помощью файла прошивки
4. Стирание настроек/сброс пароля
Эти возможности предоставляются бесплатно. К пользователю есть лишь одна просьба — для новых устройств по возможности сделать фото устройства и прислать их вместе со слитым дампом по одному из контактов сайта. Пожертвования автору программы приветствуются.

Дополнительные видео по ремонту на Youtube.

Linux version 2.6.26.5 embedded system on board. Device use full Image’s Kernel. File system stored on NAND Flash memory, Hynix NAND 32MiB 3,3V 8-bit.

# printenv
baudrate=115200
ethaddr=FF:FF:FF:FF:FF:FF
netmask=255.255.255.0
ipaddr=192.168.1.1
serverip=192.168.1.100
bootfile=firetux.kernel
bootcmd1=setenv bootargs ${bootargs} && nboot 0x20200000 0 ${image_addr} && bootm 0x20200000
bootcmd2=setenv bootargs ${bootargs} && tftpboot 20200000 firetux.kernel && bootm 20200000
phymode=auto
mtdids=nand0=gen_nand
unlock=yes
verify=y
update.uboot=echo Update u-boot && tftpboot 0x20000000 nandboot.flash && nand erase 0x0 0x03ffff && nand write.jffs2 0x20000000 0x0 ${filesize}
update.kernel=echo Update kernel && tftpboot 0x20000000 uImage && nand erase 0x80000 0x180000 && nand write.jffs2 20000000 0x80000 0x180000
update.romimg=echo Update RomImage && tftpboot 0x20000000 romimage.img && nand erase 0x80000 0x13e0000&& nand write.jffs2 20000000 0x80000 ${filesize}
update.halfimg=echo Update HalfImage && tftpboot 0x20000000 recovery.img && nand erase 0x1460000 0x700000&& nand write.jffs2 20000000 0x1460000 ${filesize}
eraseenv=echo Erase Environment && nand erase 0x60000 0x20000
HwModel=Hw_Model=NXPi02
bootcmd=run bootcmd1
halfImage=half_image=0
cy_boot_code_ver=1.0.1 (Oct  6 2011 - 20:04:00)
RouterMode=Router_Mode=0
stdin=serial
stdout=serial
stderr=serial
bootcmd=run bootcmd1
image_addr=0x80000
bootargs=console=ttyS1,115200n8 rootfstype=squashfs noalign half_image=0 verify=y Hw_Model=NXPi02 Router_Mode=0
ethact=ETN1
bootdelay=3

Need to backup some areas of NAND memory (NVRAM) from U-boot, connection to board via serial interface (UART), network connection is not available.
U-boot have certain options for managing nand memory:

# help nand
nand info - show available NAND devices
nand device [dev] - show or set current device
nand read - addr off|partition size
nand write - addr off|partition size
    read/write 'size' bytes starting at offset 'off'
    to/from memory address 'addr', skipping bad blocks.
nand erase [clean] [off size] - erase 'size' bytes from
    offset 'off' (entire device if not specified)
nand bad - show bad blocks
nand dump[.oob] off - dump page
nand scrub - really clean NAND erasing bad blocks (UNSAFE)
nand markbad off - mark bad block at offset (UNSAFE)
nand biterr off - make a bit error at offset (UNSAFE)

What is nand offset address for this? There was not specified partition size to dump. I need dump the whole NVRAM.

After device loading Kernel Image, it creates 11 MTD partitions:

Creating 11 MTD partitions on "gen_nand":
0x00000000-0x00060000 : "u-boot"
0x00060000-0x00080000 : "u-bootenv"
0x00080000-0x01460000 : "ROMIMAGE"
0x01460000-0x01b60000 : "HALFIMAGE"
0x00200000-0x01460000 : "LINUX_ROOTFS"
0x01b60000-0x01d60000 : "HS_FW"
0x01d60000-0x01e60000 : "FPAR"
0x01e60000-0x01ee0000 : "SNOM"
0x01ee0000-0x01f00000 : "EEPROM"
0x01f00000-0x01f80000 : "NVRAM"
0x01f80000-0x02000000 : "CA_DATA"

Is the 0x01f00000 nvram offset address? What is nvram size? Is it 0x80000?
U-boot also have command md - memory display.

=> help md
md - memory display
Usage:
md [.b, .w, .l] address [# of objects]
=>

I tried command md.b 0x01f00000 0x80000 to display nvram on terminal, but it doesn’t output anything, terminal hungs up.


# nand info

Device 0: NAND 32MiB 3,3V 8-bit, sector size 16 KiB
# nand device nand0
Device 0: NAND 32MiB 3,3V 8-bit... is now current device
# nand read 0x20000000 NVRAM

NAND read: mtdparts variable not set, see 'help mtdparts'
incorrect device type in NVRAM
'NVRAM' is not a number
# nand read 0x20000000 0x01f00000 0x00080000

NAND read: device 0 offset 0x1f00000, size 0x80000
 524288 bytes read: OK

BusyBox v1.10.2 (2015-09-06 10:58:05 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

/bin/sh: can't access tty; job control turned off
# help

Built-in commands:
-------------------
    . : [ [[ alias bg break cd chdir continue echo eval exec exit
    export false fg hash help jobs let local pwd read readonly return
    set shift source test times trap true type ulimit umask unalias
    unset wait

# ext4write LINUX_ROOTFS /NVRAM.img 0x20000000 0x00080000
/bin/sh: ext4write: not found

Оцените статью
Huawei Devices
Добавить комментарий