Forum
Calcolo del checksum su centralina EDC15P+ |
MTX Electronics » Forum » Generale » Discussioni Generiche |
|
Moderatori: mtx-electronics |
Autore | Messaggio | ||
salvo |
| ||
messaggi: 19 | Per iniziare vediamo rispondere a due semplici domande in modo che tutti capiscono di cosa stiamo parlando. - Cosa è un checksum? Un checksum è un valore computato da un blocco di dati digitali con l'intento di essere utilizzato per validare la correttezza di questi dati. L'integrità dei dati può essere verificata in qualsiasi momento generando nuovamente il checksum del blocco di dati è confrontandolo con il valore precedentemente memorizzato. Quando si parla di algoritmo di checksum si sta indicando una funzione software che tramite varie operazioni di spostamento dei bit e calcoli matematici è in grado di generare un checksum. - Come viene usato nelle centraline dell'auto è perché? I checksum nelle centraline ha un importanza rilevante perché permette alla centralina stessa di effettuare dei controlli di sicurezza in modo che in caso che i dati al suo interno vengono danneggiati e/o modificati esternamente questa può prendere azione onde evitare eventuali gravi danni dovuti ad un errato funzionamento. In genere esistono più checksum nella stessa centralina per proteggere sia le zone del programma che le zone dove sono memorizzate le mappature. Di seguito descriverò brevemente il checksum utilizzato dalla centralina della mia auto per proteggere i dati della mia Seat Cordoba 1.9TDI 101cv con centralina EDC15P+. Iniziamo elencando i 10 blocchi di memoria protetti da checksum è i relativi indirizzi dove sono memorizzati i risultati dei checksum calcolati: 1) 0x14000 - 0x4bffe checksum usato come seed (non memorizzato) 2) 0x00000 - 0x07ffe checksum usato come seed (non memorizzato) 3) 0x08000 - 0x0fffb checksum memorizzato all'indirizzo 0x0fffc 4) 0x01000 - 0x13ffb checksum memorizzato all'indirizzo 0x13ffc 5) 0x4c000 - 0x4fffb checksum memorizzato all'indirizzo 0x4fffc 6) 0x50000 - 0x50b7b checksum memorizzato all'indirizzo 0x50b7c 7) 0x50b80 - 0x5bffb checksum memorizzato all'indirizzo 0x5bffc 8) 0x6c000 - 0x6fffb checksum memorizzato all'indirizzo 0x6fffc 9) 0x70000 - 0x70b7b checksum memorizzato all'indirizzo 0x70b7c 10) 0x70b80 - 0x7bffb checksum memorizzato all'indirizzo 0x7bffc Come avete notato i primi due checksum non sono memorizzati in memoria non volatile (EEPROM) perché vengono utilizzati dall'algoritmo di checksum come chiavi (seed) per calcolare alcuni dei successivi checksum, in questo modo se uno o più dei primi due blocchi di dati cambia contenuto molti altri checksum verranno modificati di conseguenza. Vediamo più da vicino quali checksum vengono influenzati da questi primi due: Il checksum numero 1 viene utilizzato come seed nel calcolo del numero 5,6,7,8,9 e 10; Invece il checksum del numero 2 viene utilizzato come seed nel calcolo del numero 3. Ora vediamo di parlare dell'algoritmo utilizzato nel calcolo del checksum, in pratica c'è una funzione che con delle operazioni logiche (XOR, AND) e matematiche effettua delle operazioni sui dati per arrivare al risultato finale. Inoltre per assicurarsi di complicare un'altro po le cose ci sono delle costanti in memoria che sono utilizzate come seed, queste sono diverse per ogni blocco di dati. Il seguente è un piccolo pezzo del codice che ho convertito in C dal originale decompilato in linguaggio assembler, ho fatto delle piccole omissioni in modo che sia più chiaro il suo funzionamento per questa dimostrazione (non è lo scopo di questo testo andare nei dettagli molto complessi dell'algoritmo utilizzato):
// Definiamo alcune variabili utilizzate
... continua per altre circa 60 righe di codice ... Questo codice viene eseguito in modo sequenziale per calcolare tutti i 10 checksum è se solo uno dei checksum non risulta esatto la centralina segnalerà l'errore e molto probabilmente l'auto non si avvierà. Quando un preparatore effettua una rimappatura della vostra auto il software che utilizza deve necessariamente effettuare questi calcoli prima di procedere al invio della nuova mappa alla centralina tramite presa OBD o programmazione del EEPROM. [ Modificato gio gen 20 2011, 07:34 ] | ||
Torna ad inizio pagina | | ||
salvo |
| ||
messaggi: 19 | E' stato svillupato VAG Checksum Fix, un software opensource per il calcolo dei checksum sulle vetture VAG che montano centralina EDC15P. Trovate il programma pronto all'uso è il codice sorgente completo nella sezione download. Link diretto: VAG Checksum Fix | ||
Torna ad inizio pagina | | ||