Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dcvp-server

Приёмный сервер телематического протокола DCVP (Dongfeng Cloud Vehicle Platform) для блока T-BOX автомобиля VOYAH Courage / 岚图知音 四驱全球版.

Цель — принимать выгрузку штатного T-BOX на свой сервер (локальный, в бортовой сети), без китайского облака: переиспользовать штатные датчики/GPS/антенны для собственной телеметрии и заодно снять паразитный разряд 12 В (радио в flight, аплоад по Ethernet). Протокол восстановлен статическим реверсом прошивки tsp_manager (T_BOX_H37A3630849BA), без правок на живой машине.

⚠️ Исследовательский инструмент для собственного автомобиля. Секреты конкретной машины (ключи, сертификаты, ICCID/IMEI/MAC/VIN, GPS) в репозитории отсутствуют и не должны здесь появляться.

Протокол (что известно из прошивки)

  • Схема данныхproto/vcp_custom_message.proto (пакет tboxev.vcp, proto2, 68 сообщений / 534 поля), извлечена из встроенного FileDescriptorProto в .rodata бинаря tsp_manager. Ключевые: in_binding_info (идентификационный хендшейк), in_veh_data (97 полей состояния), in_location_data, in_driving_report/in_alarm_info, in_general_config (адрес платформы по протоколу).

  • Обёртка кадра — GB/T 32960 (китайский нацстандарт телематики ЭМ), поверх mTLS-сокета:

    off size поле
    0 2 23 23 (##, 起始符)
    2 1 cmd — командный флаг
    3 1 resp — флаг ответа (0xFE=запрос, 0x01=успешный ACK)
    4 17 VIN (ASCII)
    21 1 enc — шифрование data-unit (0x01=нет, 0x02=AES)
    22 2 len — длина data-unit, big-endian
    24 N data-unit
    24+N 1 BCC — XOR байтов [2 .. 24+N)

    Полный кадр = 25 + N байт. protobuf tboxev.vcp.* едет в data-unit под cmd = 0xCB (заводской диапазон 0x80..0xFE), а не отдельным каналом.

  • Последовательность сессии: login(0x01) → ACK → heartbeat(0x07) каждые heartBeat_Time сек + realtime(0x02)/custom(0xCB) по событию → logout(0x04). До логина данные буферизуются. При 3 неудачных логинах — ретрай-цикл 30 мин.

  • Порты/транспорт: 6504/6507 — DCVP-сессия (TCP mTLS, GB/T 32960); 6553 — HTTPS POST /log/logReceiveGateway (загрузка логов, отдельный канал); KPI/PKI — HTTPS-JSON.

  • mTLS: клиент (T-BOX) проверяет сервер по своему trust store, который лежит в перезаписываемой области блока → подменяется на собственный CA (certs/); клиентский сертификат сервер принимает любой (или VERIFYPEER=0).

  • Bootstrap PKI: до провижининга клиентского сертификата T-BOX поднимает TLS на заводском tbox.pfx, затем CSR → client.crt.

Что реализует сервер

  • Терминирует mTLS нашим CA (порты 6504/6507).
  • deframe GB/T 32960: поиск старта ##, разбор заголовка, длина BE по смещению 22, проверка XOR-BCC, ресинхронизация сквозь мусор, придержка недочитанного кадра.
  • Диспетч по cmd; custom-кадры (0xCB) распаковывает как protobuf tboxev.vcp.*; enc=0x02 (AES) помечает, не пытаясь парсить.
  • Генерирует GB-ACK (resp=0x01): для login/logout — эхо time+serial, для heartbeat — header-only. Без ACK T-BOX ловит response_TimeOut и переоткрывает сессию.
  • Отдельный HTTPS-хендлер на 6553 для POST /log/logReceiveGateway.

Ещё не выведено статически (нужен живой перехват / qemu-стенд)

  • Точная структура data-unit ACK сервера (какие поля кроме serial_number валидирует T-BOX). Текущий ACK минимальный, но по коду достаточный для удержания сессии.
  • Реальные heartBeat_Time/таймауты и включён ли AES data-unit (enc=0x02) — берутся из конфига блока.
  • Точная 54-байтная раскладка login data-unit (время/流水号/ICCID видны, порядок подсистем — по GB/T 32960.2).
  • Приём remote-config in_general_config от произвольного пира (второй вектор задания адреса платформы).

Структура

proto/     vcp_custom_message.proto     схема выгрузки (tboxev.vcp)
server/    dcvp_server.py + Dockerfile  приёмник GB/T 32960 + GB-ACK + HTTPS-логи
client/    fake_tbox.py                 синтетический клиент: GB/T 32960-сессия без машины
harness/   README.md                    план qemu-стенда: живой tsp_manager → наш сервер
certs/     gen-ca.sh                    генератор своего CA + server/client cert (сами cert'ы gitignored)
docker-compose.yml · Makefile

Быстрый старт

make certs          # свой CA + server/client cert (генерятся локально, в git не идут)
make build          # образ; protobuf-байндинги генерятся внутри из .proto
make up             # сервер на :6504/6507 (сессия) + :6553 (HTTPS-логи), лог в консоль
# в другом окне — синтетический клиент (GB/T 32960-сессия end-to-end):
make client

Отладка без TLS/клиентского cert: добавить в command сервера --plaintext или --no-client-cert. Синтетический клиент прогоняет login → binding → location → N×(heartbeat + veh_data) → logout и печатает ACK.

Приватность

certs/наш лабораторный CA (не секреты машины), генерится локально и в git не коммитится (.gitignore). ⛔ Реальные device-секреты T-BOX (rsa_aes_tbox.key, боевой client.crt, tbox.pfx, настоящий ca.pem), а также VIN/ICCID/IMEI/MAC/GPS конкретной машины сюда класть нельзя. Значения в client/fake_tbox.py — синтетические.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages