Hola planeta9999,
Yo estaba vien la posibilidad de usar la opcion TO-GO del pickit2....
Todo eso son apaños que no resuelven nada, esa función TO-GO de pickit2 sirve para cargar el fichero a grabar en el pickit2, y a partir de ahí poderlo grabar en el pic, sin necesidad de usar el PC, eso no te protege a ti en nada, le estás dando al cliente el programa, ¿ o cada vez que quieras darle una actualización del firmware, le vas a mandar un pickit2 con el firmware grabado ?, eso es muy poco práctico, además eso no impedirá que lo grabe cuantas veces quiera, lo ideal es enviarle un archivo por email o colgárselo en algún server para que lo descargue.
Lo que quieres hacer no es nada recomendable, y además deja al descubierto tu programa, en el momento que entregas el .HEX completo y sin encriptar cualquiera lo puede copiar o desensamblar y modificar a su antojo.
Con un bootloader ,para empezar no hace falta programador para actualizar la placa, puedes hacer un bootloader para que se actualice la placa por USB conectada al PC, con una tarjeta SD, con un pendrive USB o por puerto serie RS232. Además para que el firmware no se pueda desensamblar, debe de estar encriptado, y será el propio microcontrolador el que lo desencripte conforme se le carga el archivo.
Parte de un bootloader estandar de código abierto, en Microchip tienes mucho código fuente, al menos para PIC32 y PIC24, creo que también hay algo para PIC18. Luego métele una rutina de desencriptación, por ejemplo basada en XTEA, y monta un programa en PC para encriptar los HEX, el mío lo tengo hecho en VC++, también puedes partir del código fuente de ejemplo que da Microchip.
Bájate mi demo, si quieres, y pruébala, es 100% funcional, aunque no incorpora las prestaciones profesionales (la versión comercial la vendo a empresas), pero puedes ver como funciona el conjunto, la encriptación y la carga del firmware. http://www.pinballsp.com/PinballSP_Encrypted_Bootloader_Solution_Basic_Version.zip