Распаковка, редактирование и упаковка прошивок видеорегистраторов и IP камер от Xiong Mai / Хабр
Предыстория
Не так давно приобрёл на Aliexpress IP камеру (чип Hi3516 платформа 53h30L) и 16-канальный гибридный видеорегистратор (чип Hi3521 платформа MBD6508E). Оба выполнены на чипсете от HiSilicon, так что проблем с совместимостью между собой не испытывают.
Разумеется, не обошлось и без глюков. Первый, и самый главный — у камеры криво работал WiFi — нельзя было подключиться к сети, если ключ был задан в HEX виде, а также периодически возникала проблема со шлюзом по умолчанию.
Прошивка оказалась старая, ещё июньская. Раздобыл несколько свежих прошивок и попробовал. Некоторые оказались глючными, но одна заработала нормально.
Возникла другая проблема — изменился пароль по умолчанию для telnet подключения. Этого я не стерпел и стал искать способы вернуть его обратно.
Сразу предупрежу, что данный способ опробован на видеорегистраторах и камерах на чипах HiSilicon, но должен сработать и с другой платформой, так как китайцы широко используют загрузчик U-boot.
Распаковка
Инструкция по распаковке довольно подробно расписана в этой статье, но вот процесс упаковки нигде не описан, что и побудило меня написать этот пост.
Расписываю по шагам, чтобы ничего не упустить:
Ставим Linux, я выбрал ubuntu.
Проверяем тип файла прошивки:
root@xc:~/firmware# file General_HZXM_IPC_HI3516C_53h30L_V4.02.R11.20131108_ALL.bin General_HZXM_IPC_HI3516C_53h30L_V4.02.R11.20131108_ALL.bin: Zip archive data, at least v2.0 to extract
Распаковываем:
root@xc:~/firmware# unzip General_HZXM_IPC_HI3516C_53h30L_V4.02.R11.20131108_ALL.bin Archive: General_HZXM_IPC_HI3516C_53h30L_V4.02.R11.20131108_ALL.bin inflating: Install inflating: u-boot-all.bin.img inflating: web-x.cramfs.img inflating: custom-x.cramfs.img inflating: user-x.cramfs.img inflating: romfs-x.cramfs.img inflating: logo-x. cramfs.img inflating: InstallDesc
Смотрим содержимое Install:
{ "Commands" : [ "burn custom-x.cramfs.img custom", "burn romfs-x.cramfs.img romfs", "burn user-x.cramfs.img user", "burn logo-x.cramfs.img logo", "burn web-x.cramfs.img web" ], "Devices" : [ [ "53h30L", "1.00" ] ] }
InstallDesc:
"UpgradeCommand" : [ { "Command" : "Burn", "FileName" : "u-boot-all.bin.img" }, { "Command" : "Burn", "FileName" : "custom-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "romfs-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "user-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "web-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "logo-x.cramfs.img" } ], "Hardware" : "53h30L", "Vendor" : "General" }
Слово u-boot-all наводит на мысль, что файлы img являются образами загрузчика U-boot, поэтому ставим соответствующий пакет:
root@xc:~/firmware# apt-get install u-boot-tools
Смотрим, что за файлы у нас были в архиве:
root@xc:~/firmware# file u-boot-all. bin.img u-boot-all.bin.img: u-boot legacy uImage, linux, Linux/ARM, Firmware Image (gzip), 524288 bytes, Fri Nov 8 05:15:49 2013, Load Address: 0x00000000, Entry Point: 0x00080000, Header CRC: 0x8A551AA8, Data CRC: 0x8290AD90 root@xc:~/firmware# file romfs-x.cramfs.img romfs-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 4100096 bytes, Fri Nov 8 05:16:04 2013, Load Address: 0x00080000, Entry Point: 0x00580000, Header CRC: 0xD16AC90F, Data CRC: 0x54CDD868 root@xc:~/firmware# file user-x.cramfs.img user-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 7602112 bytes, Fri Nov 8 05:16:02 2013, Load Address: 0x00580000, Entry Point: 0x00CC0000, Header CRC: 0x106C19AD, Data CRC: 0x6D54ADA7 root@xc:~/firmware# file web-x.cramfs.img web-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 1572800 bytes, Fri Nov 8 05:15:51 2013, Load Address: 0x00CC0000, Entry Point: 0x00E40000, Header CRC: 0x87611FE5, Data CRC: 0x6BD90EBD root@xc:~/firmware# file custom-x. cramfs.img custom-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 262080 bytes, Fri Nov 8 05:15:49 2013, Load Address: 0x00E40000, Entry Point: 0x00E80000, Header CRC: 0xF7C82692, Data CRC: 0x5A27F74C root@xc:~/firmware# file logo-x.cramfs.img logo-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 262080 bytes, Fri Nov 8 05:15:47 2013, Load Address: 0x00E80000, Entry Point: 0x00EC0000, Header CRC: 0x4FE4A821, Data CRC: 0xF6671BD1
Прошу обратить внимание на два параметра Load Address и Entry Point. Я при первой сборке забыл их указать, они по умолчанию стали нулями, а это адрес загрузчика, который оказался затёрт после прошивки! Из-за этого я потратил лишний час на восстановление — пришлось снимать с улицы камеру, разбирать, и восстанавливать прошивку на программаторе. (Хотя камеру разбирал всё же не зря — добавил в кожух пакетик силикагеля, чтобы убрать возможную влагу из воздуха. )
Теперь небольшое пояснение: образ .img из данной прошивки является несколько изменённым образом файловой системы cramfs. Вот тут можно почитать поподробнее. Чтобы привести образ к нормальному виду, нужно отрезать 64 байта заголовка.
root@xc:~/firmware# dd bs=1 skip=64 if=logo-x.cramfs.img of=logo-x.cramfs 262080+0 записей получено 262080+0 записей отправлено скопировано 262080 байт (262 kB), 0,891322 c, 294 kB/c
Для остальных файлов команды аналогичные.
Смотрим, что получилось:
root@xc:~/firmware# file logo-x.cramfs logo-x.cramfs: Linux Compressed ROM File System data, little endian size 28672 version #2 sorted_dirs CRC 0xe29e6340, edition 0, 199 blocks, 2 files
Уже похоже на cramfs. Для работы с образами cramfs установим или обновим соответствующий пакет:
root@xc:~/firmware# apt-get install cramfsprogs
Распаковываем образы:
root@xc:~/firmware# cramfsck -x logo logo-x. cramfs root@xc:~/firmware# cramfsck -x user user.cramfs root@xc:~/firmware# cramfsck -x romfs romfs-x.cramfs root@xc:~/firmware# cramfsck -x web web-x.cramfs root@xc:~/firmware# cramfsck -x custom custom-x.cramfs
Каталоги я не создаю, они создадутся автоматически.
Загрузчик так не распаковать, это не образ cramfs, но его и не надо трогать.
Что внутри
Быстренько пробегусь по содержимому каждого файла внутри архива прошивки:
- InstallDesc — описывает действия, которые нужно произвести с этими файлами при обновлении прошивки, install-скрипт.
- logo-x.cramfs.img — картинка в формате 800×600 с логотипом изготовителя, которая появляется при загрузке аппарата.
- romfs-x.cramfs.img — собственно сама операционная система linux под архитектуру ARM
- u-boot-all.bin.img — загрузчик U-boot
- custom-x.cramfs.img — содержит наименование платформы и дополнительные настройки
- user-x. cramfs.img — прикладной софт, в том числе Sofia — сама программа видеорегистратора
- web-x.cramfs.img — картинки веб-интерфейса, web.cab — плагин для Internet Explorer с локализацией, логотипы производителя.
Нас интересует romfs-x.cramfs.img, так как именно там присутствует файл passwd, в котором хранится пароль. Вот его содержимое, желающие могут попробовать сбрутить:
root:$1$RYIwEiRA$d5iRRVQ5ZeRTrJwGjRy.B0:0:0:root:/:/bin/sh
Я же просто сгенерил новый хеш на сайте и поменял его в файле.
Собираем обратно
root@xc:~/firmware# mkcramfs romfs romfs-x.cramfs Directory data: 3624 bytes Everything: 4004 kilobytes Super block: 76 bytes CRC: 28c62b9b
Помните, я заострял внимание на значениях Load Address и Entry Point? Самое время о них вспомнить и добавить в команду.
Создаём образ U-boot:
root@xc:~/firmware# mkimage -A arm -O linux -T ramdisk -n "linux" -e 0x00580000 -a 0x00080000 -d romfs-x.cramfs romfs-x.cramfs.img Image Name: linux Created: Fri Feb 21 14:27:38 2014 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 4100096 Bytes = 4004.00 kB = 3.91 MB Load Address: 00080000 Entry Point: 00580000
Кстати, чтобы обновить один модуль не обязательно прошивать всю прошивку, достаточно положить только нужный, и отредактировать файлы Install и InstallDesc, оставив только нужные строчки.
root@xc:~/new# zip -D -X firmware.bin * adding: Install (deflated 22%) adding: InstallDesc (deflated 30%) adding: romfs-x.cramfs.img (deflated 0%)
Всё, прошивка готова. Осталось только прошить её через web-интерфейс через пункт update
Предостережение
Выполняя рекомендации из этой статьи, вы делаете на ваш страх и риск. Автор не несет ответственности за ваши действия. Допустив ошибку при модификации прошивки вы легко можете получить кирпич, который можно будет восстановить только на программаторе. Поэтому, если не уверены в своих действиях, не делайте этого.
Ссылки
Burn-in рутовый шелл в IP-камерах Vesta и не только
GNU/Linux и устройство на Rockchip 2918
Hacking RAM disks
Помогите разблокировать сетевой видеорегистратор Dahua с TFTP и последовательным соединением. | Страница 2
weezer311
н3вб
- # 21
Я перевернул контакты и попробовал оба варианта. Поиграюсь со скоростью. Кажется, что Windows распознает адаптер, и программное обеспечение показывает, что он подключается к COM6.
Видеорегистратор умер после попытки обновить прошивку через USB. Кажется, теперь он застрял в цикле загрузки. Он может быть полностью испорчен, но я хотел попробовать кое-что, прежде чем объявить его мертвым.
Чувак
Привыкание к делу
- # 22
А, хорошо. Если он инициализирует сетевой порт, вы также можете использовать метод TFTP, используемый здесь…. Dahua IPC EASY разблокировка / восстановление по TFTP
Так же, как и камеры (по крайней мере, моя 5216-4ks2), он пытается подключиться к TFTP-сервер по адресу 192.168.254.254 , НО вместо того же общего текстового файла с тем же именем, которое используют все IP-камеры, ищет текстовый файл на основе серийного номера NVR. Поэтому, если он инициализирует сетевой порт, и у вас запущен TFTP-сервер и ведется журнал ncat, вы должны увидеть, где он пытается подключиться и загрузить файл. Это скажет вам, как именно вам нужно назвать файл. По сути, вы должны использовать инструкции в этом другом потоке, но отредактировать commands.bat, чтобы изменить upgrade_info_7db780a713a4.txt на любое точное имя файла, которое ищет NVR. Конечно, это с учетом того, что загрузчика все еще достаточно, чтобы хотя бы инициализировать сетевой порт. Это происходит очень рано в процессе загрузки, и ему требуется всего несколько секунд, чтобы попытаться получить этот файл. Затем разъем снова отключается до тех пор, пока основное операционное программное обеспечение не загрузится и не инициализируется.
Лодеон1337
н3вб
- # 23
Здравствуйте, я сломал свой NVR5216 и пытаюсь восстановить его.
К сожалению, я не понимаю смысла command.bat. Это создает соответствующий файл (MySerialNumber-DH5416-K4S2.txt), который ищет NVR.
Пока все хорошо, но откуда взять содержимое Commands.txt?
Файл pd-x.squashfs.img, указанный в commant.txt, также не существует в прошивке моего видеорегистратора.
Я так понимаю:
NVR ищет соответствующий TXT файл, содержащий команды для рекавери.
Но почему не выполняются команды в MySerialNumber-DH5416-K4S2.txt и какие они?
Буду очень рад, если кто-то сможет помочь. Привет и спасибо Михаил
Последнее редактирование:
джрамк
н3вб
- # 24
После автоматического обновления DHI-NVR5216-16P-4KS2E так и не запустился, просто продолжайте перезагружаться. Я успешно подключился через COM-порт. и успешно отправить файл обновления по tftp, но после установки я получаю эту ошибку
выполнено
байт передано = 49908159 (2f989bf hex)
boottype=1:
dh_wdt_stop вызывается
flash_do_flwrite,723,ret:-42,flash_sn:1
Bad Magic Number
flwrite error!
dh_wdt_start вызвал
ошибку безопасной записи!
do_flwrite_secure не удалось
hisilico▒▒Нажмите, чтобы развернуть…
говядина
Тяну свой вес
- # 25
DH-NVR4208-8P-HDS2
如何恢復TFTP或備份
джрамк
н3вб
- # 26
как насчет nvr4104HS-4P-4KS2
нет последовательного порта rsr232 на серверной части.
фарамирали25
н3вб
- # 27
Привет,
Я новичок на этом форуме, надеюсь, кто-нибудь здесь сможет мне помочь.
У меня есть сетевой видеорегистратор Lorex lorex n882a3b-z. Я пытаюсь изменить прошивку dahua nvr
Я подключился через последовательный порт, чтобы снова попытаться прошить его прошивкой.
Но я не могу остановить автоматическую загрузку U-Boot. Это показать мне.
Но я нажимаю клавишу, а он не отвечает.
hossein_aghaie
н3вб
- # 28
, который не загружается после обновления
когда я подключаюсь к последовательному терминалу, он отображает:
U-Boot 2016.07-svn5384 (21 июня 2021 — 09:47:58 +0800), Сборка: jenkins-GSP_Dh4.RD
003604_X3_linux-336
Процессор: Novatek NT @ 1200 МГц
Сторожевой таймер включен
DRAM: 1 ГиБ
NAND: id = 0x spin 0v7 09t 0x01 0x21 0x21 битовый режим @ 80000000 Гц
128 МБ
MMC: NA51068_SDC: 0
Имя микропрограммы: FW98323A. bin FW98323T.bin FW98323A.fdt.bin
nvt_detect_fw_tbin Загрузка с флэш-памяти или emmc
Ошибка открытия SD: нет устройства SD?
DTS найти тактовую частоту процессора 1400 МГц
Чтение регулировки мощности = 0x0000000d
cpu 1400 remap_data 14
Установка CPU clk 1400MHz
Чтение регулировки мощности = 0x0000000d
ddr 2128 remap_data 300070 Chang to Embe Phy
Net: NA51068_eth_initialize 1.0.2.0
NA51068_eth_initialize: dtb node /eth0@fcc00000 Нашел
eQos_initialize 0xfcc00000
ETH_PARSE_PHY_INTF: GET IO 0x 0x.000070.0070 LED1 PINMUX 0x100046
ETH_PARSE_PHY_INTF: PHY_CLK: 1 Ref-Clk-Out 0
ETH_PARSE_PHY_INTF: PINMUX DETECT EMBY 0X100
NA51068_ETH_INITIALIZE (1938) NODEOFFSET <0
NA51068_ETH_INITIALIZE (1938) ETHOFFSET <0
NA51068_ETH_INITIALIZE (1938).0070 …. сделано
Ошибка -3 при распаковке!
1faacdd8(26879)->1faf0f68
Ошибка распаковки gzip с кодом ошибки 0
read_block: не удалось прочитать блок @0xffffffff
acor1await
что делать?
Как отредактировать прошивку видеорегистратора Mini 0805 и задать пользовательский битрейт видео
Видеорегистратор Mini 0805 основан на процессоре Ambarella A7, и есть инструмент для простого изменения прошивки и установки пользовательских настроек битрейта. Таким образом, вы можете изменить его в соответствии с вашими потребностями.
Редактировать битрейт можно с помощью инструмента редактирования битрейта, который называется кроссплатформенным редактором прошивки Ambarella. После открытия файла прошивки вы увидите таблицу битрейтов.
Колонки:
- Битрейт – средний битрейт записи
- Range[min] — минимальный битрейт
- Range[max] — максимальный битрейт .
- Тип — «3» означает переменный битрейт. Это означает, что битрейт записи варьируется между минимальными и максимальными настройками в зависимости от сложности кадров и поддерживает выбранный средний битрейт. Это значение по умолчанию, потому что оно позволяет уменьшить размер файла и, главное, хорошего качества.
«1» — постоянный битрейт. Битрейт записи постоянный. Эта опция может быть полезна, если вы считаете, что Ambarella не оптимально выбирает текущее значение битрейта для переменного битрейта.
Эта таблица битрейта содержит 159 строк, но не все из них эффективны. Поигравшись с таблицей битрейта и программой просмотра битрейта, я связал номера строк с фактическими настройками качества разрешения из меню 0805. Цифры из таблицы представляют собой номера строк из таблицы битрейтов.
Разрешение | Частота кадров | Сверхвысокое | Высокое | Обычное |
---|---|---|---|---|
30 | 3 | 4 | 5 | |
2304×1296 | 30 | 6 | 7 | 8 |
1920×1080 | 45 | 12 | 13 | 14 |
1920×1080 | 30 | 18 | 19 | 20 |
1920×1080 | 30, HDR | 21 | 22 | 23 |
1280×720 | 60 | 45 | 46 | 47 |
1280×720 | 30 | 48 | 49 | 50 |
These are the bitrate values I’m using now.
Я изменил значения только для разрешения 2560×1080.
Сверхвысокое качество имеет постоянную скорость 24 Мбит/с, и я использую его каждый день, потому что мои поездки обычно короткие, поэтому мне не нужно экономить место на карте micro SD.
Высокое качество унаследовано от стандартного сверхвысокого (переменная 18 Мбит/с) битрейта для разрешения 2560×1080. Обычное качество имеет переменные настройки 10 Мбит/с.
Я не говорю, что эти настройки оптимальны для камеры 0805. Это просто демонстрация возможности иметь собственный битрейт.
Надеюсь, эта информация будет вам полезна. И напоследок инструкция по обновлению камеры с пользовательскими настройками битрейта.
Основной поток редактирования битрейта:
- Для взлома нужен файл прошивки Mini 0805. Я рекомендую скачать его отсюда. В качестве альтернативы вы можете сделать резервную копию существующей прошивки.
- Скачать редактор прошивки.
- Запустите редактор и выберите, чтобы открыть файл прошивки Ambarella A7.