Protección de firmware en controladores AVR y PIC

¿Alguien puede extraer el archivo HEX que grabo en un microcontrolador que les proporciono?

Si eso es posible, ¿cómo puede alguien asegurarse de que su código esté protegido en los sistemas integrados? En el caso de los microcontroladores PIC y AVR, ¿cómo se puede proteger su firmware para que no se reproduzca?

En el caso n. ° 1, parece sugerir que proporcione el archivo hexadecimal a sus clientes, en ese caso, pueden escribirlo en varios dispositivos clonados, sin necesidad real de descompilar el código, aunque es posible. En el caso de un dispositivo bloqueado (n.º 2), por lo general se trata de qué tan decididos están a obtener el código (en otras palabras, cuánto están dispuestos a gastar), pero generalmente es posible.
solía ser de dos años, pero la protección en estos días tiende a ser vencida en un día o dos en promedio para los dispositivos populares. básicamente una vez que alguien ha decidido que vale la pena hacerlo. Si realmente desea la seguridad que necesita para entrar en el negocio de los chips, no obtendrá ninguno con piezas comerciales estándar.

Respuestas (2)

La mayoría de los microcontroladores en estos días tienen métodos específicos de piezas o fabricantes para proteger el código de firmware integrado. Esto generalmente se hace bloqueando los circuitos que normalmente permiten leer la memoria del código. (Tendrá que buscar los detalles específicos de la pieza en la hoja de datos o en el sitio web del fabricante en las notas de aplicación correspondientes).

Una vez bloqueada, no es posible leer la memoria del código usando técnicas normales. Esto proporciona un nivel razonable de protección para evitar que la mayoría de los piratas informáticos vean el código de máquina de su aplicación integrada.

Muchos dispositivos MCU en estos días tienen memoria FLASH integrada para almacenar el código del programa. Un programa previamente almacenado y protegido almacenado en FLASH generalmente se puede reemplazar con un código nuevo, pero se necesita una operación de borrado de FLASH de chip completo para desbloquear el mecanismo de protección. Una vez borrada, la pieza funcionará como lo hacía antes del bloqueo de protección original. Si se carga un nuevo programa, generalmente es posible volver a bloquear la pieza para proteger el código de máquina recién cargado.

Cualquier discusión sobre la protección de código en los microcontroladores no estaría completa sin mencionar que, por lo general, no hay garantía de que cualquier esquema de protección ofrecido por el fabricante de la pieza sea infalible. Los fabricantes incluso afirmarán que los sistemas de protección no son 100% infalibles. Una de las razones de esto es que existe toda una industria del mercado negro en la que, a cambio de una tarifa, los piratas informáticos diligentes leerán el código de una parte protegida para cualquiera que quiera pagar. Han ideado varios esquemas que permiten leer el código de las ROM o FLASH en microcontroladores protegidos. Algunos de estos esquemas son increíblemente inteligentes, pero funcionan con más éxito en algunas familias parciales que en otras. Así que tenga en cuenta este hecho y trate de proteger su programa de miradas indiscretas.

Una vez que alguien tiene en sus manos la imagen binaria del código de máquina que se ha leído de un microcontrolador, ya sea un microcontrolador protegido o no, puede procesar el código de máquina a través de una herramienta llamada desensamblador. Esto convertirá los datos binarios nuevamente en código de lenguaje ensamblador que se puede estudiar para tratar de aprender cómo funcionan los algoritmos de su programa. Hacer un desensamblado preciso del código de la máquina es un trabajo minucioso que puede requerir una gran cantidad de trabajo. Al final, el proceso puede conducir al código ensamblador como lo describí. Si su programa fue escrito en algún lenguaje de alto nivel como C, C++ o Basic, el código ensamblador solo representará el resultado compilado y vinculado de su programa. Por lo general, no es posible aplicar ingeniería inversa al código robado hasta el nivel de lenguaje de alto nivel.

Lo que esto significa es que en realidad hay un beneficio al escribir el firmware de su aplicación integrada en un lenguaje de alto nivel. Proporciona otra capa que dificulta la ingeniería inversa completa de su programa. Se puede obtener un beneficio aún mayor al utilizar compiladores de optimización de última generación para compilar la aplicación integrada porque los optimizadores de mayor rendimiento pueden literalmente convertir el programa en un enorme tazón de espagueti lleno de docenas de llamadas a subrutinas cortas que son muy difíciles. para descifrar en un desensamblador.

Los desarrolladores integrados más experimentados le dirán que siga adelante y use cualquier esquema de protección que se ofrezca en la MCU en su aplicación... pero que no dependa de él hasta el final del camino para su producto. Le dirán que la mejor manera de mantenerse por delante de la competencia es actualizar constantemente su producto para que las versiones anteriores estén desactualizadas y no sean interesantes en el momento en que los piratas informáticos puedan haber clonado su código. Cambie el código, agregue nuevas características, gire sus placas de PC de vez en cuando para intercambiar todas sus E/S y cualquier otra cosa que se le ocurra. De esta manera usted puede ganar la carrera cada vez.

Muchas gracias @Michael Karas Esa fue una respuesta completa

Creo que la respuesta de Michael es suficiente para esta pregunta, pero agrego estos dos enlaces: Hackear el PIC 18F1320 y Todo lo que hacen, ¡podemos romperlo! Estos dos fueron muy interesantes para mí.

El EE diligente debe estudiar ese último enlace e investigar/comparar/seleccionar los dispositivos que faltan en la lista. La complejidad siempre es más disuasiva, como agregar un DS3641 o ATSHA204 . Aunque ninguna seguridad adicional será nunca 100 % irrompible, la complejidad adicional podría hacer que no valga la pena.