
Reverse engineering dell'head unit della BYD Dolphin — CAN bus, AVAS, chiavi NFC, OTA e altro. DiLink 3 / Android 10.
Reverse engineering, documentazione e strumenti per il sistema di infotainment BYD Dolphin 25/26 (DiLink 3, Android 10).
Tutto ciò che è presente qui è stato scoperto tramite esplorazione ADB, decompilazione di APK e probing del bus CAN — non è stata utilizzata alcuna documentazione proprietaria.
⚠️ Disclaimer: Progetto non ufficiale, guidato dalla community — nessuna affiliazione con BYD. Reverse engineering dei servizi Android interni di BYD a solo scopo didattico e di interoperabilità. Usare a proprio rischio — modificare il software del veicolo può invalidare la garanzia o violare i termini di servizio di BYD. Gli autori non si assumono alcuna responsabilità per eventuali danni al veicolo, al software o ai dati.
| Proprietà | Valore |
|---|---|
| Piattaforma | DiLink 3.0 |
| Android | 10 (API 29) |
| SoC | Qualcomm QCM6125 (SM6125 Trinket) |
| Architettura | ARM64, 8 core |
| RAM | ~3.5 GB |
| Kernel | 4.14.117-perf |
| ADB | WiFi, porta 5555 |
| IP della Head Unit | 192.168.10.10 (WiFi dell'auto) |
| Firmware | 13.1.32.2507250.1 (25 lug 2025) |
| MCU | 13.5.2.2312260.1 |
| DSP | 13.5.5.2505300.2 |
| Bootloader | Sbloccato (ro.boot.flash.locked=0) |
| Verified boot | Arancione (sbloccato) |
| Quadro Strumenti | Sistema Qt/QML separato (Qt 5.15.10 / 6.5.5) |
Testato sul firmware
13.1.32.2507250.1. Le versioni precedenti probabilmente funzionano. Aggiornamenti firmware più recenti da BYD potrebbero modificare o rompere le cose — nessuna garanzia.
Nuovo qui? Inizia con la Guida al Sideloading per installare app sulla tua BYD — senza root.
Per app personalizzate basate su questa ricerca, vedi byd-apps.
adb connect 192.168.10.10:5555
Third Party Apps XX (suffisso del codice paese), collegalo all'autoBYD6125F (universale su DiLink 3)targetSdk ≤ 33, minSdk ≤ 29Inietta frame CAN da ADB — senza root, senza dongle OBD2:
# 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
Consulta Driver Display per il protocollo diagnostico UDS completo, il formato dei frame CAN e la topologia di rete delle ECU.
| Funzionalità | Dettagli |
|---|---|
| Lettura temperatura AC | getTemprature(zone) — zone 1/2 = temperatura impostata, zone 4 = esterna/ambiente |
| Controllo completo AC | Oltre 40 metodi getter + SET (avvio/arresto, temperatura, ventola, modalità vento) tramite bypass dei permessi |
| Controllo remoto AC | hasFeature("ACRemoteControl") = 1, supporta timer da 10 a 30 min |
| Bypass permessi | BydPermissionContext (ContextWrapper) concede automaticamente i permessi BYDAUTO_* lato client |
| Lettura/scrittura CAN bus | Tramite ADB usando app_process + reflection |
| Oltre 75 pacchetti BYD | Con accesso al CAN bus, oltre 100 permessi personalizzati BYDAUTO_* |
| Suono simulatore motore | Simulatore presente e attivabile (HAS_SIMULATOR=2), preset selezionato tramite 0x3E300038. L'MCU memorizza e restituisce qualsiasi tipo di sorgente — verificato fino a 200; solo 0 viene rifiutato — quindi l'accettazione non implica un suono distinto e il numero di preset reali non è individuabile tramite questa API. 0x48F00013 restituisce 1 che significa "esiste una sorgente", non un conteggio. — Engine Sound app |
| Selezione preset AVAS | Scrivibile via CAN — l'interfaccia mostra 2 ma l'MCU accetta 0–5+ |
| Streaming PCM setBuffer | Frame PCM da 128 byte accettati dall'MCU (ret=0) per oltre 8 feature ID. Buffer massimo: 128 byte. Non confermato se l'MCU li interpreti come audio. |
| Toni di test AVAH | Riproduzione sull'altoparlante esterno AVAS usando segnali diagnostici di fabbrica (0x6E970010) |
| Pattern melodici AVAS | 8 pattern funzionanti (campanello, suoneria negozio, allarme, fanfara, ecc.) tramite controllo pitch TEST_AUDIO_AVAS_SET — Door Sound app |
| Iniezione CAN bus | Codifica funzionalità in stile VCDS possibile — inietta frame CAN tramite broadcast com.byd.cluster.spi, senza root |
| Screenshot cluster | Cattura del display conducente tramite fission_screencap -d 1 -p <file> |
| Letture quadro strumenti | PowerUnit, TempUnit, BacklightCtlType, InsThemeValue tramite BYDAutoManager |
| Toggle DRL | setInt(1004, 0x43100046, 1/2) — modalità automatica DRL ON/OFF, confermato dalla rilettura |
| Dispositivo YUN (1034) | TUTTI i feature ID 0xAA accettati dall'MCU — setBuffer(1034, fid, data) e setInt(1034, fid, val) restituiscono 0 (OK). Canale MCU privato di Cloudmanager. Richiede crittografia AES per l'attuazione. |
| Content provider | Espongono dati del veicolo (batteria, pressione pneumatici, manutenzione, consumo viaggio) |
| Sideloading | Chiavetta USB o ADB — vedi guida |
| Frame telecamera 360 | Live 1280×960 da tutte e quattro le telecamere surround, senza root. bmmcamera.jar è leggibile da tutti — caricalo tu stesso e pilota JNIBMMCamera direttamente da un app_process con uid shell. Un'app installata non può mai farlo (SELinux nega a untrusted_app_* il binder bmmcameraserver); un processo avviato tramite ADB può — dettagli |
| Funzionalità | Stato |
|---|---|
| Stato blocco porte | Le porte principali restituiscono INVALID (0), il blocco bambini è leggibile. Nessun setDoorLockStatus() dedicato — serve set() generico con feature ID sconosciuti |
| Controllo visualizzazione telecamera 360 | BYDAutoPanoramaDevice (modalità, rotazione, trasparenza) è applicato lato server e il bypass BydPermissionContext fallisce. La cattura dei frame funziona — vedi sopra |