Ist es möglich, Code von einem Arduino-Board zu extrahieren?

13

Gibt es eine Möglichkeit, Code für ein Arduino auch als Hex-Datei zu exportieren?

xkrpz
quelle
2
Ja, mit avrdude von der Befehlszeile aus, es sei denn, die Sicherheitssicherung wurde gesetzt. Es könnte sogar möglich sein, aber absichtlich viel schwieriger, und es ist nicht klar, ob jemand diesen Sicherheitsmechanismus bereits besiegt hat.
Chris Stratton
@ChrisStratton Ich hörte mir einen defcon-Vortrag an, in dem sie darüber sprachen, wie es besiegt worden war. Ich kann mich nicht erinnern, welches es war, aber Google könnte sich erinnern.
Hair_of_the_Dog
Es ist für einige Mikrocontroller besiegt worden und für andere noch nicht (zumindest nach öffentlichem Wissen, ohne physische Dissektion).
Chris Stratton
Ja, ich bin mir ziemlich sicher, dass es seziert wurde.
Hair_of_the_Dog

Antworten:

7

Durch Durchsuchen des Quellcodes der Arduino-Bootloader unter https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders scheint es, dass sie tatsächlich die stk500-Rücklesefunktion für Flash-Speicher unterstützen, so dass Sie dies können Erreichen Sie Ihr Ziel mit einem Client-Programm wie avrdude.

Die Antwort auf die Frage lautet also: Wenn Sie auf den Bootloader zugreifen können, können Sie den Inhalt des Flash-Speichers im Binär- oder Hex-Format auslesen, ohne auf einen externen Programmierer zurückgreifen zu müssen.

Wenn Sie nicht auf den Bootloader zugreifen können (Probleme beim Zurücksetzen oder kein intakter Bootloader vorhanden), können Sie dies möglicherweise mit einem externen Programmierer tun, sofern die Einstellungen für die Sicherheitssicherung dies nicht verhindern.

Chris Stratton
quelle
1
Es stellt sich heraus, dass nicht nur das Rücklesen unterstützt wird, sondern dass das standardmäßige avrdudeÜberprüfungsverhalten davon abhängt, wie es funktioniert, indem ein Puffer zurückgelesen und ein Vergleich auf dem PC durchgeführt wird. Im Grunde genommen hat also jeder, der jemals Code auf ein ATmega-basiertes Arduino hochgeladen hat, indem er die IDE avrdudemit der Standardkonfiguration aufrufen ließ , implizit einen Code ausgelesen.
Chris Stratton
5

Ja, ich habe den Boot-Kernel erfolgreich über ISCP von einem Arduino Board gezogen und in ein anderes verschoben. Die Sicherungen wurden nicht gesetzt. wo avrdude arbeiten wird. Damals verwendete ich AVR Studio mit einem STK500, da es eine GUI hatte und ich nicht alle avrdude-Schalter lernen musste. Beides wird funktionieren.

Durch das Einstellen der Sicherung wird Open Source ausgeschaltet. Der Boot-Kernel wird jedoch in der IDE bereitgestellt. .. \ Arduino \ Hardware \ Arduino \ Bootloader \ atmega8 \ ATmegaBOOT.hex zusammen mit anderen Chipvarianten.

mpflaga
quelle