
Aquí un par de tips que pude recompilar y también de mi propia experiencia:
- Evita los mensajes como "Te tengo lamer... jajaja, estas re mal".
- Intenta usar encriptacion asimétrica.
- Nunca uses archivos con significado como licencia.dat.
- No alertes que la clave es errónea al momento de chequear la clave, si es errónea, espera, haz algunas cosas más y luego alerta.
- Añade delays cortos, como pausas, antes, en el medio y después de la comprobación.
- Usa checksums en todo, dlls, exe, etc.
- Parchea tu propio software, haz distintas rutinas de validación para el mismo programa.
- Guarda seriales en lugares poco comunes.
- Guarda números de series en varios lugares, luego comprueba si son iguales, pero no lo hagas todo junto, sino de a partes... al final, si alguno es diferente... alerta, pero tampoco en el momento.
- No uses cadenas literales, en lo posible, las cadenas como "chico malo" o "chico bueno" tenelas encriptadas antes de enviar el mensaje, las desencriptas al momento, las usas, y las vuelves a encriptar.
- Código basura, mete mucho código de basura en el medio de la rutina de comprobación, código parecido al que viene antes y después de comprobación, camúflalo.
- Juega con código con muchas condiciones inútiles, je, jne, jz por todos lados antes, en el medio y después de la rutina de comprobación.
- Usa buena encriptación, un simple XOR no basta.
- Usa seriales largos, no 32 caracteres, sino varios Kb.
- Evita usar la common runtime library de tu compilador (msvcrt, msvbcrt, etc...) para cosas que puedes programar tu mismo, como strlen, strcpy, strncat, etc.
- No confies solamente en enpaquetadores.
- Usa ventanas de carga (es imagen que aparece mientras el programa carga), en esa dll, mete código de comprobación también, muchas veces se saltarán esa pantalla porque molesta.
- En la generación de llaves, usa RCR y RCL, y si logras, trata que el Carry Flag este puesto con una rutina matemática pseudo aleatoria, de esa manera es díficil saber si rotar_si_acareo va rotar los bits o no.
- Usa parte del código, (bytes de la ejecutable) como parte de la tabla de números mágicos, así si parchean el código, los números mágicos ya no son los mismos.
- Juega con la mente del cracker, si detectas un debugger, no termines el programa, que continue, pero haz la rutina de comprobación distinta, en otro lugar... cosa que si el cracker logra detectar tu rutina y hace un keygen, no le servirá a menos que ejecute el programa dentro del depurador.
- No te gastes en escribir código para matar depuradores.
- Cifra seriales y nombres y comprueba si coinciden con tu manera.
encrypt the name/serial and check if it matches YOUR way of registering the program. - Nunca, nunca pongas la rutina de generación de llaves dentro de tu programa. Debes crear la rutina inversa, tomate el tiempo.
(NO HACER ESTO:
if (generarllave(usuario) == serial_ingresado)
{
registro ok
}
cifra todo el texto en el programa, o la mayoría de el.
Se les ocurre algun otro? o también si alguno esta mal?
Saludos
Autor: Enko
Trackback URL for this post:
http://shadowjah.com/trackback/85
