Protezione Atmega328P

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Protezione Atmega328P

Postby simonpro » 05 Dec 2017, 13:27

Ciao a tutti, questo è il mio primo post.

Ho realizzato una PCB standalone con Atmega328P + quarzo da 16Mhz (quindi un Arduino semplificato).
Come da oggetto, mi occorre proteggere il microcontrollore da letture, quindi devo evitare che il contenuto possa essere letto/copiato/estratto.

Dando un'occhiata al datasheet, ho capito che è possibile proteggerlo con i lock bit e fuse, ma sono abbastanza confuso perchè è la prima volta che mi ritrovo a dover applicare questa tipologia di protezione...e non so cosa siano, come settarli e come utilizzare l'hardware per la programmazione/protezione.

Io posseggo un AVR Dragon + AVR Studio 7
Con questo Hardware posso sicuramente sia applicare la protezione, sia recuperare (in caso di errata programmazione) il microcontollore attraverso la programmazione HV.

Vorrei il vostro aiuto, per guidarmi passo passo alla corretta programmazione per applicare la protezione.

Grazie a tutti in anticipo
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby Leonardo » 09 Dec 2017, 10:04

Ciao Simone,

Puoi modificare i fuses ed i lock bit con Atmel Studio dalla schermata "Device Programming".

Brevemente sono delle impostazioni che permangono nel micro e che permettono di variarne il funzionamento, indipendentemente dal firmware caricato in memoria.

In genere coi lock bit puoi evitare che qualcuno "estragga" con facilità un dump della memoria del micro e ne faccia quindi reverse-engineering. E' diciamo un livello di protezione base che non fermerà di certo chi ha tempo e risorse a sufficienza per aprire fisicamente il micro e leggerne la memoria con pratiche poco ortodosse.. però è molto efficace per applicazioni "commerciali" dove ci si vuole tutelare da eventuali concorrenti smaliziosi di media/piccola taglia.

Ciao,
Leonardo
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Protezione Atmega328P

Postby simonpro » 09 Dec 2017, 11:32

Ciao Leonardo, grazie per la tua sintetica ma essenziale spiegazione.
Attualmente sono molto confuso sulla tecnica di programmazione/protezione da dover utilizzare per l'Atmega328P.

Da pochi mesi ho comprato l'AVR Dragon e ad oggi non ho ancora capito come utilizzarlo in modalità HV.

Spiego meglio: devo realizzare un piccolo circuito con a bordo un Atmega328P, un quarzo esterno da 16 Mhz, 2 condensatori da 18pF, un convertitore usb/seriale, qualche ingresso analogico (quindi una sorta di Arduino semplificato "Standalone").

Gli unici problemi che mi ostacolano sono due:

1) come collegare AVR Dragon (schema, fili...) all'Atmega328P
2) quali fuse settare

Direi che intanto la cosa piu importante è capire come collegare l'AVR Dragon con l'Atmega, perchè ci sono diverse possibilità di collegamento, ma io vorrei usarne solo una o comunque quella idonea alla mia richiesta.
Ho comprato l'AVR Dragon perchè leggendo alcune recensioni è uno dei migliori hardware per la programmazione, per la protezione dei fuse, e soprattutto per il RIPRISTINO dei fuse (modalità HV) nei casi in cui si dovesse bloccare il microcontrollore a causa di errati settaggi dei fuse.

So gia che quando farò le prime prove di protezione sui FUSE...bloccherò l'Atmega328P, quindi per questo motivo ho comprato l'AVR Dragon, che dispone della modalità HV per ripristinare il corretto funzionamento del microcontrollore.
Però purtroppo non ho ancora capito quale è il collegamento da fare.
Ho gia dato un'occhiata al datasheet dell'AVR Dragon e per l'Atmega328P vengono soltanto riportate due tipologie di schemi e cioè:

SPI Programming and debugWIRE Debugging
Schema A.jpg
Schema A
Schema A.jpg (149.91 KiB) Viewed 16773 times


Parallel Programming

Schema B.jpg
Schema B
Schema B.jpg (146.38 KiB) Viewed 16773 times


So anche che sull'AVR Dragon è disponibile anche il connettore ISP per impostare i FUSE, ma credo che per abilitare/disabilitare particolari fuse (esempio: RESET, SPIEN...), sia necessario il collegamento HV e che, comunque, per ripristinare i microcontrollori bloccati..sia necessaria la modalità HV.
Come faccio ad usarla con il mio AVR Dragon?
Per programmare/proteggere in HV il mio Atmega328P, è sufficiente utilizzare il solo AVR Dragon collegato alla USB con AVR Studio 7, con l'Atmega328P a bordo sullo ZIF da 40PIN?
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby Just4Fun » 09 Dec 2017, 11:51

Per programmare l'Atmega ti basta la modalità ISP (schema A). Con questa potrai anche settare i FUSE/LOCK bits in futuro per attivare la protezione in lettura. Ma come prima prova cerca solo di programmare l'Atmega senza protezione...

La modalità HV (parallela o seriale) non è necessaria per settare i FUSE bits, ma serve ESCLUSIVAMENTE se fai un qualche errore e non riesci + ad usare la modalità ISP.

Mi sembra che tutto ciò ti era già stato spiegato qui. Cosa altro non ti è chiaro a qs punto... ? ;)
User avatar
Just4Fun
 
Posts: 153
Joined: 13 May 2016, 18:17

Re: Protezione Atmega328P

Postby simonpro » 09 Dec 2017, 12:20

Ciao Just4Fun,
Per programmare l'Atmega ti basta la modalità ISP (schema A). Con questa potrai anche settare i FUSE/LOCK bits in futuro per attivare la protezione in lettura

Quindi per utilizzare la modalità ISP, posso utilzzare due collegamenti differenti e cioè:

1) atmega328p a bordo ZIF di AVR Dragon (connesso alla usb) e ponticellare come nello schema A?
2) atmega328p a bordo Arduino (alimentato con usb), connesso con AVR Dragon (alimentato con usb) tramite cavo ISP a 6 poli?

Sono identici e posso usare uno qualsiasi dei due collegamenti oppure devo necessariamente utilizzarne uno in particolare?
Per programmare l'Atmega ti basta la modalità ISP (schema A). Con questa potrai anche settare i FUSE/LOCK bits in futuro per attivare la protezione in lettura

Quindi la modalità HV serve soltanto a ripristinare i fuse?
Quindi con la programmazione ISP posso anche settare i fuse RESET e SPIEN?
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby Just4Fun » 09 Dec 2017, 13:11

simonpro wrote:Sono identici e posso usare uno qualsiasi dei due collegamenti oppure devo necessariamente utilizzarne uno in particolare?

Direi di sì.

Come prima prova comunque utilizzerei lo zoccolo ZIF dell'AVR Dragon. Poi quando hai verificato che la programmazione è corretta proverei il secondo scenario (occhio a posizionare correttamente l'integrato nello ZIF...).
Poi, avendo verificato anche la seconda modalità, continuerei ad usare solo questa (giusto xchè è + comoda e non devi spostare fisicamente l'integrato...).




Quindi la modalità HV serve soltanto a ripristinare i fuse?
Quindi con la programmazione ISP posso anche settare i fuse RESET e SPIEN?

Se ben ricordo sì (attualmente uso gli STM32F103 come MCU che sono tutto un altro film...).
Ti conviene leggere BENE questo articolo prima di giocherellare con i FUSE bits. Considera che nell'articolo il tizio usa un Arduino nano come programmatore. Nel tuo caso qs non serve xchè hai l'AVR Dragon...

Inoltre quando il tizio dice di fare attenzione con certi FUSE bit xchè si può "brikkare" l'Atmega, in realtà nel tuo caso il problema sarebbe risolvibile usando la modalità HV dell'AVR Dragon (cosa ovviamente non possibile usando un Arduino come programmatore ISP, ma non tutti hanno un AVR Dragon... io infatti non ce l'ho... :mrgreen: ).
User avatar
Just4Fun
 
Posts: 153
Joined: 13 May 2016, 18:17

Re: Protezione Atmega328P

Postby simonpro » 09 Dec 2017, 14:18

Grazie Just4Fun, sei davvero gentilissimo e permettimi di dire pure che riesci a dare delle risposte facili da comprendere, senza creare confusione, quindi complimenti ;)

Si allora utilizzerò il collegamento con Atmega328P a bordo dello ZIF di AVR Dragon, seguendo lo schema del datasheet del programmatore e cioè lo "schema A".

Sicuramente dovrò smanettare molto i fuse e mi ritroverò a brikkare l'Atmega328P.

Ti chiedo: nel momento in cui io dovrò necessariamente ripristinare i fuse con la modalità HV di AVR Dragon, apparte i collegamenti che penso siano quelli dello "schema B", quale è la procedura per ripristinare l'Atmega?
Cioè, in parole povere: da AVR Studio,.....cosa dovrò fare, cliccare, scegliere, per ripristinare i fuse?
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby Just4Fun » 09 Dec 2017, 15:12

simonpro wrote:Cioè, in parole povere: da AVR Studio,.....cosa dovrò fare, cliccare, scegliere, per ripristinare i fuse?


ahi,ahi... qs è una procedura che non ho mai avuto necessità di eseguire...

Andando a naso:

1) inserire l'atmega brikkato nello zoccolo zif;
2) usare i collegamenti dello schema HV programming;
3) modificare i fuse bit da Atmel Studio dalla schermata "Device Programming" in modo da de-brikkare la MCU;
4) procedere alla programmazione;
5) verificare i fuse bit;
6) cambiare i collegamenti per la normale programmazione ISP e fare una prova.

Prima prova leggere qui x maggiori info (considera però che il tizio usa avrdude per pilotare l'AVR Dragon in HV, mentre tu vuoi usare AVR Studio...), e vediti anche questo video.

Good luck!
User avatar
Just4Fun
 
Posts: 153
Joined: 13 May 2016, 18:17

Re: Protezione Atmega328P

Postby simonpro » 09 Dec 2017, 15:32

Grazie Just4Fun, sei davvero bravo oltre che essere disponibilissimo, E soprattutto di persone come te che si rendono disponibili.. ce ne sono pochissime...

Due domande:

1) affinchè l'Atmega sia assolutamente BLINDATO, e quindi impossibile leggerne/copiarne/ il firmware, quali fuse devo programmare? (ho letto da qualche parte che bisogna agire sul fuse SPIEN e RESET).
2) so che l'Atmega al suo interno possiede una flash (quella dove risiede il firmware da proteggere), ma anche una EEprom. La EEprom è possibile pure proteggerla?

In poche parole, il firmware che devo mettere dentro all'Atmega, va nella Flash, ma alcuni dati vanno nella EEprom e risiedono li in maniera permanente fino a quando li modifico dietro opportuno programma o fino a quando non faccio un ERASE...
Inoltre so anche che pe una migliore protezione è necessario proteggere anche il Bootloader.

Dato che tu sei preparato e sei capce di spiegarti molto bene, vorrei da te capire meglio tutto questo.
Grazie mille
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby Just4Fun » 09 Dec 2017, 16:24

simonpro wrote:1) affinchè l'Atmega sia assolutamente BLINDATO, e quindi impossibile leggerne/copiarne/ il firmware, quali fuse devo programmare? (ho letto da qualche parte che bisogna agire sul fuse SPIEN e RESET).
2) so che l'Atmega al suo interno possiede una flash (quella dove risiede il firmware da proteggere), ma anche una EEprom. La EEprom è possibile pure proteggerla?


Non ho mai avuto necessità di attivare qs protezioni, e su temi così specifici sarebbe opportuno che ti studiassi molto attentamente il datasheet ed eventuali note applicative sull'argomento.
Procedere a tentoni non è raccomandabile in qs campo... ;)

A naso attiverei LB2 e LB1. Ricordati che "attivare" un FUSE o LOCK bit significa metterlo a "0", e resettarlo significa metterlo a "1"...

Se ben ricordo la protezione è solo in lettura, x cui puoi comunque sovrascrivere un nuovo programma.

RIPETO: studiati il datasheet e TUTTA la documentazione ufficiale che riesci a trovare sull'argomento...
User avatar
Just4Fun
 
Posts: 153
Joined: 13 May 2016, 18:17

Re: Protezione Atmega328P

Postby legacy » 09 Dec 2017, 21:56

Per reversare il codice servono strumenti costosi, tipo IDA! Il codice-macchina che esce da un compilatore ha dei pattern noti, modi con cui il compilatore e' solito gestire costrutti, modi che sono una firma per diversi sistemi operativi (MaCOS-classic, DOS, Windows, Android ...), modi che sono propri di una architettura (x86, arm, mips, ...), e modi che sono tipici di un compilatore (p.e. c'e' una immensa differenza tra gcc-arm e keil-arm).

Ho una vecchia v6 jappa con licenze m68k e MIPS, acquisita a Tokio ai mercatini assieme ad un laptop (come hai capito, recupero il software recuperando l'hw, e' il solo modo che conosco senza sconfinare nella pirateria)

IDA conosce tutte queste faccende, riconosce molti pattern, pero' sai cosa costa? 10K euro a licenza; ed io penso che chi ha 10 testoni da spendere in un reverser dubito che abbia bisogno del codice avr8 di tizio: semplicemente (senza offesa) perche' gli costa di meno svilupparsi il fw ex novo!

A meno che siano cinesi in agguato sulla baia, o che il fw sia una roba frutto di anni ed anni di ricerca e sviluppo, con la garanzia si venda come il pane!

In ogni se fare il DeAsm a mano e' un delirio (ne ho fatto un po' "wild-abandonware", tipica sotto classe del retrocomputer-vintage in EOL), anche con IDA serve tempo: questo il concetto! Il tool ti aiuta a riconoscere macro-costrutti ma i compilatori in -02 ed -O3 fanno tante di quelle ottimizzazioni da rendergliela dura.


Insomma, prima di settare il fuse io mi chiedo spesso se ne valga la pena, altrimenti ... lascio pure perdere :D
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Protezione Atmega328P

Postby simonpro » 10 Dec 2017, 12:26

Grazie legacy ;)

A proposito di firme...
Mi è capitato di imbattermi qualche mese fa in un argomento dove si discuteva di licenze e di "firma digitale".
Cosa si intende per "firma digitale"?

...Se non ricordo male qualcuno accennava che la firma digitale la puo applicare lo sviluppaore, direttamente sullo sketch... e che è invisibile :shock: :shock:

Cioè?....
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby legacy » 10 Dec 2017, 14:13

centra na cippalippa.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Protezione Atmega328P

Postby simonpro » 20 Dec 2017, 02:01

Ragazzi, ho fatto delle prove con AVR Dragon e Atmel Studio 7, per programmare/proteggere il mio Atmega328P-PU.
In un qualche modo credo che sono riuscito a proteggere da lettura il firmware grazie all'uso dei lock bit.

Successivamente ho voluto strafare e ho voluto modificare i fuse SPIEN e RESET.
Adesso l'Atmega non viene piu letto e non è neanche riconosciuto da modalità ISP.

So che con l'AVR Dragon è possibile sbloccare/sbrikkare gli Atmega brikkati a causa di errata programmazione dei fuse.

Ho provato ad eseguire sia lo schema A sia lo schema B postati in questo thread, ma non sono risucito a "resuscitare" l'Atmega.

I passi che ho fatto sono i seguenti:

1) ho effettuato le 2 prove con i collegati come in figura A e B
2) inserito l'Atmega nello ZIF 40 poli a bordo di AVR Dragon (con pin 1 in basso)
3) aperto Atmel Studio 7, TOOLS... Devise Programming
4) selezionato "AVR Dragon"..."atmega328p"..."HVPP"... Apply

in "target voltage" ho letto 5.0V (quindi non 12v... :? )

Ho tantato di mettere manualmente i valori dei fuse (quelli di default di un Atmega funzionante e senza protezioni), ma quando clicco di PROGRAM...mi esce un messaggio di errore e quindi non riesco a ripristinare l'Armega.

Qualcuno mi suggerisce come poter recuperare il funzionamento dell'Atmega in modalità HV?
Grazie mille a tutti
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby simonpro » 21 Dec 2017, 16:52

...nessuno conosce le modalità di funzionamento dell'HV di AVR Dragon?
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby simonpro » 10 Jan 2018, 15:38

Ciao ragazzi,

eccovi alcune foto del mio AVR Dragon con i fili in modalità HVPP.
Attachments
SAM_3158.JPG
SAM_3158.JPG (191.77 KiB) Viewed 16631 times
SAM_3157.JPG
SAM_3157.JPG (182.5 KiB) Viewed 16631 times
SAM_3156.JPG
SAM_3156.JPG (180.25 KiB) Viewed 16631 times
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby simonpro » 10 Jan 2018, 15:39

...altre foto
Attachments
SAM_3161.JPG
SAM_3161.JPG (188.06 KiB) Viewed 16631 times
SAM_3160.JPG
SAM_3160.JPG (204.15 KiB) Viewed 16631 times
SAM_3159.JPG
SAM_3159.JPG (190.17 KiB) Viewed 16631 times
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby simonpro » 10 Jan 2018, 15:39

..ancora una
Attachments
SAM_3162.JPG
SAM_3162.JPG (235.52 KiB) Viewed 16631 times
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby simonpro » 10 Jan 2018, 20:46

Altre due foto della parte BOTTOM
Attachments
SAM_3163.JPG
SAM_3163.JPG (236.07 KiB) Viewed 16628 times
SAM_3164.JPG
SAM_3164.JPG (245.03 KiB) Viewed 16628 times
simonpro
 
Posts: 16
Joined: 05 Dec 2017, 12:58

Re: Protezione Atmega328P

Postby Leonardo » 24 Jan 2018, 18:32

Ciao Simone,

Ho recuperato un Dragon ed un ATMEGA328 e ho fatto la procedura che hai descritto con un micro funzionante.

Modalità di programmazione HVPP e abilitazione del fuse RSTDISBL: Il micro non si è brickato subito e viene letto correttamente subito dopo la programmazione.

Ho notato però che ripetendo la lettura dell'ID ogni tanto non viene letto bene (device signature = 0xFFFFFF), dopodiché sistematicamente dopo circa 30 secondi dalla programmazione non viene letto piu nulla.

Il manuale del DRAGON nei Known Issues riporta:

High voltage programming issue, all targets: Parallel Programming and High Voltage Serial
Programming might not work if the startup time is set to 0ms (SUT fuses). The problem gets worse if the CKDIV8 fuse is not set

Quindi per usare la HVPP in modo affidabile bisognerebbe impostare un tempo di avvio del clock lungo.

Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Next

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 1 guest

cron