Non hai specificato un chip, quanto segue è principalmente orientato ai dispositivi atmega a 8 bit, ma sono informazioni generali. Leggi la sezione "Programmazione della memoria" per la scheda tecnica del tuo chip specifico per informazioni più specifiche!
Detto questo, e come hai detto, tutti i dispositivi AVR contengono due bit di blocco denominati LB1 e LB2. La programmazione di questi (a 0, basso) aggiungerà protezione ai contenuti scritti nelle memorie Flash ed EEPROM secondo la tabella seguente. Il livello di protezione è diviso in tre modalità, in cui la modalità 1 non offre protezione e la modalità 3 offre la massima protezione. È possibile passare a una modalità di protezione superiore semplicemente riprogrammando i bit di blocco.
L'AVR consente di cambiare i bit "alti" in "bassi", ma non viceversa. Non è possibile modificare un bit di blocco "basso" in "alto", pertanto non è possibile ridurre il livello di protezione. Per cancellare i bit di blocco, è necessaria una cancellazione completa del chip, che cancella la memoria Flash.
Questi 2 bit di blocco da soli (LB1 e LB2) quando bassi impediranno al 99,9% delle persone di rubare il firmware! Probabilmente più del 99,9%. Sarebbe quasi sempre più semplice decodificare il tuo codice.
Quindi non c'è modo di consentire all'utente di aggiornare il firmware tramite il bootloader personalizzato e proteggere contemporaneamente il flash dalla lettura?
Per quanto ne so (potrei sbagliarmi, ma penso che avrei avuto problemi con questo prima), su dispositivi che hanno i fusibili di protezione del bootloader (BLB12 e BLB11), puoi bloccare la sezione del bootloader personalizzata , disabilitare SPI ed essere protetto dal 97-98% delle persone.
Tuttavia, quando nessuno dei bit di blocco è programmato, non sono abilitate le funzioni di blocco della memoria !!! La disabilitazione dell'ISP è sufficiente per bloccare il 70% delle persone.
Per alcune informazioni aggiuntive, i bit di blocco e i fusibili non si trovano nel normale spazio flash o EEPROM, né sono accessibili dal software, ad eccezione dei bit di blocco relativi al caricatore di avvio nei dispositivi con la funzione di autoprogrammazione. La tabella 2 in questa nota dell'app ti aiuterà a identificare cosa puoi fare per il tuo particolare dispositivo!
Le linee AVR di Atmel non sono dispositivi ad alta sicurezza (a meno che non sia esplicitamente indicato!) E come tali non hanno assolutamente alcuna garanzia di sicurezza del codice, né dovrebbero! Come tutti i dispositivi non sicuri (e purtroppo anche alcuni sicuri), sono soggetti ad attacchi comuni!
modificare
Metterò a bordo l'intestazione dell'interfaccia di programmazione HV. Ma qualcuno può usare il programmatore HV per LEGGERE il flash? So che il programmatore HV può cancellare i chip anche se ISP / Jtag sono disabilitati.
Non penso che dovresti includere il programmatore HV nella progettazione della tua scheda a meno che non sia assolutamente necessario e sai per certo che non causerà problemi con nulla. I programmatori HV (segnali a 12 volt) sono disponibili solo come misura di sicurezza per programmare i chip bloccati (errore bloccato, principalmente). In teoria, questo è solo lo scopo di programmare il dispositivo non legge nulla. E non ho mai sentito parlare di un exploit che consentirebbe la lettura.
Per aggiornare il bootloader (occasionalmente) inserirò l'intestazione dell'interfaccia di programmazione HV. Ma qualcuno può usare il programmatore HV per LEGGERE il flash? So che il programmatore HV può cancellare i chip anche se ISP / Jtag sono disabilitati.
Penso che potrebbe esserci un modo per aggiornare il flash bloccato tramite bootloader, (qualcosa a che fare con un flag di scrittura interno e / o ISR forse ???) Ma dovrò cercare le mie note e forse dovrò testarlo. Non sarò in grado di farlo per ~ 20 ore; quindi consiglio vivamente di porre una nuova domanda focalizzata solo su questo e per il processore che hai citato. È un'ottima domanda !