É possível extrair código de uma placa do arduino?

14

Existe uma maneira de exportar código para um arduino mesmo como um arquivo hexadecimal?

xkrpz
fonte
2
Sim, usando avrdude na linha de comando, a menos que o fusível de segurança tenha sido definido. Pode até ser possível, mas intencionalmente muito mais difícil, e não está claro se alguém já derrotou esse mecanismo de segurança.
Chris Stratton
@ChrisStratton Eu estava ouvindo uma palestra do defcon onde eles conversaram sobre como tinha sido derrotado. Não me lembro qual era, mas o Google pode se lembrar.
Hair_of_the_Dog
Foi derrotado para alguns microcontroladores, e ainda não (pelo menos para o conhecimento público, sem dissecção física) para outros.
precisa
Sim, tenho certeza que foi dissecado.
Hair_of_the_Dog

Respostas:

7

Examinando o código-fonte dos gerenciadores de inicialização do Arduino em https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders , parece que eles realmente suportam a funcionalidade de leitura do stk500 para memória flash, para que você possa alcance seu objetivo com um programa cliente como o avrdude.

Portanto, a resposta para a pergunta é que, se você puder acessar o carregador de inicialização, sim, poderá ler o conteúdo da memória flash em formato binário ou hexadecimal, sem recorrer a um programador externo.

Se você não puder acessar o carregador de inicialização (redefinir problemas ou nenhum carregador de inicialização intacto presente), poderá fazê-lo com um programador externo, desde que as configurações do fusível de segurança não o impeçam.

Chris Stratton
fonte
1
Acontece que não apenas o readback é suportado, mas o avrdudecomportamento de verificação padrão depende dele, pois ele lê um buffer e faz uma comparação no PC. Portanto, essencialmente, qualquer pessoa que já tenha carregado código em um Arduino baseado no ATmega, permitindo que o IDE invoque avrdudecom a configuração padrão, também implicitamente leu um.
22418 Chris Stratton
5

Sim, puxei com êxito o kernel de inicialização de uma placa Arduino via ISCP e a instalei em outra. Os fusíveis de segurança não foram definidos. onde avrdude irá funcionar. Naquela época, eu usava o AVR Studio com um STK500, pois tinha uma GUI e não precisava aprender todas as opções avrdude. Qualquer um vai funcionar.

A configuração do fusível derrota o código aberto. Dito isto, o kernel de inicialização é fornecido no IDE. .. \ Arduino \ hardware \ arduino \ bootloaders \ atmega8 \ ATmegaBOOT.hex junto com outros chips variantes.

mpflaga
fonte