
Reverse Engineering der BYD Dolphin Head Unit — CAN-Bus, AVAS, NFC-Schlüssel, OTA und mehr. DiLink 3 / Android 10.
Reverse Engineering, Dokumentation und Tooling für das BYD Dolphin 25/26 Infotainment-System (DiLink 3, Android 10).
Alles hier wurde durch ADB-Erkundung, APK-Dekompilierung und CAN-Bus-Sondierung entdeckt — es wurde keine proprietäre Dokumentation verwendet.
⚠️ Haftungsausschluss: Inoffizielles, community-getriebenes Projekt — keine Verbindung zu BYD. Reverse Engineering der internen Android-Dienste von BYD ausschließlich für Bildungs- und Interoperabilitätszwecke. Nutzung auf eigenes Risiko — das Modifizieren von Fahrzeugsoftware kann Ihre Garantie erlöschen lassen oder gegen BYDs Nutzungsbedingungen verstoßen. Die Autoren übernehmen keine Haftung für Schäden an Ihrem Fahrzeug, Ihrer Software oder Ihren Daten.
| Eigenschaft | Wert |
|---|---|
| Plattform | DiLink 3.0 |
| Android | 10 (API 29) |
| SoC | Qualcomm QCM6125 (SM6125 Trinket) |
| Architektur | ARM64, 8 Kerne |
| RAM | ~3,5 GB |
| Kernel | 4.14.117-perf |
| ADB | WiFi, Port 5555 |
| Head-Unit-IP | 192.168.10.10 (Auto-WiFi) |
| Firmware | 13.1.32.2507250.1 (25. Jul. 2025) |
| MCU | 13.5.2.2312260.1 |
| DSP | 13.5.5.2505300.2 |
| Bootloader | Entsperrt (ro.boot.flash.locked=0) |
| Verified Boot | Orange (entsperrt) |
| Instrumentencluster | Separates Qt/QML-System (Qt 5.15.10 / 6.5.5) |
Getestet mit Firmware
13.1.32.2507250.1. Ältere Versionen funktionieren wahrscheinlich. Neuere Firmware-Updates von BYD können Dinge ändern oder beschädigen — keine Garantien.
Neu hier? Beginnen Sie mit dem Sideloading-Leitfaden, um Apps auf Ihrem BYD zu installieren — kein Root erforderlich.
Für benutzerdefinierte Apps, die auf dieser Recherche basieren, siehe byd-apps.
adb connect 192.168.10.10:5555
Third Party Apps XX legen (Ländercode-Suffix), im Auto einsteckenBYD6125F (universal über DiLink 3 hinweg)targetSdk ≤ 33, minSdk ≤ 29CAN-Frames per ADB injizieren — kein Root, kein OBD2-Dongle:
# 1. Start the ClusterDebug app + service (acts as privileged proxy)
adb shell "am start -n com.byd.clusterdebug/.MainActivity"
adb shell "am startservice -n com.byd.clusterdebug/.ClusterDebugService"
# 2. Inject CAN frames
adb shell "am broadcast -a com.byd.cluster.spi --es normal 'FF,FF,FF,FF,FF,FF,FF,FF'"
# 3. Capture cluster screenshot
adb shell "fission_screencap -d 1 -p /data/local/tmp/cluster.png"
adb pull /data/local/tmp/cluster.png
Siehe Driver Display für das vollständige UDS-Diagnoseprotokoll, das CAN-Frame-Format und die ECU-Netzwerktopologie.
| Funktion | Details |
|---|---|
| AC-Temperaturmessung | getTemprature(zone) — Zone 1/2 = eingestellte Temperatur, Zone 4 = Außen-/Umgebungstemperatur |
| Vollständige AC-Steuerung | 40+ Getter- + SET-Methoden (Start/Stopp, Temperatur, Lüfter, Windmodus) über Permission-Bypass |
| AC-Fernsteuerung | hasFeature("ACRemoteControl") = 1, unterstützt 10–30-Minuten-Timer |
| Permission-Bypass | BydPermissionContext (ContextWrapper) gewährt BYDAUTO_*-Berechtigungen automatisch clientseitig |
| CAN-Bus Lesen/Schreiben | Über ADB mittels app_process + Reflection |
| 75+ BYD-Pakete | Mit CAN-Bus-Zugriff, 100+ benutzerdefinierte BYDAUTO_*-Berechtigungen |
| Motor-Simulator-Sound | Simulator vorhanden und umschaltbar (HAS_SIMULATOR=2), Preset ausgewählt über 0x3E300038. Die MCU speichert und gibt jeden Quelltyp zurück — verifiziert bis 200; nur 0 wird abgelehnt — die Akzeptanz impliziert also keinen bestimmten Sound, und die Anzahl der echten Presets ist über diese API nicht ermittelbar. 0x48F00013 gibt 1 zurück, was „eine Quelle existiert" bedeutet, nicht eine Anzahl. — Engine Sound app |
| AVAS-Preset-Auswahl | CAN-schreibbar — UI zeigt 2, aber MCU akzeptiert 0–5+ |
| setBuffer PCM-Streaming | 128-Byte-PCM-Frames werden von der MCU akzeptiert (ret=0) für 8+ Feature-IDs. Max. Puffer: 128 Bytes. Ob die MCU dies als Audio interpretiert, ist unbestätigt. |
| AVAH-Testtöne | Wiedergabe über den AVAS-Außenlautsprecher mittels Werksdiagnosesignalen (0x6E970010) |
| AVAS-Melodiemuster | 8 funktionierende Muster (Türklingel, Ladengong, Alarm, Fanfare usw.) über TEST_AUDIO_AVAS_SET-Tonhöhensteuerung — Door Sound app |
| CAN-Bus-Injektion | VCDS-artige Feature-Codierung möglich — CAN-Frames über com.byd.cluster.spi-Broadcast injizieren, kein Root erforderlich |
| Cluster-Screenshot | Fahrerdisplay erfassen über fission_screencap -d 1 -p <file> |
| Instrumentencluster-Auslesung | PowerUnit, TempUnit, BacklightCtlType, InsThemeValue über BYDAutoManager |
| DRL-Umschaltung | setInt(1004, 0x43100046, 1/2) — DRL-Automatikmodus EIN/AUS, durch Rücklesen bestätigt |
| YUN-Gerät (1034) | ALLE 0xAA-Feature-IDs werden von der MCU akzeptiert — setBuffer(1034, fid, data) und setInt(1034, fid, val) geben 0 (OK) zurück. Der private MCU-Kanal von Cloudmanager. Benötigt AES-Verschlüsselung zur Auslösung. |
| Content-Provider | Stellen Fahrzeugdaten bereit (Batterie, Reifendruck, Wartung, Fahrtverbrauch) |
| Sideloading | USB-Laufwerk oder ADB — siehe Anleitung |
| 360-Kamera-Frames | Live 1280×960 von allen vier Surround-Kameras, kein Root. bmmcamera.jar ist weltweit lesbar — laden Sie es selbst und steuern Sie JNIBMMCamera direkt aus einem shell-uid app_process. Eine installierte App kann dies niemals tun (SELinux verweigert untrusted_app_* den bmmcameraserver-Binder); ein über ADB gestarteter Prozess kann es — Details |
| Funktion | Status |
|---|---|
| Türverriegelungsstatus | Haupttüren geben INVALID (0) zurück, Kindersicherung lesbar. Kein dediziertes setDoorLockStatus() — benötigt generisches set() mit unbekannten Feature-IDs |
| 360-Kamera-Display-Steuerung | BYDAutoPanoramaDevice (Modus, Rotation, Transparenz) wird serverseitig durchgesetzt und der BydPermissionContext-Bypass schlägt fehl. Frame-Erfassung funktioniert — siehe oben |