是否可以从arduino板上提取代码?


14

有没有一种方法可以将arduino的代码导出为十六进制文件?


2
是的,除非已设置安全保险丝,否则请从命令行使用avrdude。那时甚至有可能,但故意要困难得多,尚不清楚是否有人击败了该安全机制。
克里斯·斯特拉顿

@ChrisStratton我在听defcon谈话时,他们谈论了它如何被击败。我不记得是哪一个,但Google可能还记得。
Hair_of_the_Dog 2013年

对于某些微控制器,它已经被击败,而对于其他微控制器,它却没有(至少由于公众的了解,没有解剖)。
克里斯·斯特拉顿

是的,我很确定它已经解剖了。
Hair_of_the_Dog

Answers:


7

https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders中仔细查看Arduino引导加载程序的源代码,看来它们确实支持闪存的stk500回读功能,因此您可以使用诸如avrdude之类的客户端程序来实现您的目标。

因此,问题的答案是,如果您可以访问引导加载程序,那么可以,您可以以二进制或十六进制格式读取闪存的内容,而无需借助外部编程器。

如果无法访问引导加载程序(重置故障或不存在完整的引导加载程序),则可以使用外部编程器进行此操作,但前提是安全熔丝设置不能防止这种情况发生。


1
事实证明,不仅支持回读,默认avrdude验证行为还依赖于回读,因为它可以通过回读缓冲区并在PC上进行比较来工作。因此,从本质上讲,曾经通过avrdude使用默认配置让IDE调用将代码上传到基于ATmega的Arduino的任何人,也都隐式地读出了代码。
克里斯·斯特拉顿

5

是的,我已经通过ISCP成功地从一个Arduino开发板中提取了启动内核,并将其推入了另一个内核中。未设置安全保险丝。avrdude将在哪里工作。那时,我将AVR Studio与STK500一起使用,因为它具有GUI,并且不需要学习所有的avrdude开关。两者都会起作用。

设置保险丝会破坏开源。也就是说,IDE中提供了启动内核。.. \ Arduino \ hardware \ arduino \ bootloaders \ atmega8 \ ATmegaBOOT.hex以及其他变体芯片。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.