sphings-dev.de

Energie & Speicher

Marstek Venus Firmware Reverse Engineering

Doku

Statische Analyse der Firmware von Marstek Venus D/E mit Ghidra: Control/EMS, Micro-Inverter/VNS und BMS, vollständige Modbus-TCP- und RS485-Registerkarte, Protokollnotizen und Python-Scan-Werkzeuge.

Repository (öffnet in neuem Tab)

Steckbrief

Sprache
Python
Projektstart

Das Repository Marstek-Venus-Firmware-Reverse-Engineering dokumentiert die statische Analyse der Firmware von Marstek Venus D und E mit Ghidra. Ziel ist eine vollständig beschriebene, cloud-freie Modbus-TCP-Schnittstelle für eine Home-Assistant-Integration: eine komplette Registerkarte samt Skalierungsfaktoren, Eigenheiten des Protokolls und den internen CAN-/RS485-Protokollen zwischen den Prozessoren. Alle Erkenntnisse stammen aus der statischen Analyse der Firmware-Images; Live-Debugging über SWD/JTAG gab es nicht, soweit nicht anders vermerkt.

Systemarchitektur: Control/EMS, Micro-Inverter und BMS sind über CAN und internes RS485 verbunden und nach außen über Modbus TCP, Modbus RTU und BLE erreichbar

Drei Controller

Die Venus D hat drei STM32-Prozessoren (Cortex-M4F, FreeRTOS), die über einen internen CAN-Bus und interne RS485-/UART-Verbindungen zusammenarbeiten. Der Control-Prozessor (EMS) bedient die Außenwelt: Modbus TCP über WLAN (Quectel-Modul) und Ethernet (CH395), parallel einen Modbus-RTU-Stack am externen RS485, BLE sowie den Weg zu Cloud und OTA. Dazu kommen der Micro-Inverter-Controller (VNS) und das BMS. Das Control-Image wurde mit GCC gebaut und nutzt mbedTLS 2.28.10, Micro und BMS stammen von RVDS/Keil; das BMS überwacht die Zellen mit einem KA495XX-BMIC.

Inhalt des Repositories

  • Control_FW/: Funktionsanalyse der Control-Firmware v149.2 und v147, der Cloud-Watchdog von v150 und die Fallstudie zu den 30-Minuten-Abbrüchen.
  • VNS_Micro_Inverter/: Funktionsanalyse, Registerkarten, Fehlercodes und der Versionsvergleich 115 zu 116.
  • BMS/: Analyse von v117.7 und v118 sowie eine Fallstudie zu einem Fehler in einem einzelnen Pack.
  • Modbus_RS485_TCP/: Verbindungsreferenz, Eigenheiten, Skalierungsfaktoren, die vollständige Registerkarte als CSV, das Format der Deskriptortabelle, Scan-Logs und der Bug im Lese-Serializer.
  • CAN_Bus/: Aufbau der Arbitration-ID, Zielklassen und Funktionscodes aller 46 Sendestellen des Control im Vergleich mit den Empfängern von Micro v116 und BMS v118.
  • BLE/: BLE-Befehlsübersicht und Querverweis auf Modbus.
  • HM_HIE_FC41D/: das WLAN-/BLE-Kommunikationsmodul, OTA-Analyse und Anleitungen zum Mitschnitt (ohne Binaries).
  • Scripts/ und Methodik_und_Meta/: Python-Werkzeuge ohne pymodbus, Methodik, Ghidra-Workflow, Firmware-Diff-Workflow, offene Fragen.

Hinweise

Alle gerätebezogenen Daten sind anonymisiert (MAC, IP, Geräte-ID, Seriennummer, BLE-Name, WLAN-Zugangsdaten). Firmware-Images und Dekompilat werden nicht weitergegeben. Sicherheitsrelevante Funde wurden per Responsible Disclosure gemeldet und bewusst nicht veröffentlicht, bis eine Korrektur verfügbar ist. Die Arbeit ist unabhängige Forschung zur Interoperabilität und nicht mit Marstek verbunden.

Die Ergebnisse speisen unter anderem die Marstek Modbus Suite und den Marstek Offline Endpoint. Die Firmware-Images selbst stammen aus dem Firmware-Archiv.