Восстановление камер Dahua

Видеонаблюдение

Для восстановления “окирпиченных” камер или живых, но с чужой прошивкой, до рабочего состояния необходим дамп. Дальше есть два варианта. Если камера не совсем “кирпич”, а её загрузчик жив и в него можно попасть, то можно залить дамп средствами загрузчика. Если же всё плохо и никаких признаков жизни камера не подаёт, то спасёт только программатор.

Для процессоров HiSilicon есть ещё один вариант – прошивка утилитой HiTool через UART. Но для этого процессор надо ввести в аварийный режим, а это операция нетривиальная. Про работу с HiTool тоже планирую написать статейку, а пока можно задавать вопросы на эту тему в группах проекта OpenIPC. Там обитают ребята, которые мне эту тему подсказали и разбираются в вопросе гораздо лучше.

Статью пишу по памяти, поскольку непосредственно занимался этими вещами некоторое время назад. Могу что-то упустить, поэтому аккуратнее, особенно с бутом.
Как только в руки снова попадёт подобный зверёк, дополню статью и уберу этот транспарант, а пока прошу относиться к изложенной информации с некоторой степенью недоверия 🙂

Инструменты

Материалы

  • Дамп (в идеале) или прошивка

Софт

Подготовка

В деле восстановления IP-камер самое главное – это бутлоадер, он же бут, он же загрузчик. Если получается залить во флеш правильный бут, то это 99% успеха. Дальше всё штатно.

Если есть нужный дамп, то тоже всё просто. Берём программатор и заливаем дамп. Дальше правим уникальные параметры в буте и всё работает.

Дамп просто так не достать, но прошивка чаще всего находится в общем доступе и, в случае с камерами Dahua, этого может быть достаточно, хотя бывают и исключения.

Прошивка чаще всего выкладывается в заархивированном виде. Качаем и распаковываем, чтобы получить доступ к бинарнику. Далее, уже этот бинарник, распаковываем архиватором 7Zip. Он ругнётся, но это не страшно. Заходим в папку с распакованным содержимым и ищем там два файла: dhboot.bin и dhboot-min.bin. Если есть они оба, то всё прекрасно.

Например, берём прошивку камеры DH-IPC-K42AP, распаковываем и видим, что в ней оба этих файла есть. Уже хорошо.

Восстановление камер Dahua

Открываем файлы в шестнадцатеричном редакторе, например HxD и смотрим. Первые 64 байта – это заголовок. Он содержит служебную информацию и, в том числе, адрес, по которому следует прошивать содержимое. Поэтому, первым делом, нужно это заголовок отрезать, а затем залить то, что осталось по указанному адресу.

Для dhboot-min адрес прошивки: 0x00000000, а для dhboot 0x00340000.

Удаляем заголовок и сохраняем файлы, получая готовые для прошивки бинарники.

Резервная копия

Перед тем, как шить, нужно позаботиться о возвращении к исходному состоянию, поэтому полезно сделать резервную копию, то бишь – снять дамп. Подробнее о том, как снять дамп и залить его обратно рассказано в статье Работа с памятью в загрузчике.

Если дамп с этой камеры или камеры аналогичной модели уже есть или есть уверенность, что восстановление не понадобится, то можно и пропустить этот важный шаг.

Прошивка

Прошивка через UART

Собственно, в вышеобозначенной статье Работа с памятью в загрузчике есть инфа и об этом. В даном случае надо прошить два бинарника по определённым адресам адресам. Какие конкретно команды использовать – зависит от типа памяти – NOR или NAND.

Прошивка программатором

Лично для меня прошивка программатором – это крайняя мера, когда по-другому никак не получается. Причина в том, что это требует выпаивания чипа памяти, а это не очень умею. Иногда, можно и без выпаивания, но надо цеплять прищепку или зажимы, а это тонкая операция.

Если без программатора никак, то берём CH341A, цепляем зажимы, запускаем AsProgrammer и шьём дамп, если он есть. Если нет, то надо подготовить дамп, собрав его из двух частей загрузчика в редакторе.

Изменение параметров

После прошивки дампа или загрузчика тем или иным способом надо подкорректировать значения переменных. В первую очередь HWID – это идентификатор конкретной модели камеры, BSN – серийный номер и ethaddr – MAC-адрес.

Оцените статью
( 1 оценка, среднее 5 из 5 )
МихаТроник
Добавить комментарий

  1. Александр

    программатор есть и паять совсем не проблема, а вот найти дамп и собрать это для меня сложнее. HDW1230SP-0360B не могу найти. Мб они совместимые какие с другими моделями?

    Ответить
    1. mixatronik автор

      Уже всё есть и статья пишется. Ничего паять не надо – всё через UART. Осталось только перепроверить.
      З.Ы. Ксттаи, можешь побыть бета-тестером. Скину все материалы и мануал. Если всё получится, значит статью можно публиковать 🙂 И так на 90% уверен, что метод рабочий, т.к. рождён совместными усилиями с камрадом @ABATAPA, но перепроверить не помешает.

      Ответить
  2. Дмитрий

    Добрый день, возможно как то описать процесс сборки дампа под загрузку программатором?! Уж очень поверхностно описан процесс в статье. Есть камера Dahua от “ростелекома” на амбреловском процессоре с Amboot загрузчиком, но в загрузчике не поднята Eth порт, по этому загрузить родную прошивку по Tftp возможности нет, как поднять порт, я не разобрался.

    Ответить
    1. Дмитрий

      Вопрос снят с повестки, все с бинарными фалами понятно, но нужно было немного углубиться в тему.

      Ответить
      1. mixatronik автор

        Да, в нашем деле без самообразования – никак! 🙂

        Ответить
    2. mixatronik автор

      Добрый! Дамп слепить можно, размещая бинарники по адресам из заголовков, но проще поднять ethernet.

      Ответить
      1. Дмитрий

        Пока с поднятием Eth порта проблема. Камера Dahua HFW2231TP-VFS, достаточно интересная в плане характеристик, но телеком со своим потоком на сервер в 2 Mb, режет в трое качество картинки… Да и 400 рэ за юнит, не кисло получается, все это вынудило двинуться в направлении отвязки. На момент ситуация такая, есть доступ к загрузчику “Amboot”, но нет доступа к ядру, нет возможности получить root права, так же не нашел способа поднять eth порт в загрузчике.
        Log:
        amboot> help
        The following commands are supported:
        r32 w32 boot erase
        help reboot setenv show
        memtest fs fdt nand
        usbdl gpio tftp ping
        sd
        Use ‘help’ to get help on a specific command
        Может у вас был опыт работы с данным загрузчиком?

        Ответить
        1. mixatronik автор

          Не встречал такого. А printenv что-то выдаёт? Насчёт ethernet, обычно нужно подобрать правильную комбинацию phyaddru и phyaddrd. Значения меняются от 0 до 3. Нужно пробовать разные комбинации, например: setenv phyaddru 0;setenv phyaddrd 0 и т.д.

          Ответить
          1. Дмитрий

            К сожалению команда printenv в загрузчике отсутствует, так же как и параметр “phy” команды setenv.
            log:
            Help for ‘setenv’:
            setenv [param] [val]
            sn – Serial number
            auto_boot – Automatic boot
            boot_opt – boot option for bios
            bootcmd – boot command for bios
            splash_id – splash logo id
            [eth|wifi|usb] [0|1] [mac|ip|mask|gw]
            – [device] [instances] [mac addr|IP addr|network mask|gateway]
            auto_dl – Automatically try to boot over network
            tftpd – TFTP server address
            pri_addr – RTOS download address
            pri_file – RTOS file name
            pri_comp – RTOS compressed?
            rmd_addr – Ramdisk download address
            rmd_file – Ramdisk file name
            rmd_comp – Ramdisk compressed?
            dsp_addr – DSP download address
            dsp_file – DSP file name
            dsp_comp – DSP compressed?
            amboot> show netboot
            eth0_mac: 00:00:1b:01:3e:7e
            eth0_ip: 192.168.1.64
            eth0_mask: 255.255.255.0
            eth0_gw: 192.168.1.10
            eth1_mac: 00:00:00:00:00:00
            eth1_ip: 0.0.0.0
            eth1_mask: 0.0.0.0
            eth1_gw: 0.0.0.0
            auto_dl: 0
            tftpd: 192.168.1.10
            pri_addr: 0x00000000
            pri_file:
            pri_comp: 0
            rmd_addr: 0x00000000
            rmd_file:
            rmd_comp: 0
            dsp_addr: 0x00000000
            dsp_file:
            dsp_comp: 0

          2. mixatronik автор

            Интересно… Ну setenv есть – установить переменные можно, значит должно быть можно и посмотреть их. Наверное есть параметр в команде show – что-то типа show env или типа того, по аналогии с show netboot.

          3. Дмитрий

            Все что есть в show:
            show ptb – flash partition table
            show poc – power on config
            show netboot – netboot parameters
            show wifi – show wifi infomations
            show usb_eth – show usb ethernet infomations
            Display various system properties

          4. mixatronik автор

            Мда… Тут, к сожалению, ничем помочь не могу – опыта нет. Сам в таких случаях ищу оригинал и изучаю, как с него снять дамп и перенести на пациента.

          5. Дмитрий

            Получается либо лить собранный загрузчик из оригинальной прошивки, либо искать рабочий полный аналог, снимать с него дамп и уже лить его, благо флешка NOR. Спасибо за помощь!

          6. mixatronik автор

            Да, подход такой. В ряде случаев ещё можно использовать загрузчик OpenIPC, но для Амбареллы его пока нет.
            Пожалуйста! Хотя по факту ничем и не помог 🙂 А ConfigTool-ом, она кстати не видится?
            З.Ы. Можно попробовать запросить прошивку и/или дамп на dahuacctv.com

          7. Дмитрий

            Нет, к сожалению специфические сканеры, подобные ConfigTool её не видят, видит Ростелекомовский софт, но она запаролена, пароль подобрать не удалось.

          8. mixatronik автор

            Понятно.

  3. Виктор

    Здравствуйте,спасибо за полезные статьи
    У меня IP камера Dahua DH-IPC-HFW1230S1-S5
    Конфигтул камеру видит,но на вебстраницу не заходит
    В программе NCOM в логе загрузки есть ошибки хочу попробовать прошить
    думаю слетела прошивка,но не могу найти прошивку,если можете помочь с поиском прошивки,помогите пожалуйста.Заранее благодарю.

    Ответить
    1. mixatronik автор

      На сайте прошивки нет. Надо запрашивать по почте cis_support@dahuatech.com у поддержки по серийнику. Обычно проблем с этим не возникает. Но вряд ли дело в этом. Если ConfigTool видит, значит камера загрузилась и либо в ней какая-то неродная прошивка, либо у неё просто нет веб-интерфейса в принципе и работать с ней положено через приложения.

      Ответить
  4. Виктор

    System startup 123
    Please add verify function!
    allowed version 00000101, major=1, minor=1
    device support otp.
    Otp version is 0x00000000, Flash version is 0x00000101
    UBOOT_commonSwRsaVerify run successfully!

    System startup 123

    OsAppInit
    random dev init …
    Mount procfs finished.
    Spi Nor ID:0x1C 0x70 0x18 0x1C 0x70 0x18 0x1C 0x70
    Spi Nor Flash Info:
    Name:”EN25QH128A” Size:16MB Block:64KB
    jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00130000: 0x6553 instead
    Further such events for this erase block will not be printed1
    jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00c50000: 0x6553 instead
    Further such events for this erase block will not be printed1
    jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00f10000: 0x6553 instead
    Further such events for this erase block will not be printed1
    add partition[9] failed, ret = -22!
    bsp_eth: User set phy mode=rmii
    bsp_eth: User did not set phy addr, auto scan…
    FEPHY: addr=0 ld_am=0xa, ldo_am=0x4, r_tuning=0x28 DONE.
    Detected phy addr 0
    ==== online_flag=0, cmos_yuv_flag=1, sensor=imx307, chip=gk7205v200, board=sck== ==
    ==== g_quick_start_flag=0 ====
    sysconfig init success!
    mmz_start2=0x42300000, mmz_size=0x1cfc000
    dgsStart=0x43ffc000, gMemRelimitAddr=0x43ffe000
    mmz param= buf0,0,0×42300000,4700K:buf1,0,0×42797000,1152K:buf2,0,0x428b7000,520 K:anonymous,0,0×42939000,23308K
    spi bus init …
    i2c bus init …
    [ERR] Fail to register /dev/i2c-0 driver!!!
    SDK_init
    [00:00:01.827 info PRC 3 prc.c:145] PRC Driver SVN NUM: 42710 Build on Dec 20 20 22 at 14:38:06.
    PRC_initMod
    [00:00:01.837 info pdc 3 pdc_hwid.c:1162] hwidInit ReInit,return osa_sok .
    [00:00:01.845 info PRC 3 prc_spi.c:3040]SPI2 BusInit OK.
    [00:00:01.851 info pdc 3 pdc_reboot.c:241]Reboot system counter 1!
    [00:00:02.860 error PRC 3 prc_rtc.c:507]check state error!
    [00:00:02.861 error pdc 3 pdc_socrtc.c:124]PRC_rtcGetTime error
    [00:00:02.868 error pdc 3 pdc_socrtc.c:469]SOC_readRtc Fail
    [00:00:02.874 error osa_kernel 3 osak_irq.c:212]NULL handle
    [00:00:02.881 error osa_kernel 3 osak_irq.c:239]NULL handle
    [00:00:02.887 warn pdc 3 pdc_rtc.c:994]OpCheck Rtc failed!
    [00:00:02.893 info pdc 3 pdc_ledEx.c:309]LED_setStateEx LED_SET_GPIO!
    PDC_drvInit
    CFG_AVS_InfoInit
    [00:00:02.903 info Sensor-Kernel 3 senDrvMain.c:64]Sensor Build on Dec 20 2022 a t 14:38:17.
    [00:00:02.918 info Sensor-Kernel 3 senDrvClkGk7205v20000.c:178]SrcClk=27000000, PixClk=74250000 regVal=19.
    [00:00:02.933 info Sensor-Kernel 3 senDrvSenSc2239.c:399]Set formatId=0x200.
    [00:00:03.030 info Sensor-Kernel 3 senDrvSenSc2239.c:336]Standby mode.
    [00:00:03.033 info Sensor-Kernel 3 senDrvSenSc2239.c:468]src clk:27000000 pixclk :74250000
    [00:00:03.053 info Sensor-Kernel 3 senDrvSenSc2239.c:341]Stream mode.
    [00:00:03.060 info Sensor-Kernel 3 senDrvSenSc2239.c:493]format set to id:0x200
    [00:00:03.063 info Sensor-Kernel 3 senDrvSenSc2239.c:761]Succeed to init sensor with format=0x200.
    SENK_init
    PDI_preInit
    zzip_Loadso_Init
    (config_init|586) SVN:42710 Build data:Dec 20 2022 Time:14:38:39
    sensorId:205
    product_name=IPC-HFW12XX-InfraRed
    config_init_pd flag:ff
    config_init
    upgrade_process_clearparam
    dh_keyboard=1

    Ответить
    1. mixatronik автор

      Лучше бы вывод printenv.

      Ответить