Se supone que se le tiene que poner un ID o número de serie a cada micro, entonces si comercializas 1000 unidades tendrías que generar un firmware con el número de serie de cada cliente que te solicite la ampliación,
No, el firmware siempre es el mismo, no cambia. Lo que se hace es darle al cliente un fichero de texto o binario con una clave de activación personalizada para su placa, basada en el numero de serie del microcontrolador de su placa, que es único. Ese archivo (almacenado en una tarjeta micro SD), el firmware lo lee al arrancar, comprueba la clave y activa las funciones que el cliente haya comprado.
En cuanto al numero de seríe único, lo mejor es trabajar con microcontroladores, que ya lo lleven grabado de fábrica, practicamente todos los ARM llevan su ID único.
Si optas por micros que no lleven número de serie, lo tienes un poco más complicado. En mi bootloader para PIC32, el firmware del bootloader lo grababa en todas las placas en estado "virgen", sin número de serie ni de producto, tampoco permitía cargar la aplicación de usuario hasta inicializarlo. Al arrancar cada placa por primera vez, le ponía al producto una tarjeta SD con un fichero master de inicialización que contenía una clave y un contador, el bootloader leía ese archivo, cogía el numero de serie (contador), lo grababa en la flash del micro y actualizaba el archivo master incrementando en uno el contado de número de serie. Así usaba ese mismo archivo para inicializar todas las placas con un identificador único que se iba incrementando automáticamente.
¿y si un cliente vende su equipo a otro usuario y este último quiere actualizar, cómo sabría yo que número de serie es el del equipo?, ¿se le serigrafía el número de ID en la PCB o cómo sería? y si es así ¿alguien no podría pillar el firmware que va dirigido a otro usuario y por medio de un editor Hex cambiar ese número de serie por el de su equipo?
Para saber el número de serie del equipo, pues hay varias formas. Por ejemplo en uno de mis productos, como es una pantalla con displays a leds, al arrancar se muestra el número de serie del producto en la pantalla.
Si el producto no tienen ningún tipo de pantalla, en mi bootloader para PIC32, lo que hice es que al arrancar, el firmware graba un fichero de texto en la tarjeta SD con el numero de serie de esa placa, así el cliente puede mirarlo y decírmelo para que le cree el archivo clave de activación para su placa.
El firmware va encriptado, no puedes editar ni cambiar nada, si lo intentas solo verás basura, por eso precisamente todas las actualizaciones de firmware se dan encriptadas, para que nadie pueda copiar, desensamblar o parchear nada.
Está todo muy bien atado a nivel de firmware, el único punto débil en todo sistema basado en un microcontrolador, es que te lo revienten a nivel de hardware. En eso los chinos son expertos, por unos cientos o miles de dólares te pueden abrir casi cualquier micro, queman el encapsulado con acído, meten el chip al microscopio y buscan donde está el fuse de protección de lectura para desactivarlo y volcar el contenido del micro. Los fabricantes de micros ya van añadiendo protecciones para evitar esos ataques, pero muchos micros siguen siendo todavía vulnerables, y en ese sentido los PIC son los más fáciles de reventar según los chinos.
Precisamente ahora estoy probando el RT1020 de NXP, y este micro como lleva la flash externa, en principio parece que deja al descubierto el firmware para que cualquiera lo copie. Pero no es así, porque está encriptado en la flash y se desencripta en tiempo de ejecución en el propio micro con una clave única, que me parece va grabada de fábrica. Una maravilla de bicho, espectacular. Este micro es prácticamente invulnerable a los ataques por hardware, salvo que los chinos ideen un sistema para leer la clave de encriptación de la ROM del micro y sepan además que fórmula se usa para encriptar y desencriptar. Lo que nunca van a poder hacer es sacar directamente el objeto listo para desensamblar o copiarlo a una versión pirata de producto.