La mayoría de los microcontroladores en estos días tienen métodos específicos de parte o del fabricante para proteger el código de firmware incorporado. Esto generalmente se realiza bloqueando los circuitos que normalmente permiten leer la memoria de código. (Deberá buscar 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 bloqueado, no es posible leer la memoria del código utilizando técnicas normales. Esto proporciona un nivel razonable de protección para evitar que la mayoría de los hackers vean el código de la máquina para su aplicación integrada.
En la actualidad, muchos dispositivos MCU 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 nuevo código, 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 hizo 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 microcontroladores no estaría completa sin mencionar que generalmente no hay garantía de que ningún esquema de protección ofrecido por el fabricante de la pieza sea infalible. Los fabricantes incluso declararán que los sistemas de protección no son 100% infalibles. Una de las razones de esto es que hay toda una industria del mercado negro donde, por una tarifa, los hackers 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 para tener más éxito en algunas familias que en otras. Así que tenga en cuenta este hecho y luego intente proteger su programa de miradas indiscretas.
Una vez que alguien tiene en sus manos la imagen binaria del código de la máquina que ha sido leída de un microcontrolador, ya sea que se trate de un microcontrolador protegido o no, puede procesar el código de la 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 desmontaje preciso del código de la máquina es un trabajo minucioso que puede requerir grandes cantidades de trabajo. Al final, el proceso puede conducir al código del ensamblador como lo describí. Si su programa fue escrito en algún lenguaje de alto nivel como C, C ++ o Basic, el código de ensamblaje solo representará el resultado compilado y vinculado de su programa. Por lo general, no es posible realizar ingeniería inversa del 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 que su programa tenga ingeniería inversa completa. Se puede obtener un beneficio aún mayor al utilizar el estado de la técnica más avanzado en la optimización de compiladores para compilar la aplicación incrustada porque los optimizadores de rendimiento más altos pueden literalmente convertir el programa en un enorme recipiente de espagueti lleno de docenas de llamadas a subrutinas cortas que son muy difíciles 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 ofrece en el 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 a la vanguardia de la competencia es actualizar constantemente su producto para que las versiones anteriores estén desactualizadas y no sean interesantes cuando los piratas informáticos hayan clonado su código. Cambie el código, agregue nuevas funciones, gire las placas de su PC de vez en cuando para intercambiar todas sus E / S y cualquier otra cosa que pueda pensar. De esta manera puedes ganar la carrera cada vez.