В связи с блокировкой порталов инфомиром ( с этим столкнулись пользователи не только нашего сервиса ) возникла необходимость вот в такой теме. В аплоуд мы загрузили патченные прошивки для приставок 250/254/256/322/326, в которых заблокировано автообновление и обращение на сервера инфомира для получения данных о заблокированных порталах. Авторами пачта мы не являемся, подробнее можно почитать по ссылке.
После этой процедуры вы должны быть в BIOS приставки.
5) Выберите «Инструменты обновления» (Upgrade Tools), нажмите ОК или стрелку вправо.
6) Выберите «Загрузка с флешки» или «USB Bootstrap»
После успешной прошивки приставка перезагрузится автоматически и загрузится уже с новой прошивкой.
Обратите внимание, что в некоторых случаях возможна ситуация когда приставка не «увидит» прошивку на флешке при перепрошивке. Самый простой вариант в таком случае — попробовать описанные пункты с другой флешкой.
ВНИМАНИЕ! Прошивать приставки мы никого не принуждаем, делать это или нет решает сам пользователь.
- Обновление по протоколу HTTP (WEB)
- Меню ‘Системные настройки’ во встроенном портале
- Обновление с использованием USB-накопителя
- Обновление из меню Начального загрузчика
- Возможные проблемы при обновлении ПО с использованием USB-накопителя
- Обновление методом Multicast-вещания
- Подготовка
- Адреса мультикаст-потоков в утилите Mcast
- Loading image from multicast
- Пример обновления в режиме Multicast
- Возможные проблемы при обновлении методом Multicast-вещания
- Конфигурация Порта
- MAG2xx (на основе чипсета STMicroelectronics)
- MAG-3xx (на базе чипсетов Broadcom)
- MAG-4xx (на базе чипсетов Hisilicon)
- Смена пароля для сборки образа
- Отключение SSH-доступа
- Включение SSH-доступа
- Software releases MAG250/254/270
- Update from Embedded portal by HTTP
- Update with USB drive
- Possible problems when updating software using USB-drive
- Update from Bootloader using Multicast
- Preparation
- Multicasting from PC with
- Start multicast upgrade on STB
- Pdate example
- Possible problems during updating using Multicast
- Autoupdate setting
- Прошивка MAG-250 через USB.
- Прошивка MAG-250 через мультикаст.
- Функция GetUID()
- Stevt_ioctl
- Ядро
- Правка U-Boot
- Полный анализ
Обновление по протоколу HTTP (WEB)
Пример. «Настройки» во встроенном портале.
Меню ‘Системные настройки’ во встроенном портале
Обновление проводится следующим образом:
Пример. Обновление ПО из меню «Системные настройки» во встроенном портале
Обновление с использованием USB-накопителя
Обновление из Системных настроек встроенного портала позволяет обновить основное ПО STB на заводскую2 версию ПО.
На компьютере (подготовка USB-накопителя):
Обновление из меню Начального загрузчика
Данный вид обновления позволяет обновить основное ПО STB только на публичную1 версию ПО.
Видео-пример обновления из меню Начального загрузчика с USB-накопителя
Your browser does not support the HTML5 video element
Возможные проблемы при обновлении ПО с использованием USB-накопителя
1. Приставка не начинает обновление или не обнаруживает папку или файлы обновления на USB-накопителе – не инициализируется USB-накопитель (ошибка типа «Internal error»):
2. При обновлении из меню Начального загрузчика приставка запустила файл bootstrap, но не начинает загрузку файла imageupdate или загрузка не закончилась успешно:
- Проверьте правильность наименования файла imageupdate. Возможно, необходимо заменить файл imageupdate. Проверьте источник, откуда загружался файл и, при необходимости, загрузите файл заново, замените файл и повторите попытку обновления.Возможно, проблемы с USB-накопителем – см. п.1.
- Возможно, проблемы с USB-накопителем – см. п.1.
3. При обновлении из встроенного портала, через USB, приставка после запуска обновления прекращает процесс обновления со статусом: «Неправильная сигнатура»:
Обновление методом Multicast-вещания
Обновление методом Multicast-вещания выполняется меню Начального загрузчика. Данный метод может использовать только для установки публичной1 версии ПО необходимой модели STB, расположенной в релизе ПО или подготавливаемой пользователем самостоятельно по инструкциям производителя STB. В качестве утилиты для вещания файлов обновления в локальной сети может использоваться:
Требования к ОС:Любая версия OS Microsoft Windows с поддержкой .NET Framework. версии 2.0 и выше.
Подготовка
Мультикаст-обновление занимает не более 15 минут. Успешное обновление сопровождается Если обновление не завершается (из-за установки ошибочных параметров, сетевых помех и т.п.), STB не выходит из режима Для выхода необходимо произвести перезагрузку (вкл/выкл) STB.
Адреса мультикаст-потоков в утилите Mcast
Выбор адреса для группового вещания потоков Bootstrap и imageupdate в утилите Mcast зависит от модели STB. Для использования правильного значения адреса группового вещания в утилите Mcast необходимо:
Loading image from multicast
2. Значение из п.1 должно совпадать с значением, вводимым IP-address, port Mcast для потока №1 (Bootstrap). Например, для STB MAG254 используется значение: 224.50.0.100:9000.3. В поле IP-address, port для потока №2 (imageupdate) должно быть значение, указанное в таблице ниже, в колонке Адрес потока imageupdate:
Пример обновления в режиме Multicast
Ниже приведен пример обновления в режиме Multicast для STB MAG250.
Пример обновления с использованием утилиты MCAST
Возможные проблемы при обновлении методом Multicast-вещания
Автоматическое обновление ПО состоит из двух этапов:
Настройка режима автообновления проводится в разделе «Настройки / Обновление ПО» встроенного портала:
1) Версии ПО, подписанные общедоступным ключом ()
2) Версии ПО, устанавливаемые в приставку на заводе-изготовителе, а также версии ПО, предоставляемые производителем для обновления/автоматического обновления с серверов завода-изготовителя
Параметры по умолчанию для SSH-соединения, которые используются в Публичных версиях ПО и старых версиях ПО
Внимание!!! Начиная с версии 0.2.14-r8 были внесены изменения в систему безопасности.
Доступ по SSH закрыт — в заводских версиях ПО (версии ПО, предоставляемые Производителем для автообновления и ручного обновления из меню Встроенного портала).Доступ по SSH открыт для стандартного TCP-порта — в публичных версиях ПО, предоставляемых Производителем в Релизах на http://soft.infomir.com.
Для версий ПО, создаваемых операторами, предусмотрена возможность
Конфигурация Порта
Стандартное значение TCP-порта для SSH-доступа (22) может быть изменено в работающем STB (выполняется для каждой STB отдельно) или может быть изменено для целой версии ПО, при создании образа.
MAG2xx (на основе чипсета STMicroelectronics)
Пример для MAG-2xx. Изменение порта для доступа по SHH. Новое значение: 2222. Приведено содержимое файла /etc/openssh/sshd_config.
# vi etc/openssh/sshd_config# $OpenBSD: sshd_config,v 1.87 2012/07/10 02:19:15 djm Exp $
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with# OpenSSH is to specify options with their default value where# possible, but leave them commented. Uncommented options override the# default value.
#Port 2222#AddressFamily any#ListenAddress 0.0.0.0#ListenAddress ::
# The default requires explicit activation of protocol 1#Protocol 2
# HostKey for protocol version 1#HostKey /etc/openssh/ssh_host_key# HostKeys for protocol version 2#HostKey /etc/openssh/ssh_host_rsa_key#HostKey /etc/openssh/ssh_host_dsa_key#HostKey /etc/openssh/ssh_host_ecdsa_key
# Lifetime and size of ephemeral version 1 server key#KeyRegenerationInterval 1h#ServerKeyBits 1024
# Logging# obsoletes QuietMode and FascistLogging#SyslogFacility AUTH#LogLevel INFO
#LoginGraceTime 2m#PermitRootLogin yes#StrictModes yes#MaxAuthTries 6#MaxSessions 10
#RSAAuthentication yes#PubkeyAuthentication yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2# but this is overridden so installations will only check .ssh/authorized_keysAuthorizedKeysFile .ssh/authorized_keys
# To disable tunneled clear text passwords, change to no here!#PasswordAuthentication yes
# This is a modification for the default installation of the STLinux# Distribution. You should never ship a real system in this state.PermitEmptyPasswords yes
# Change to no to disable s/key passwords#ChallengeResponseAuthentication yes
# Kerberos options#KerberosAuthentication no#KerberosOrLocalPasswd yes#KerberosTicketCleanup yes#KerberosGetAFSToken no
# GSSAPI options
MAG-3xx (на базе чипсетов Broadcom)
Пример. MAG-3xx. Изменение порта для доступа по SSH. Новое значение: 2222. Приведено содержимое файла /etc/rc.d/rcS.d/S60netsrv.
# vi /etc/rc.d/rcS.d/S60netsrv#!/bin/sh
MAG-4xx (на базе чипсетов Hisilicon)
Пример. MAG-4xx. Изменение порта для доступа по SSH. Новое значение: 2222. Приведено содержимое файла /etc/init.d/S81dropbear.
TARGET_DESC=»Dropbear (SSH daemon)»TARGET_BIN=»/sbin/ -p 2222″
Смена пароля для сборки образа
1. Зайти на приставку по SSH2. Выполнить
и изменить пароль3. Выполнить копирование содержимого следующего файла:
rootfs, который будет использоваться для последующей сборки образа, заменить содержимое одноименного файла на скопированное содержимое (из п. 3).
Отключение SSH-доступа
может быть выполнено в работающем STB отдельно для каждой STB (после этого необходимо перегрузить STB) или выполняется для всей версии ПО, в процессе создания образа.
Для отключения SSH-доступа необходимо произвести следующие изменения:
Пример. MAG322. Отключение SSH. Содержимое файла /etc/rc.d/rcS.d/S60netsrv
#portmap & #telnetd
fi # dropbear fi
Пример. MAG420. Отключение SSH. Содержимое файла /etc/init.d/S81dropbear.
TARGET_DESC=»Dropbear (SSH daemon)»# TARGET_BIN=/sbin/
Включение SSH-доступа
Для восстановления SSH-доступа на STB необходимо обновить STB на версию ПО с включенным SSH-доступом.
Для включения SSH в новой версии образа ПО необходимо восстановить исходное состояние указанных файлов-скриптов (файлы в предоставляются в Релизе).
Software releases MAG250/254/270
Software versions of STB are released to STB basic models (250, 254, 270). Last releases location:
Update from Embedded portal by HTTP
There are two options on how to update STB software from the manufacturer’s web-server (by HTTP) using the commands of Embedded portal menus:
When STB runs with the standard software image (Factory image), the software will be to the last stable version of the located on the manufacturer’s server.
Note! The string is available for editing via the virtual keyboard (brought up by KB key on RC) or USB keyboard.
Update with USB drive
STB software can be updated The required software version should be pre-downloaded and written to the USB-drive.
Updating from the System Settings menu of the E allows updating STB software to the factory imagebootstrap is not used.
On PC (preparation the USB-drive)
Note! Fbootstrap should be used. It is located in the STB release.
At PC (preparation of USB-drive)
Video example of update with USB-drive from Bootloader menu
Possible problems when updating software using USB-drive
1. The STB does not start updating or does not detect folder or update files on USB-drive — USB-drive is not initialized («Internal error» message, etc.):
2. When upgrading from Bootloader menu, STB starts bootstrap file, but does not start receiving the imageupdate file or downloading did not end successfully:
3.’Wrong signature’, ‘Unsupported architecture’ — Probably, you use inappropriate type.
Update from Bootloader using Multicast
Requirements to : Any version OS Microsoft Windows with support .NET Framework 2.0 version and higher.
Preparation
1. Download imageupdate and Bootstrap files, which will be streaming from PC to STB by multicast, similarly to described in Update from Bootloader menu subsection.2. Download, unzip, and launch MCAST-V2.0. (zip) application on PC.3. To ensure IGMP and multicast traffic , it is necessary that PC and STB are in the same broadcast domain. Otherwise, it is necessary to provide routing for multicast flows on the required network division. It is usually sufficient to use a direct cable network connection between STB and PC or they both must be connected to the same switch/router (in the last case, the STB and the PC must be connected to the switch/router with wire connection).
Multicasting from PC with
The mcast utility must multicast two streams: stream 1 — Bootstrap file, stream 2 — imageupdate file.
Start multicast upgrade on STB
Address for multicasting of Bootstrap and imageupdate streams in mcast depends on an STB model.
The multicast-update process takes no more than 15 minutes. Successful upgrade finishes by STB reboot and new software version installation. If updating does not end timely (due to improper settings, network failure, etc.), STB does not exit multicast- update by itself. To exit multicast-update you should reboot the STB.
Pdate example
The example of the mupdate for STB MAG250 is b.
Example of using MCAST utility
Select the network interface (active network interface);
for each of streams: «File name», IP-adress, port. Stream 1 — Bootstrap, Stream 2 — Imageupdate.
Compare Bootstrap address in MCAST and Boot loader: for various STB it may differ.
Run streams 1 and 2.
Video example of using MCAST utility
Possible problems during updating using Multicast
Automatic software update consists of two phases:
2. When a new version detects, STB software automatically updates.
Autoupdate setting
To set the auto-update mode:
Wait until updating is complete. Status of the software update is displayed by progress bar and comments.
Прошивка MAG-250 через USB.
1. Включаем флешку в USB-порт с тыльной стороны MAG-250.
2. Включаем приставку MAG-250, нажимаем и держим нажатой кнопку Menu на пульте управления.
3. Попадаем в BIOS тв-приставки MAG-250:
Ждем, пока ТВ-приставкаMAG-250 запишет прошивку на flash-память и перезагрузится.
4. После перезагрузки, приставка MAG-250 должна запуститься с новой прошивки.
Прошивка MAG-250 через мультикаст.
Если Вы не можете прошить ТВ-приставку MAG-250 через USB или это у Вас по какой-то причине не получается, тогда нужно пробовать прошить через Мультикаст. Для этого файлы прошивки MAG250 — Bootstrap и imageupdate — нужно поместить в одну папку. Пусть это будет папка на диске C. Туда же надо положить файл и , ссылки на которые я приводил выше.
1. Включаем ТВ-приставку MAG-250, нажимаем и держим нажатой кнопку Menu на пульте управления.
2. Попадаем в BIOS приставки MAG-250:
Выбираем раздел Upgrade Tools.
3. Подключаем компьютер к приставке с помощью сетевого LAN-кабеля. Обжим кабеля — обычный, прямой.
5. Запустите программу dualserver.exe. Для этого Вам надо запустить командную строку (Win+R и вы строке Открыть ввести cmd, нажать ОК).
6. В командной строке Windows пишем команду . Сервер должен запуститься и работать. Сворачиваем (а не закрываем) окно командной строки.
7. Запускаем программу mcast.exe двойным кликом мыши. Она попросить выбрать сетевой интерфейс, через который мы будет прошивать MAG-250:
Выбираем 192.168.1.1, Подключение по локальной сети. Нажимаем кнопку Select. Откроется следующее окно:
Тут надо сменить адрес трансляции первого потока (Stream 1) на тот, который слушает MAG-250 — . Адрес второго потока (Stream 2) менять не надо. Нажмите обе кнопки Start.
После этого приставка MAG250 начнет ловить Бутстрап по адресу мультикаст-потока:
Если все нормально, то приставка MAG-250 сначала выдаст сообщение Reception of an image is started. Если прошивка успешно скачается, Вы увидите сообщение Writing the image to flash:
Если прошивка успешно запишется в память MAG-250 — приставка выдаст сообщение Writing image to flash successfull:
После этого приставка MAG-250 должна перезагрузиться с новой прошивкой.
Время на прочтение
Я давно уже интересовался темой авторизации медиа приставок в портале Stalker, но было не до этого. Однажды ко мне случайно попала приставка MAG250 от Infomir и я решил занятся этим вопросом.
Первым делом я разобрал приставку, припаял к разьёму кабель и соединил с компом. Запустив терминал программу, меня порадовал знакомый U-Boot. Процесс загрузки можно было также прервать, нажав любую клавишу (обычно такие фишки производитель отключает и приходится тратить много времени, чтобы привести U-Boot в нужное состояние). Доступ с правами root был тоже доступен по ssh.
Приставка оборудована 256МБ DRAM и двумя флешками, NOR 1 МБ и NAND 256МБ. С NOR по-ходу грузится U-Boot, который загружает с NAND ядро и файловую систему.
Функция GetUID()
Приставка авторизирует себя в портале Stalker, посылая кучу всякои информации, такой как, например, тип, версия прошивки, версия оборудования, серийный номер и т.д. Но меня интересовал конкретно параметр device_id, который выдавала функция gSTB.GetUID(). На первый взгляд это был хэш типа SHA256 или MD5. Ссылаясь на официальную документацию soft.infomir.com/stbapi/JS/v343/gSTB.html#.GetUID, функция может принимать до двух параметров, но первым делом интересовал вариант без параметров. Загрузив stbapp в IDA, без труда находим эту функцию.
Пройдя немного дальше, видим интересный момент
Здесь программа выделяет 0x41 байт памяти, обнуляет его и вызывает функцию драйвера /dev/stapi/stevt_ioctl, передав ей этот участок памяти и параметр 0xC004C919. Стало быть, за генерацию UID отвечает некий драйвер stevt_ioctl. Чтобы проверить это, я быстро набросал такой код:
Запустив его на приставке, я увидел знакомый UID.
Stevt_ioctl
Следующим этапом будет разборка драйвера stapi_ioctl_stripped.ko, который находится в /root/modules. Загружаем драйвер в IDA и находим обработчик 0xC004C919 ioctl (я назвал эту функцию calcHash).
Здесь есть три интересных момента. Сначала копируется 0x41 байта памяти из пространства пользователя в пространство ядра (это как раз и есть то, что передаётся пользователем и в нашем случае состит из нулей), вызывается функция get_mem_type (по ходу дела в самом ядре) и результат (опять же 0x41 байт) копируется затем в адресную область пользователя. Для поиска адреса функции get_mem_type я видел две возможности: просто посмотреть файл /proc/kallsysms, надеясь что доступ не был ограничен, ну или в противном случае написать на ассемблере для самого драйвера вставку, которая в нужном месте выдаст значение регистра r0. Заглянув в /proc/kallsysms, я был приятно удивлён и нашёл адрес функции get_mem_type 0x8080E380.
Ядро
Для дальнешего анализа нужно будет анализировать ядро. Само ядро можно найти в прошивке производителя, либо снять дамп, используя U-Boot
ну или же смонтировать нужный раздел.
Исходя из информации U-Boot, ядро грузится по адресу 0x80800000, а точка входа находится в 0x80801000. Загружаем ядро в IDA и находим функцию get_mem_type.
Проанализировав код, я выявил этот участок, который предположительно возвращял UID.
Стало быть UID хранится по адресу 0х80D635EC. Далее ищём в IDA, где формируется это значение. Это было в функции init_board_extra (полный листинг я преводить не буду)
Вот стало быть то самое неизвестное значение по адресу регистра r4, из которого вычисляется интересующий хэш (fill_hash кстати вырешивал SHA256). Мне очень не терпелось узнать что же это такое и я быстренько написал вставку на ассемблере, которая через функцию printk выдавала содержимое памяти по адресу регистра r2. Модифицировав таким образом ядро я сделал новый uImage и закунул его на USB накопитель. И в терминале U-Boot задал:
usb start
fatload usb 0:1 80000000 uImage
bootm
Но после последний команды меня ждала такая печалька
U-Boot вежливо отказался грузить моё новое ядро.
Правка U-Boot
Чтобы убедить U-Boot загружать моё ядро, я решил патчить его в памяти его же командой mw. Для начала я сделал полный дамп NOR флэш, который находится по адресу 0xA0000000. Загнав дамп в IDA я выявил адрес памяти, куда U-Boot сам себя копировал. Это был 0x8FD00000. Опять же сделав дамп этога участка памяти и запустив IDA, я без труда нашёл функцию которая проверяла сигнатуру. Если всё было правильно, она возвращяла 0. Причем вызывалась она в двух разных местах.
Что конкретно делала эта фукция мне было не интересно. Ей нужно было просто возвращать 0 вот так:
mov #0x0, r0
rts
nop
Соответвующий код для U-Boot был теперь таким:
usb start
mw.l 8fd0ec08 000b200a;
mw.l 8fd0ec0c 00900009
fatload usb 0:1 80000000 uImage
bootm
Тут U-Boot с радостью загрузил моё ядро, которое выдало
Полный анализ
И так, из чего же состоял UID? Это было какой-то неизвестный номер из 8 байт, серийный номер приставки, МАС адрес, тип приставки и кусок мусора. Осталось выяснить, что это был за неизвестный номер и откуда брался мусор. Я снова вернулся к функции init_board_extra.
Неизвестный номер брался из этого участка кода:
Здесь при помощи функции __ioremap ядро получало доступ к физической памяти по адресу 0x00000000 (что являлось адресом NOR флеша), записывало 0x0F в адрес 0x00000000, затем 0x98 в адрес 0x000000AA и читало 8 байт, начиная с адреса 0x000000C2. И что же это такое? Это команды протокола CFI, с которым ядро общалось с NOR. 0x0F приводило NOR в исходное состояние, а командой 0x98 переключалов модус CFI. В этом модуле по адресу 0x000000C2 находится Security Code Area или 64-bit unique device number. Т.е. неизвестный номер-это уникальный номер NOR флеша. Ниже приведён дамп CFI идентификации.
Свой дамп можно сделать прямо в U-Boot’е, задав
mw.w a0000000 f0
mw.w a00000aa 98
md.b a1000000 100
Кусок мусора был просто обыкновенным набором символов в 32 байта, которые были вшиты в само ядро
Причём этот мусор обрабатывался перед использованием шифровальной фунцией swap_pairs, которая просто меняла положение байт
Изходя из полученой информации осмелюсь предположить, что в базе данных производителя имеется информация каждого ID NOR флэша и соответствующие серийный номер и МАС адрес.
Подобрать всё это конечно невозможно, но можно будет написать свой софт, который будет полностью эмулировать приставку.