17 votos

¿Es posible extraer código de una placa de Arduino?

¿Existe alguna manera de exportar código para un Arduino incluso como un archivo hex?

2 votos

Sí, utilizando avrdude desde la línea de comandos, a menos que se haya establecido el fusible de seguridad. Incluso podría ser posible en ese caso, pero intencionalmente mucho más difícil, y no está claro si alguien ha logrado superar ese mecanismo de seguridad.

0 votos

@ChrisStratton Estaba escuchando una charla de defcon donde hablaban sobre cómo había sido derrotado. No puedo recordar cuál era, pero Google tal vez sí.

0 votos

Se ha logrado vulnerar la seguridad de algunos microcontroladores, y no (al menos que se sepa públicamente, salvo mediante disección física) aún de otros.

8voto

Andrew Walker Puntos 9038

Al revisar el código fuente de los bootloaders de Arduino en https://github.com/arduino/Arduino/tree/master/hardware/arduino/bootloaders parece que en realidad admiten la funcionalidad de lectura stk500 para la memoria flash, por lo que puedes lograr tu objetivo con un programa cliente como avrdude.

Entonces, la respuesta a la pregunta es que si puedes acceder al bootloader, entonces sí puedes leer el contenido de la memoria flash en formato binario o hexadecimal, sin necesidad de recurrir a un programador externo.

Si no puedes acceder al bootloader (problemas de reinicio, o no hay un bootloader íntegro presente) entonces es posible que puedas hacerlo con un programador externo, siempre que la configuración de las fuses de seguridad no lo impida.

2 votos

Result: Resulta que no solo se admite la lectura, el comportamiento de verificación por defecto de avrdude depende de ella ya que funciona leyendo un búfer y comparándolo en la PC. Por lo tanto, esencialmente, cualquier persona que haya subido código a un Arduino basado en ATmega dejando que el IDE invoque avrdude con la configuración por defecto, también ha leído implícitamente uno.

7voto

mpflaga Puntos 1047

Sí, he logrado extraer con éxito el kernel de arranque de una placa de Arduino a través de ISCP y lo he cargado en otra. Los fusibles de seguridad no estaban configurados donde avrdude funcionará. En aquel entonces usaba AVR Studio con un STK500 ya que tenía una interfaz gráfica y no necesitaba aprender todos los interruptores de avrdude. Cualquiera funcionará.

Configurar el fusible va en contra del código abierto. Dicho esto, el kernel de arranque se proporciona en el IDE. ..\Arduino\hardware\arduino\bootloaders\atmega8\ATmegaBOOT.hex junto con otros chips variantes.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X