Me darias un ejemplo de este metodo para C++?
Gracias por la respuesta

Bueno, no programo en C++ por lo que no podría darte un ejemplo concreto en ese lenguaje.
Por otro lado, lo que puedes hacer es usar, por ej. el algoritmo Adler32 (el de zlib) para calcular el checksum de una parte de tu codigo (digamos, por ej., el sector de codigo que se encarga de comprobar el serial de tu aplicacion.).
Lo que haces es pasarle Adler a los bytes de ese codigo y guardas ese valor en alguna parte (puede ser en un solo DWORD o en varias partes. Mientras mas tedioso sea, mejor.)
Luego haces una función que verifique cada tanto ese codigo con Adler (el trigger lo elijes tu. Podria ser aleatorio.). Como te dije antes, puedes hacer un thread que verifique los bytes y si encuentra una diferencia, puedes setear un flag que haga que el programa se comporte de forma extraña, que haga calculos incorrectos, en fin, que se corrompa de forma "sutil" (eso es mejor a cerrar todo. Si cierras todo, el cracker se dará cuenta de que hay algo mal!)
Otra cosa que puedes usar es codigo automodificable/autoencriptable. Por ej. partes la rutina de registracion/verificacion en partes y cada parte se descifra antes de ejecutarse y la anterior se vuelve a cifrar.
Tambien convendria que no pongas todo el codigo junto. Como te dije antes, mientras mas tedioso, mejor para ti.
Otra idea es que pongas chequeos aleatorios al serial, que no esten en la rutina principal de registracion/verificacion, pero que sean necesarios para la correcta registracion del proggie.
En fin, hay millones de cosas que puedes hacer...

Saludos!