È possibile estrarre il codice da una scheda arduino?


14

C'è un modo per esportare il codice per un arduino anche come file esadecimale?


2
Sì, utilizzando avrdude dalla riga di comando, a meno che non sia stato impostato il fusibile di sicurezza. Potrebbe anche essere possibile allora, ma intenzionalmente molto più difficile, e non chiaro se qualcuno ha ancora sconfitto quel meccanismo di sicurezza.
Chris Stratton,

@ChrisStratton Stavo ascoltando un discorso sul defcon in cui parlavano di come fosse stato sconfitto. Non ricordo quale fosse, ma Google potrebbe ricordare.
Hair_of_the_Dog

È stato sconfitto per alcuni microcontrollori e non (almeno a conoscenza del pubblico, a corto di dissezione fisica) ancora per altri.
Chris Stratton,

Sì, sono abbastanza sicuro che sia stato sezionato.
Hair_of_the_Dog

Risposte:


7

Esaminando il codice sorgente dei bootloader di Arduino su https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders sembra che in effetti supportino la funzionalità di lettura stk500 per la memoria flash, in modo tale da poter raggiungere il tuo obiettivo con un programma client come avrdude.

Quindi la risposta alla domanda è che se puoi accedere al bootloader, allora sì puoi leggere il contenuto della memoria flash in formato binario o esadecimale, senza ricorrere a un programmatore esterno.

Se non è possibile accedere al bootloader (ripristinare i problemi o non è presente alcun bootloader intatto), è possibile farlo con un programmatore esterno, a condizione che le impostazioni dei fusibili di sicurezza non lo impediscano.


1
Si scopre che non solo è supportato il readback, ma il avrdudecomportamento di verifica predefinito si basa su di esso mentre funziona rileggendo un buffer ed eseguendo un confronto sul PC. Quindi, in sostanza, chiunque abbia mai caricato codice su un Arduino basato su ATmega lasciando invocare l'IDE avrdudecon la configurazione predefinita, ne ha anche implicitamente letto uno.
Chris Stratton,

5

Sì, ho estratto con successo il kernel di avvio da una scheda Arduino tramite ISCP e l'ho inserito in un altro. Le micce di sicurezza non sono state impostate. dove avrdude funzionerà. All'epoca utilizzavo AVR Studio con un STK500 poiché aveva una GUI e non avevo bisogno di imparare tutti gli switch avrdude. O funzionerà.

L'impostazione del fusibile disattiva l'open source. Detto questo, il kernel di avvio è fornito nell'IDE. .. \ Arduino \ hardware \ arduino \ bootloaders \ atmega8 \ ATmegaBOOT.hex insieme ad altri chip varianti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.