Sencillo pero eficiente programa Anti Copia para nuestros proyectos con ESP32.
Proteger un ESP32 por medio del Secure Boot y claves digitales es un proceso complicado, así que realicé un programa que en realidad es muy sencillo pero bastante seguro y confiable.
Aplicando esto a nuestro programa, ya no se podrá ejecutar en otro chip si es que realizan una copia de la memoria SPI Flash.
Se basa en que cada chip o SOC tiene grabada de fábrica una dirección MAC que no se puede borrar ni sobreescribir.
Viendo esta característica, la aproveché para realizar este método de protección anti copia.
Una de las peores cosas que un programador puede hacer es, guardar claves como cadenas.
Las cadenas son visibles con un editor hexadecimal, así que esto de ninguna forma es conveniente.
Por ejemplo:
Código:
Private Const MyUniqueID As String = "083AF28E3410"
Buscando un poco podremos encontrar la cadena mágica.
Como la MAC o ID del chip siempre serán 6 bytes, se pueden reemplazar sin problemas.
Y aunque esto sea posible, la imagen generada (compilada) también cuenta con verificación.
Así que tampoco será fácil engañar a esptool durante el proceso de grabado.
Sin embargo, y para reforzar aún más la seguridad, opté por guardar el identificador del chip en un arreglo del tipo byte.
Código:
Dim MyID(6) As Byte
MyID(0) = 0x08
MyID(1) = 0x3A
MyID(2) = 0xF2
MyID(3) = 0x8E
MyID(4) = 0x34
MyID(5) = 0x10
Con esto ya no se podrá encontrar con un editor hexadecimal nada relacionado al identificador.
Por más que se busque no se encontrará, además de que no se sabrá qué buscar, ya que cada chip tiene una MAC diferente.
El ejemplo que adjunto únicamente funciona con los ESP32, para los ESP01, ESP12, etc, basados en el ESP8266, se tendrá que usar otro método usando InLine C y con la librería UniqueID de Arduino.
Como esto ya es otra historia, lo dejaré pendiente para más tarde, o en lo que me llega la inspiración.
Mientras tanto, adjunto el ejemplo y la librería usada para este propósito.