Сетевой регистратор HIKVISION DS-7108N-SN говорит по-английски!


Добрый день, уважаемые!

Сегодня я расскажу, как у китайской версии сетевого видеорегистратора (NVR) модель HikVision DS-7108N-SNпеределать язык оболочки на английский.

Этот регистратор я приобрел на аукционе ТаоБао по достаточно демократичной цене. После подключения оказалось, что Web-интерфейс доступен на английском языке, однако оболочка представлена только на китайском и нигде нет возможности выбора языка.

Поиск прошивок в интернете не дал никаких результатов.
Поэтому я решил попробовать сделать все самостоятельно. Все прошло успешно, а процедурой «декитаезации» я с удовольствием поделюсь с вами!

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

Итак, версия моей прошивки с завода: V3.0.7 build 140725
Версия регистратора: HikVision DS-7108N-SN

Вам потребуется:
  • Машина с любой ОС Linux;
  • Установленный на ней TFTP Сервер (я использовал tftpd-hpa);
и собственно все.

1. Заходим в Web-интерфейс регистратора и в меню «Network-settings – Advanced» включаем доступ по Telnet.


2. Заходим через Telnet на регистратор. Имя пользователя root (не admin), пароль по-умолчанию «12345».



3. В домашней папке /home вы увидите appи hik. Как видно на скриншоте ниже, hik примонтирован к mtdblock1, а apptmpfs в ОЗУ.



4. Зайдите в /home/hik. Нас тут интересуют два файла — это загрузочный скрипт (start.sh) и архив app.tar.lzma, сжатый lzma, где хранятся текстуры кнопок и конфигурационный файл с языками.


5. На самом регистраторе нет нужных утилит для редактирования, поэтому проще всего перекинуть файлы через TFTP на «большой» компьютер.
tftp -p -l start.sh YOUR-TFTP-SERVER

tftp -p -l app.tar.lzma YOUR-TFTP-SERVER

6. На компьютере открываем скрипт start.shи добавляем в начало строчку для запуска демона Telnet. Это необходимо для случая, если после наших манипуляций оболочка регистратора не загрузится, то мы все равно будем иметь доступ через Telnet. 

Добавляем
[ -e /usr/sbin/telnetd ] && /usr/sbin/telnetd 32

7. Распакуйте архив app.tar.lzma


8. В папке configвы увидите файл конфигурации 1024x768.cfg
Полистайте файл, обратите внимание, что в нем, помимо китайского, уже присутствует английский язык.


Как видите в строчках, заканчивающихся на _cap0 хранится английская версия, а в строчке _cap1китайская.
Не мудрствуя лукаво, чтобы не искать, где же задается текущий язык, я решил просто закопировать английскую строку на китайскую.

Подобных строк там тысячи, поэтому вручную изменять их было бы глупо, а я не сумасшедший, поэтому воспользуемся AWK.
awk '{ if ( /_cap0=/ ) {print $0; gsub("_cap0=", "_cap1="); print $0} else { if (! /_cap1=/ ) print $0 } }' 1024x768.cfg >> test.cfg

Логика проста: производится поиск строк и...
Если строка содержит cap0, то она дублируется с подменой cap0 на cap1
Если строка содержит cap1, то эта строка удаляется из файла
Все остальные строки остаются без изменений.

Собственно все. Теперь надо запаковать все в архив и закинуть обратно на регистратор.

Обратите внимание, что для сжатия используется первая версия LZMA 1.

Да, еще хочу заметить, как безобразно заданы права и владельцы у файлов регистратора. Практически у всех файлов доступ 777! Я пока не стал экспериментировать что, да как, поэтому просто задал такие же права у файлов.

В корне распакованного app.tar.lzmaвыполняем
find . | sudo xargs chmod 777
find . | sudo xargs chown nobody:nogroup

Создаем архив tar:
tar -cpvf ~/app.tar `ls`
Тоже меняем права и владельца:
chmod 777 ~/app.tar
chown nobody:nogroup ~/app.tar
Сжимаем архив lzma
lzma -6 < ~/app.tar > ~/app.tar.lzma
 или так
lzma --lzma1 -z -c ~/app.tar >> ~/app.tar.lzma
8. Снова заходим через Telnet на регистратор и закидываем файлы обратно

Места на разделе mtdblock1 мало, поэтому будем писать в память:
cd /home/app/
mkdir test
cd test

tftp -g -r app.tar.lzma YOUR_TFTP_SERVER

Далее, проверим на всякий случай, что архив будет распаковываться:
/bin/tar xaf /home/app/test/app.tar.lzma -C /home/app/test
Если все успешно, подменяем файл:
rm /home/hik/app.tar.lzma
mv /home/app/test/app.tar.lzma /home/hik
chmod 777 /home/hik/app.tar.lzma
 Думаю, что менять права на 777 не требуется, но так было с завода, поэтому делаем так же.


Не забываем заменить скрипт start.sh. Думаю, вы это сделаете самостоятельно.


Все, перезагружаем регистратор. Радуемся английскому языку!


Спасибо за внимание!