Offline
Newbie
Karma: 0
Posts: 36
|
 |
« on: December 06, 2012, 10:25:27 am » |
Salve mi chiamo Stefano e sono nuovo utente del forum, sarei infinitamente grato se qualcuno riesce a darmi qualche consiglio su come proteggere da lettura il mio arduino mega 2560. Chiedo questo perché sto lavorando su un progetto e mi è stato chiesto di rendere il codice non clonabile. Mi sono documentato un po per quello che sono riuscito a capire, ci sono due byte chiamati high fuse e low fuse, e un byte chiamato lock, che servono a questo scopo. Questi byte sono impostabili nel file board e vengono modificati attraverso il caricamento del bootloader, correggetemi se sbaglio. Ho fatto alcuni tentativi di caricamento del bootloader tramite un arduino utilizzato come programmatore isp e uno utilizzato come target, ho seguito passo passo la guida del professor Michele Menniti ma non sono riuscito ad effettuare l'operazione di caricamento. Per la programmazione isp ho individuato anche un programmatore specifico , che è l' avr pololu. Mi consigliate di acquistare un programmatore o la cosa è fattibile anche utilizzando arduino come programmatore? Ogni risposta e ben accetta!!!
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1054
http://cesarecacitti.wordpress.com/
|
 |
« Reply #1 on: December 06, 2012, 02:09:17 pm » |
Questo argomento è già stato trattato, e avevamo detto che arduino è un progetto opensource e quindi il codice deve essere libero e non chiuso. Se vuoi bloccare il codice ti consiglio di usare un altra piattaforma non opensource. (visto che oggi sono felicissimo, ti dò una dritta, anzi, delle parole chiave: avrdude e lock bits) Ciaoooo
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #2 on: December 06, 2012, 02:23:56 pm » |
Premessa: parliamo di FIRMWARE. Il sorgente se non lo distribuisci, non è clonabile. Il FIRMWARE può essere estratto da un microcontrollore e riflashato pari pari. Puoi anche disassemblarlo per recuperare il programma sotto forma di linguaggio macchina (assembly), ma non puoi riottenere in alcun modo il sorgente in linguaggio C/Arduino. Detto questo, esistono alcuni registri interni chiamati fuse ed altri chiamati lock bit. I lock bit possono bloccare l'accesso alla memoria, ma in lettura. Ti consiglio la lettura di questo doc: http://www.avrfreaks.net/index.php?func=viewItem&item_id=301&module=Freaks%20ToolsCon i lock bit il codice non può più essere estratto dal microcontrollore. Poi puoi ulteriormente bloccare il chip anche in scrittura, disattivando ad esempio la programmazione SPI ed il pin di reset. Ti consiglio questo sito: http://www.engbedded.com/fusecalcPuoi così trovare i valori per i fuse da impostare. Occhio che se disattibi il pin di reset, poi ti serve un programmatore detto "H/V" (alta tensione, anche se poi sono 12V) per poterlo sbloccare.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #3 on: December 06, 2012, 03:24:26 pm » |
... sono interessanti i metodi che ha descritto leo... però sono molto giuste le cose che ha detto cece.
Nel mio lavoro c'è un noto produttore di macchine (il più grande probabilmente) che si fa fare normali inverter(ed altro) con firmware proprietario in modo da poter rivendere solo i suoi ricambi...ma io quando prendo una macchina la compro tutta hardware e software e non faccio anche un programma di assistenza obbligatorio a vita... inoltre, dato che le macchine costano diverse centinaia di migliaia di euro e pesano diverse tonnellate trovo abbastanza ridicoli quelli che ti montano le chiavette hardware o 'ste cavolate: per Dio hai una chiave Hardware da 100 quintali attaccata al tuo software: che te ne fai del sofware senza la macchina? quindi indovina quante macchine ho di questa ditta? conviene? e quindi tornando alla tua richiesta: sicuro che valga la pena rischiare di far incazzare il cliente dato che tanto il sorgente non lo recuperi comunque?
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7379
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #4 on: December 06, 2012, 04:01:09 pm » |
e quindi tornando alla tua richiesta: sicuro che valga la pena rischiare di far incazzare il cliente dato che tanto il sorgente non lo recuperi comunque?
Dipende dal prodotto, può anche fregartene di non avere il sorgente se puoi recuperare l'eseguibile dal micro e poi riproduci l'hardware, col firmware copiato, e lo rivendi sotto costo perché prodotto in cina. Ogni tanto sarebbe il caso di ragionare su quello che si dice in merito al copyright e al diritto di non farsi copiare il proprio lavoro. Non credo che saresti molto contento se, dopo aver sudato le proverbiali sette camice per realizzare un prodotto, arriva il cinesino di turno che ti copia tutto e lo rivende a metà prezzo facendo fallire la tua azienda.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #5 on: December 06, 2012, 04:06:36 pm » |
@qsecofr: quel che dici può anche essere condivisibile, ma allora dovremmo estendere il discorso molto di più. Evito quindi di entrare nel merito altrimenti finisce in flame  Attenti che poi parliamo di un core software, quello di Arduino, che è sotto licenza GPL, ma questa non preclude il lucro, nel senso che io posso richiedere un compenso per il software prodotto, sono solo obbligato a ridistribuirlo sotto GPL ma non è scritto da nessuna parte che lo devo fare gratuitamente. Torniamo a noi. Fischio85 ha esordito così: sto lavorando su un progetto e mi è stato chiesto di rendere il codice non clonabile.
Per me può benissimo lavorare a progetto e quindi questa è la richiesta del committente. Dato che è il committente che paga, se gli viene chiesto come proteggere da lettura il micro lui deve proteggere da lettura il micro. EDIT: postato insieme ad astrobeed, a cui mi associo al discorso relativo alla clonatura del firmware per la riscrittura su migliaia di copie del tuo dispositivo.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 7
Posts: 293
|
 |
« Reply #6 on: December 06, 2012, 04:55:25 pm » |
...be ero/sono programmatore... non più ma prendevo anche soldi col lavoro che facevo e so cosa significa tutela del software ma siccome qui si sta parlando di un arduino pensavo - forse sbagliando - che 1) ci fosse anche tutto un workaround di hardware accanto che "diluisce" di molto l'incidenza in euro del software 2) il software fosse tutto sommato "semplice" 3) il progetto fosse limitato a "uno o comunque pochi arduino" (magari se hai una scheda da vendere in migliaia di copie non usi arduino ma ti fai fare il tuo pcb con il tuo atmel eccetera) pertanto ho portato ANCHE un altro punto di vista...sarà poi "fischio" a decidere se la mia casistica che ho portato a puro titolo di esempio sia lontana o vicina al lavoro che sta facendo
|
|
|
|
« Last Edit: December 06, 2012, 05:08:14 pm by qsecofr »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #7 on: December 07, 2012, 05:25:42 am » |
Vi ringrazio per le informazioni! Lo so che arduino è openSource ma purtroppo quando sono entrato a lovorare su questo progetto era gia stato improntato in questo modo ed ora non ho altra scelta che portarlo a termine. Non mi è chiara ancora una cosa, per programmare arduino con avrdude posso avvalermi di un altro arduino o devo utilizzare un programmatore come quello che ho menzionanto nel primo post. Forse faccio domande banali ma per me non lo sono 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #8 on: December 07, 2012, 09:05:36 am » |
Se hai a disposizione un Arduino UNO puoi programmare i fuse dell'Arduino MEGA con la prima scheda seguendo la guida del Menniti. Se qualcosa non ha funzionato, è stato sicuramente per un tuo sbaglio perché la guida è a prova di bomba  Che parametri hai passato ad avrdude sul terminale per impostare i fuse dell'Atmega2560?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #9 on: December 07, 2012, 10:07:32 am » |
Diciamo che sto iniziando a capirci qualcosa adesso e non ho ancora utilizzato avrdude per programmare i fuse bit. Praticamente ho due arduino mega 2560 dei quali uno sembra non funzionare più, quando faccio il caricamento di uno sketch non si accendono più i led tx ed rx, cosi ho provato a seguire la guida di Menniti per fare il burn del bootloader tramite la programazione avrisp. Ho collegato i due arduini con il connettore isp come spiegato sempre nella guida, ma mi da errori e non riesco ad effettuare neanche questo tipo di operazione. Ho aggiunto anche il condensatore da 10 micro al pin di reset ma nulla è cambiato. Forse ho un arduino che non funziona più a sto punto,o semplicemente sto sbagliando qualcosa.  Se riuscissi ad effettuare questa operazione potrei passare alla programmazione dei fuse bit, anche perchè con un solo arduino funzionante non riesco a programmare nulla. Ti chiedo una cosa che comando devo utilizzre per fare l'erase del arduino "rotto" tramite avrdude senza passare dall' IDE? Leo ti ringrazio per le dritte che mi stai dando
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #10 on: December 07, 2012, 10:15:20 am » |
Diciamo che sto iniziando a capirci qualcosa adesso e non ho ancora utilizzato avrdude per programmare i fuse bit. Praticamente ho due arduino mega 2560 dei quali uno sembra non funzionare più, quando faccio il caricamento di uno sketch non si accendono più i led tx ed rx, cosi ho provato a seguire la guida di Menniti per fare il burn del bootloader tramite la programazione avrisp. Ho collegato i due arduini con il connettore isp come spiegato sempre nella guida, ma mi da errori e non riesco ad effettuare neanche questo tipo di operazione. Ho aggiunto anche il condensatore da 10 micro al pin di reset ma nulla è cambiato.
Una domanda. Hai adattato i pin per l'uso con la MEGA? Sulla UNO che programma si usano i pin 10/11/12/13 come uscite per i segnali diretti verso l'altra scheda ma sulla MEGA i pin cambiano. http://www.instructables.com/id/How-to-use-Arduino-Mega-2560-as-Arduino-isp/Forse ho un arduino che non funziona più a sto punto,o semplicemente sto sbagliando qualcosa.  Se riuscissi ad effettuare questa operazione potrei passare alla programmazione dei fuse bit, anche perchè con un solo arduino funzionante non riesco a programmare nulla. Ti chiedo una cosa che comando devo utilizzre per fare l'erase del arduino "rotto" tramite avrdude senza passare dall' IDE? Leo ti ringrazio per le dritte che mi stai dando Per azzerare una scheda basterebbe dare avrdude -c stk500v1 -p m2560 -P /dev/ttyACM0 -b 19200 -e "-c" specifica il programmatore, stk500v1 è l'Arduino; "-p" indica il micro da programmare "-P" la porta da usare "-b" la velocità di comunicazione (usando l'ArduinoISP la velocità deve essere sempre 19200)
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #11 on: December 07, 2012, 10:31:10 am » |
Ho provato la linea di codice che mi hai dato e mi ha dato questo output:
C:\Users\stefano>avrdude -c stk500v1 -p m2560 -P /dev/ttyACMO -b 19200 -e avrdude: ser_open(): can't open device "/dev/ttyACMO": The system cannot find th e path specified.
Ho modificato la porta che mi avevi scritto tu con la COM3 e questo è stato il risultato:
C:\Users\stefano>avrdude -c stk500v1 -p m2560 -P COM3 -b 19200 -e avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude done. Thank you.
Secondo te l'erase è andato a buon fine? connettendo l'aruino all' usb ho il lead L che lampeggia e non mi fa caricare nulla, ha lo stesso comportameno che aveva prima di fare l'erase con avrdude!!!
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16509
Don't know what I do
|
 |
« Reply #12 on: December 07, 2012, 10:37:11 am » |
Secondo te l'erase è andato a buon fine? Sicuramente no.
Ma hai collegato l'Arduino MEGA programmatore e l'altro Arduino MEGA come è mostrato nel link che ti ho dato? Anzi, dimmi tu: come hai le schede?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #13 on: December 07, 2012, 10:38:38 am » |
Questo è quello che ho ottenuto con il condensatore di reset che non avevo inserito nella prova precedente!!
C:\Users\stefano>avrdude -c stk500v1 -p m2560 -P COM3 -b 19200 -e
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 1.94s
avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
avrdude done. Thank you.
Come prima lampeggia sempre il led L.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 36
|
 |
« Reply #14 on: December 07, 2012, 10:51:03 am » |
c'è lo fatta  l'arduino è vivo!!! grazie mille,il prossimo passo e modificare i fuse grazie ancora per le dritte. Appena mi ci metto ti faccio sapere come va:) sono stra contento!!!
|
|
|
|
|
Logged
|
|
|
|
|
|