Est-il possible d'extraire du code d'une carte Arduino?

14

Existe-t-il un moyen d'exporter du code pour un arduino même sous forme de fichier hexadécimal?

xkrpz
la source
2
Oui, en utilisant avrdude à partir de la ligne de commande, sauf si le fusible de sécurité a été défini. Il pourrait même être possible alors, mais intentionnellement beaucoup plus difficile, et il n'est pas clair si quelqu'un a encore vaincu ce mécanisme de sécurité.
Chris Stratton
@ChrisStratton J'écoutais un discours de défcon où ils parlaient de la façon dont il avait été vaincu. Je ne me souviens pas lequel c'était, mais Google se souvient peut-être.
Hair_of_the_Dog
Il a été vaincu pour certains microcontrôleurs et pas (du moins à la connaissance du public, à court de dissection physique) pour d'autres.
Chris Stratton du
Ouais, je suis quasiment sûr qu'il a été disséqué.
Hair_of_the_Dog

Réponses:

7

En parcourant le code source des chargeurs de démarrage Arduino à https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders, il semble qu'ils prennent en charge la fonctionnalité de relecture stk500 pour la mémoire flash, de sorte que vous pouvez atteindre votre objectif avec un programme client tel que avrdude.

Donc, la réponse à la question est que si vous pouvez accéder au chargeur de démarrage, alors oui, vous pouvez lire le contenu de la mémoire flash au format binaire ou hexadécimal, sans avoir recours à un programmeur externe.

Si vous ne pouvez pas accéder au chargeur de démarrage (problèmes de réinitialisation ou absence de chargeur de démarrage intact), vous pourrez peut-être le faire avec un programmeur externe, à condition que les paramètres de fusible de sécurité ne l'empêchent pas.

Chris Stratton
la source
1
Il s'avère que non seulement la relecture est prise en charge, le avrdudecomportement de vérification par défaut en dépend car il fonctionne en relisant un tampon et en effectuant une comparaison sur le PC. Donc, essentiellement, quiconque a déjà téléchargé du code sur un Arduino basé sur ATmega en laissant l'appel IDE avrdudeavec la configuration par défaut, en a également implicitement lu un.
Chris Stratton
5

Oui, j'ai réussi à retirer le noyau de démarrage d'une carte Arduino via ISCP et à le pousser dans une autre. Les fusibles de sécurité n'étaient pas installés. où avrdude fonctionnera. À l'époque, j'utilisais AVR Studio avec un STK500 car il avait une interface graphique et je n'avais pas besoin d'apprendre tous les commutateurs avrdude. Soit fonctionnera.

Le réglage du fusible annule l'open source. Cela dit, le noyau de démarrage est fourni dans l'IDE. .. \ Arduino \ hardware \ arduino \ bootloaders \ atmega8 \ ATmegaBOOT.hex avec d'autres variantes de puces.

mpflaga
la source