Y si no directamente si es algo de TANTA necesidad, es que los demas programadores hagan sus cosas como deben.
Me refiero que pongan en su lugar la funcion de encriptacion y desencriptacion, y que solo esa funcion devuelva el mismo valor.
Ya que basicamente ELLOS van a trabajar con la informacion ya desencriptada, y luego cuando TODO esta correcto cambiar la funcion de desencriptacion/encriptacion por la que se debe. Y eso seria todo. No hay necesidad que los demas tengan el codigo.
me refiero a algo asi:
Para los demas programadores:
#include encrip.h
main ()
{
dato = tomodato();
encriptarlo(variable1,dato);
enviarlo();
dato_recibido= recibirdato();
desencriptarlo(dato_recibido,variable2);
procesarlo();
}
// En otro .c , encrip.c
encriptarlo(variable1,variable2){
//Nada..
}
desencriptarlo(variable1,variable2) {
//Nada
}
Ese codigo deberia funcionar si esta bien realizado el programa. Y si se necesita probar, que solamente se provea el dato_recibido ya desencriptado. Si es que se reciben MAS datos que luego se acorta la trama por la desencriptacion, entonces que envien basura ademas de los datos desencriptados al probarlo.
Luego cuando todo esta listo entonce ahi abris el archivo que contiene las funciones encriptarlo() y desencriptarlo() y modificas las funciones con tu codigo secreto y compilas.
Nadie tendria el codigo, y el programa funcionaria como debe ya que imagino que fue bien programado, y si no funciona se puede probar tranquilamente sin necesidad de esas funciones.
Esto trae la ventaja que unicamente vos tenes el codigo. Mientras que de la otra forma tenes el problema que se puede realizar una ingenieria inversa. Alguno que sepa ASM te lo sacaria si hace un esfuerzo. O directamente tener el codigo en ASM. Mientras que aca lo unico que te quedaria es ponerse a ver el .hex generado, que tambien posee el ASM, pero si antes se pasa por un encriptador asi un bootloader lo cambia entonces ahi ya tenes otra proteccion mas.