Todos los bootoader funcionan así, el programa a cargar nunca se puede grabar directamente porque está compilado para ejecutarse a partir de una dirección.
Lo importante no es eso, sino que el bootloader esté encriptado, de lo contrario, cualquiera con unos conocimientos muy básicos te lo puede copiar, descompilar o clonar. Date cuenta de que a partir de un binario o HEX (sin encriptar) se puede saber cual es la dirección de arranque de tu programa, y a partir de ahí cualquiera puede crear una rutina previa que simplemente salte a la ejecución de tu programa, aparte de que tu programa se podrá descompilar y manipular (por ejemplo, parchearlo para que funcione de otra forma, saque unos textos distintos en un display, etc...).
Mira en Google por PIC18 bootloader Github, y seguro que encuentras unos cuantos bootloader, ahora lo importante es que les añadas un sistema de encriptación, por ejemplo XTEA, o si lo encuentras ya hecho, mejor.