Обратный инжиниринг дешевой мини видеокамеры из семейства А9

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В данной статье речь пойдет о Wi-Fi мини видеокамере из семейства А9 от китайских производителей. Цель исследования этих камер – расширить возможность их применения, которая ограничена использованием только стандартных приложений для мобильных устройств на базе Android или iOS.

О камерах семейства А9

Стоимость данных видеокамер варьируется от 2$ до 4$ (в зависимости от производителя, типа процессора, наличия ИК подсветки и др.). На известной экспресс торговой площадке её можно найти по запросу «мини-камера A9». Ссылка на англоязычный форум по теме разбора камер А9 – https://community.home-assistant.io/t/popular-a9-mini-wi-fi-camera-the-ha-challenge/230108
Внешний вид моих подопытных камер представлен на фотографии ниже (и, да, внутри они немного разные).

Внешний вид камер А9 от разных производителей (показаны без элементов крепления)
Внешний вид камер А9 от разных производителей (показаны без элементов крепления)

Типовая видеокамера А9 имеет встроенный аккумулятор, а внешнее питание подается через разъем microUSB. Она может обеспечивать два режима работы с сетью: как точка доступа (AP), и как клиент сети (STA). Режим работы настраивается через стандартное приложение на смартфоне. По умолчанию всегда включен режим АР. IP адрес для камеры в режиме АР может отличаться в зависимости от производителя, у моих подопытных – 192.168.1.1. При проведении исследований этих камер использовалось приложение FtyCamPro рекомендованное производителем, хотя в «интернетах» пишут, что работают эти камеры и с более известным приложением Little Stars. Пользовательский обзор в достаточном объеме представлен на YouTube по запросу «Подключение китайской камеры А9».
Рассматриваемые здесь дешевые видеокамеры построены на основе процессора TXW806-840. Ссылка на сайт производителя чипа TWX806 (только китайский язык) https://www.taixin-semi.com/. В продаже имеются также и аналоги с процессором BK7231, которые несколько дороже. Электронная часть камеры выглядит вот так:

Плата одной из моих видеокамер с обеих сторон
Плата одной из моих видеокамер с обеих сторон

Структурная схема процессора, взятая из официального даташита показана ниже.

Структурная схема SoC TXW806
Структурная схема SoC TXW806

Согласно данным от производителя TXW806 - это высокоинтегрированный небольшой многорежимный чип для IoT с частотой 2,4 ГГц. Чип включает в себя 32-битный микроконтроллер, встроенный MJPEG (поддерживает VGA/720P), имеет DVP интерфейс, высокоскоростной хост USB2.0, хост SDMMC, ведомое устройство SDIO2.0, интерфейс RMII MAC, ведущее устройство SPI, UART, IIC, IIS, IR Send/Receive, PWM, GPIO и ADC/DAC, поддерживают запуск программ на SPI Flash. Базовый модуль Wi-Fi TXW806 реализует технологию мультиплексирования с ортогональным частотным разделением каналов (OFDM), обратно совместима с технологией расширения спектра прямой последовательностью (DSSS), дополнительной кодовой манипуляцией (CCK) и поддерживает протокол IEEE 802.11 b/g/n. Wi-Fi поддерживает стандартную полосу пропускания 20 МГц и узкую полосу пропускания 5 МГц/10 МГц, обеспечивая скорость физического уровня 72,2 Мбит/с. Имеет усилитель мощности, малошумящий усилитель LNA, радиочастотный балун, антенный переключатель, модуль управления питанием и т. д. Поддерживает RTOS и сторонние операционные системы, а также предоставляет открытую и простую в использовании среду разработки и отладки.
Используется этот чип в основном для беспроводных аудио и видео устройств, аэрофотосъемки, видео глазков для домофонов и т.п. Богатый функционал, за такую стоимость, не правда ли? От себя могу похвалить этот чип за его стрессоустойчивость, которую он проявил во время пыток его паяльником и тестером.

Безоперационное определение сознания камеры

До препарирования камеры было проведено сканирование доступных портов утилитой nmap в Ubuntu, при этом камера была подключена к роутеру в режиме STA. По результатам сканирования, были определены открытые порты камеры:

PORT

STATE

SERVICE

68/udp

open|filtered

dhcpc

7070/tcp

open

rtsp/realserver

32108/udp

open|filtered

unknown

7070/tcp open rtsp
| fingerprint-strings:
| RTSPRequest:
| RTSP/1.0 200 OK
|_ Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

Из доступных для чтения видеопотока оказался порт 7070 по которому предоставляется потоковое видео и аудио по RTSP. Первые попытки получить видео посредством ПО работающего с протоколом RTSP не принесли успеха. Для этого использовались VLC player и openRTSP под Ubuntu (http://www.live555.com/openRTSP/).
На запрос: /home/live/testProgs# ./openRTSP ‑T 7070 rtsp://192.168.1.1:7070
Камера отвечала:

Hidden text

Created new TCP socket 3 for connection
Connecting to 192.168.1.1, port 7070 on socket 3...
...remote connection opened
Sending request: OPTIONS rtsp://192.168.1.1:7070 RTSP/1.0
CSeq: 2
User-Agent: ./openRTSP (LIVE555 Streaming Media v2023.11.30)
Received 76 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
Sending request: DESCRIBE rtsp://192.168.1.1:7070 RTSP/1.0
CSeq: 3
User-Agent: ./openRTSP (LIVE555 Streaming Media v2023.11.30)
Accept: application/sdp
Received 35 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 404 Not Found
CSeq: 3

Итогом такого общения был ответ от камеры:
Failed to get a SDP description for the URL "rtsp://192.168.1.1:7070": 404 Not Found
При использовании VLC результат был примерно такой же.
Еще отмечу, что камера в режиме STA интенсивно соединялась со сторонними серверами по UDP, IP которых: 170.106.50.82, 146.56.226.66 и 35.156.204.247. Это общение пришлось закрыть фаерволом, на всякий случай. Кстати, фаервол был включен на эти IP уже после тестирования с помощью утилиты openRTSP, на случай если при отсутствии соединения с этими серверами камера будет уходить в глухую оборону и в полное молчание.
P.S. Печально конечно, но IP адреса сторонних серверов потом меняются.

Вскрытие

Следующим шагом исследования было вскрытие корпуса и привлечение паяльника. На фотографиях ниже представлены PCB двух моих камер. Слева уже распаянная для работы, справа – новая, не тронутая. Обратите внимание на контактные площадки.

Контрольные (тестовые) контактные площадки на плате подопытных камер
Контрольные (тестовые) контактные площадки на плате подопытных камер

Да, и давайте камеру слева назовем FTYB, а камеру справа – BATC. Не спрашивайте почему. Дальше, надеюсь, будет понятно.
Контакты на плате слева имеют следующие обозначения: RX_PA9, TX_PA10, PA8, GND и CEN (chip enable). На плате справа аналогичные контакты обозначены несколько иначе: HCK, без обозначения, HDA, GND и nRST. В даташите на процессор TXW806 есть следующая информация:

Обозначение вывода

Тип

Назначение

PA8

I/O

LEDTMR2_PWM_OUT, ADKEY1_N0, ADKEY0_P1, ADKEY1_P0, TK8, LED_SEG4, QSPI_CLK

PA9

I/O

ADKEY0_P1, ADKEY1_P0, TK9, LED_SEG9, QSPI_IO2

PA10

I/O

ADKEY0_P1, ADKEY1_P0, TK10, LED_SEG8, QSPI_IO1

CHIP_EN

I

Chip enable:0:Chip off,   1:Chip enable

И таблица о порядке подключения чипа к программатору:

Кроме того, производитель сообщает, что имеется два интерфейса отладки: PA9 (DebugIO) и PA10 (DebugCLK) с внутренним сопротивлением подтягивающего резистора 10 кОм. Когда функция отладки не используется, интерфейс отладки можно использовать как обычный GPIO, и его необходимо настроить с помощью программного обеспечения. Во время компоновки печатной платы должны быть зарезервированы контрольные точки на плате, чтобы облегчить отладку. В то же время PA8, CHIP_EN также необходимо зарезервировать для вспомогательного тестирования.
С помощью переходника USB-TTL (в моем случае на микросхеме CP2102) камера была подключена к последовательному порту компьютера. Кстати! Контакт TX на плате это PA8, а на другой камере TX это HDA! Общение с платой осуществлялось посредством Putty с настройкой COM порта на скорость 1 000 000 (106) бот, все остальные параметры по умолчанию. Было задействовано три точки: GND, PA8 и PA9. Скорость взаимодействия определена опытным путем. На стандартной максимальной скорости 512 000 бот и менее в терминал сыпались нечитаемые знаки. Думаю, что весь лог загрузки приводить не целесообразно, здесь акцентирую внимание лишь на некоторых моментах. В логах загрузки и работы камеры содержатся наименование сборки и дата сборки ПО, наименование клиента (станции), пароль, наименование прошивки, калибровочные параметры для видео сенсора, настройки для АЦП, для TF (SD) карты памяти (пытается ее найти, создать там рабочие папки для записи видео и фото), настройки сети Wi-Fi (MAC, FLAGS, UP LINK_UP ETHARP IGMP, ip address 192.168.1.1, gateway, net mask), информация о состоянии системы (температура чипа, рабочая частота, свободная память, работающие процессы и уровни загрузки ими ЦП), например:

• начало загрузки, с наименованием сборки ПО выглядит так:

Hidden text

** hgSDK-v2.2.0.7-22619, app-0, build time: Apr 13 2023 10:15:54 **
 ------- system restart fault -----------
 ------- lvd fault -----------
 ---------------------------------------
[1]time=0, tick=1

get flash addr:fd000 size:4096,
[9]col_flag:1
[9]get_parse_cloud_id:126
[10]selfId:FTYB931188RLTOV:15
[10]col_flag:1
[10]col_flag:2
[10]get_parse_cloud_id: 126
[11]parId: WRAWEJ: 6
[IpcCfgInit][ 448] 1:616 --> get from  ezConfig FTYB931188RLTOV:ZZZZZ:
[IpcCfgInit][ 462] 0 --> get from  ezConfig FTYB931188RLTOV:ZZZZZ:
<-- FTYB931188RLTOV – имя камеры и имя точки доступа

• сообщение о разрешении матрицы сенсора:

Hidden text

[148] SENSR ident ok: 640*480
[148] csi set size ====>640*480

•  информация о том, что открытым является порт 7070:

Hidden text

t_s> spook init
listening on tcp port 7070
port:7070       fd:3
jpeg set_output
live start_block
live set_path /webcam
      <‑- /webcam – имя папки для работы по протоколу rtsp!
live set_track jpeg_dvp
jpeg get_framerate
jpeg set_running: 1
live end_block
len:1200

Соответственно, полный путь к устройству для приема потокового видео будет rtsp://192.168.1.1:7070/webcam
• данные о соединении с сетью:

Hidden text

[sys_wifi_init][ 419] CONFIG_UMAC4 ---- yes
-------ssid: FTYB931188RLTOV, key: 12345678
[52] lmac_bgn_lo_freq_set: 2457
[54] vif2 state WPA_DISCONNECTED -> WPA_COMPLETED

network interface: w0 (Default)
MTU: 1600
MAC: d8 83 32 8e a8 24
FLAGS: UP LINK_UP ETHARP IGMP
ip address: 192.168.1.1
gw address: 192.168.1.1
net mask: 255.255.255.0
network interface: lo
MTU: 0
MAC:
FLAGS: UP LINK_UP
ip address: 127.0.0.1
gw address: 127.0.0.1
net mask: 255.0.0.0

• данные о состоянии системы:

Hidden text

local:d8:83:32:8e:a8:24
    chip-temperature: 28
    freq:2457, bg_rssi:-73
    gain_table:0
    cca: -63, -53, -55
    tx: txq:0, ps:0, tx_stat_q:0,
        tx dma:12, total tx:12, retry:32, tx lost:3, tx err:0
    rx: rx irq:148
    rx dma free: 17232
    rx err: dma err:7, phy err:6714, rx frm err:467,

• данные о запущенных процессах:

Hidden text

[6244]ip:101a8c0  freemem:40224
[6244]---------------------------------------------------
[6245]Task Runtime Statistic, interval: 6244ms
[6245]PID      Name                          %CPU(Time)              Stack               Prio
[6246]--------------------------------------------------------------------------------------
[6247] 1          idle_task                     94%(5930)                  1024                61
[6247] 2          timer_task                   0%(1)                          800                  5
[6248] 3          MAIN                         2%(173)                      2048                43
[6248] 4          lmac tx                        0%(3)                          640                  27
[6249] 5          lmac tx status             0%(1)                          512                  27
[6250] 6          lmac beacon task        0%(9)                          640                  26
[6250] 7          lmac rx                        0%(11)                        1024                19
[6251] 8          lmac_bgn_test            0%(1)                          512                  51
[6251] 9          lmac main                   0%(5)                          1024                43
[6252]10         hw                               0%(21)                        2048                26
[6253]12         tcpip_thread               0%(2)                          1024                49
[6253]13         hg_sdh_test                 0%(11)                        1024                43
[6254]14         hgpdm_sample_task   0%(61)                        1024                43
[6255]17         ThLstn                        0%(5)                          1024                49
[6255]20         ThSysMon                  0%(5)                          3072                49
[6256]---------------------------------------------------
[6256]WARNING: work 0x20004248 (func:0x1800438c) use 12 ticks
host->flags:14
host->flags:14

При подключении смартфона и открытии приложения FtyCamPro:
• настройка соединения со смартфоном:

Hidden text

[26499]lmac_bgn_add_sta: if:2, aid1, addr:b4:хх:хх:хх:хх:58  ß хх – это для конфиденциальности

Источник: https://habr.com/ru/articles/810291/


Интересные статьи

Интересные статьи

OpenAI отказали в регистрации GPT как товарного знака, Apple с трудом, но отбилась от иска патентного тролля на полмиллиарда, Wildberries подешевел за бурный 2023-й, но позиций не утратил. О главных с...
Пока педагоги бьют в колокол, опасаясь, что ChatGPT порушит систему образования, они сами ломают её изнутри популярным нейромифом о доминирующем стиле обучения. Опросник Высшей школы экономики по...
Привет, я Илья — Frontend Team Lead в Альфа-Банк. Отвечаю не только за команду, но также веду и техчасть. Как тимлид я часто задаюсь вопросом «В чем моя роль?», «Как измерить эффективность моей р...
Если вы нацелены на релокацию и вам интересно рассмотреть стартапы - рекомендую подойти к этому ещё более серьезно. Особенно, учитывая, что сейчас экономика переживает кризис и во многих американских ...
Тех, кто работал с Kubernetes, вряд ли удивит ситуация, когда внезапно пришла идея по автоматизации, унификации, преобразованию чего-либо в кластере, но так, чтобы не волноваться за конечный результат...