- 20 Januar 2026
- 2
- 1
- E-Scooter
- Xiaomi 5 pro
Hallo zusammen,
nachdem auf meinen Post von heute 15:00 Uhr leider keine Rückmeldung kam, habe ich beschlossen, das Thema selbst in die Hand zu nehmen. Mir ist klar, dass die neue Brightway-Architektur (Linkosemi LKS32MC081 Chip) eine andere Hausnummer ist als die alten STM32-Controller, aber ich bin bereits tief im Reverse Engineering der Firmware.
Was ich bisher gemacht habe:
Ich habe die MCU-Firmware extrahiert und erfolgreich in Ghidra (ARM Cortex-M0, Little Endian) importiert und analysiert.
Meine Funde bisher:
Ich will keinen statischen "Patch" (dauerhaft 30 km/h), sondern echtes "German Maneuver" (GM) via Code-Injection implementieren.
Ich hänge aktuell an zwei Punkten und suche Leute, die sich mit der Brightway-Memory-Map auskennen:
LG
nachdem auf meinen Post von heute 15:00 Uhr leider keine Rückmeldung kam, habe ich beschlossen, das Thema selbst in die Hand zu nehmen. Mir ist klar, dass die neue Brightway-Architektur (Linkosemi LKS32MC081 Chip) eine andere Hausnummer ist als die alten STM32-Controller, aber ich bin bereits tief im Reverse Engineering der Firmware.
Was ich bisher gemacht habe:
Ich habe die MCU-Firmware extrahiert und erfolgreich in Ghidra (ARM Cortex-M0, Little Endian) importiert und analysiert.
Meine Funde bisher:
- Speed-Init Funktion (FUN_000031dc): Ich habe die Stelle gefunden, an der die Fahrmodi initialisiert werden.
- Der Code lädt ein Array mit 0x14 (20 km/h) und 0x18 (24 km/h) und übergibt es an FUN_0000cd80. Das ist der Einstiegspunkt für die Limits.
- UART Kommunikation: Ich habe den Protokoll-Handler (FUN_00003f00) und die TX-Logik identifiziert (Magic Byte 0xAA, Checksummen-Berechnung).
- CRC-Logik: Die Firmware nutzt eine CRC16-Prüfung (0xA001 Polynom), die ich im Code lokalisiert habe (FUN_00003b42).
Ich will keinen statischen "Patch" (dauerhaft 30 km/h), sondern echtes "German Maneuver" (GM) via Code-Injection implementieren.
- Plan: Einen Hook in die Speed-Init-Funktion setzen, der zu einer Code-Cave springt.
- Payload: Dort prüfe ich eine RAM-Variable (ausgelöst durch Bremshebel-Sequenz). Wenn aktiv -> 0x1E (30 km/h), sonst 0x14.
Ich hänge aktuell an zwei Punkten und suche Leute, die sich mit der Brightway-Memory-Map auskennen:
- RAM-Adresse Bremshebel: Hat jemand die genaue Speicheradresse (ADC-Register oder globale Variable) für den Bremshebel-Status beim LKS32MC081 gemappt? Ich sehe die UART-Sendelogik, finde aber den Rückweg vom ADC noch nicht.
- Signatur/CRC: Wenn ich den Hook setze, muss die Checksumme im Header korrigiert werden. Hat jemand das genaue Format des Brightway-Headers oder ein Python-Script zur Neuberechnung der File-CRC?
LG