|
# Humax HTR-1000S/TR — реверс-инжиниринг системы обновления прошивки (SDL)
## Введение
Провожу независимое исследование системы обновления прошивки ресивера **Humax HTR-1000S/TR** (турецкая платформа Filbox, закрыта в 2019 году). После закрытия платформы множество устройств фактически превратились в "кирпичи" — оригинальная прошивка недоступна, а встроенная проверка подписи блокирует установку прошивок от других региональных версий.
Делюсь техническими находками — возможно, будет полезно другим владельцам устройств этого поколения (HD-Mini CPU B/D REV:1.0, тот же чипсет используется в HDR-1000S, IRHD-1000S и других моделях "5-го поколения" Humax).
## Аппаратная часть
``` Плата: HD-Mini CPU B/D REV.:1.0 Деталь №: 01004-00653 Чип: Broadcom BCM7358 (BMIPS3300, MIPS32-LE, 375-500 МГц) NAND: Spansion S34ML01G200BHI00 (1 Gbit SLC, BGA63) CAS: Irdeto Cloaked CA ```
## Формат файла SDL (загрузчик прошивки)
Полностью восстановлена структура заголовка SDL-файла:
``` Offset Размер Поле Значение (пример) ────────────────────────────────────────────────────────── 0x00 1B magic 0x11 0x02 1B manufacturer_code 0x0F (Humax) 0x03 1B hardware_code зависит от модели 0x04 1B load_sequence_number монотонный счётчик 0x20 1B partition_count ⚠️ взаимоисключающее с upd_variant 0x21 1B upd_variant ⚠️ взаимоисключающее с partition_count 0x24-25 2B BE variant 0x35-36 2B BE sig_sysid индекс резидентного ключа 0x37-38 2B BE sig_sysver версия ключа 0x39 1B sig_subver версия подписи 0x3B-8A 80B SIGNATURE BLOCK RSA-PSS SHA-256 0x8B-8C 2B BE CRC-16/ARC над байтами [2:139] 0x8D+ N PAYLOAD образ прошивки ```
**CRC-16/ARC** подтверждён экспериментально (полином 0x8005, reflected, init=0):
```python def crc16_arc(payload): crc = 0 for byte in payload: crc ^= byte for _ in range(8): if crc & 1: crc = (crc >> 1) ^ 0xA001 else: crc = crc >> 1 return crc # crc16_arc(b"123456789") == 0xBB3D ```
## Цепочка валидации (11 из 12 проверок картированы)
Путём последовательной модификации отдельных байт заголовка и анализа кодов ошибок на экране устройства удалось построить полную карту проверок:
| Gate | Код ошибки | Поле | Сообщение устройства | |------|-----------|------|----------------------| | D01 | 0x80000D01 | magic byte | Invalid file format | | D02 | 0x80000D02 | CRC-16/ARC | CRC check failed | | D06 | 0x80000D06 | manufacturer_code | manufacturer_code field does not match STB | | D07 | 0x80000D07 | hardware_code | hardware_code mismatch | | D0B | 0x80000D0B | load_sequence | not within valid window for this STB | | E00 | 0x80000E00 | variant | variant field does not match STB | | E02 | 0x80000E02 | partition_count/upd_variant | both fields non-zero | | C05 | 0x80000C05 | sig_sysid | system ID does not match resident key | | C06 | 0x80000C06 | sig_sysver | key version does not match resident key | | C0F | 0x80000C0F | sig_subver | signature version out of step | | C09 | 0x80000C09 | подпись | **The download signature has failed a self-check** |
## Система подписи
Из бинарного файла `humaxtv` (userspace, Linux) извлечены строки, указывающие на используемую схему:
``` "pkcs1psssha256" "1.2.7.f-irdeto-flexiflash-v1" "SignatureChain / rootKeyHash / packageSignature" ```
Это **Irdeto FlexiFlash v1**, подпись **RSA-PSS SHA-256**. Устройство хранит "резидентные ключи", индексированные по `(sysid, key_version)` — т.е. для каждого регионального оператора используется свой приватный ключ при одинаковой структуре файла.
Проверено экспериментально: оригинальная прошивка другого регионального оператора (с корректной структурой заголовка и действительной RSA-подписью) всё равно отклоняется на этапе C09 — то есть ключи различных операторов несовместимы даже при идентичной аппаратной платформе.
## Текущий статус
- Формат файла и цепочка валидации расшифрованы практически полностью - Обход криптографической подписи (RSA-PSS) не достигнут — требуется либо факторизация модуля (неизвестного размера), либо извлечение приватного ключа через аппаратный доступ (JTAG/SPI-NOR) - При анализе прошивки (humaxtv) из NAND-дампа этой же модели обнаружен рабочий AES S-box и таблица Rcon — подтверждено реальное использование AES в подсистеме экспорта каналов (QDF), отдельно от RSA-подписи SDL
## Полная документация
Весь технический отчёт, инструменты для анализа (Python/Ghidra скрипты) и пошаговая методология опубликованы в открытом доступе:
**https://github.com/kamiloglukadircan-ctrl/htr1000s-reverse-engineering**
## Вопрос к сообществу
Если у кого-то есть доступ к чип-дампу loader-раздела (не полный NAND, а именно encrypted loader partition, помеченный как `IRDETO_CPCB_ENCRYPTED`) для устройств этого поколения — был бы очень признателен за информацию. Это ключевой недостающий кусок для продолжения анализа.
Спасибо за внимание!
|