proteger programas

3- ¿ Cómo Proteger Programas ?

Autor: Black Fenix
 
 
Nota: El siguiente No es aplicable al 100% en Access peroooooooo casi, lo es.

CONSEJOS GENERALES :
Antes de realizar una protección estos son algunos de los consejos que debes seguir, por supuesto esta lista podría ser mucho más larga, pero tampoco se trata de dar ventaja al enemigo ;-), ni de sobrecargar a los pobres proteccionistas, que ya de por si no hacen caso de los cuatro consejillos básicos.
 
0) Nunca, bajo ningún concepto, utilices nombres que puedan ser sospechosos a la hora de bautizar las funciones que se encargan del sistema de protección. Por ejemplo si tu protección se basa en un número de serie, no le pongas un nombre como IsRegNumValid, ya que esto habla por si sólo. Usa nombres que no levanten la menor sospecha. Es increíble, que compañías de software bastante importantes, no sigan este consejo tan básico (esto es debido a que cientos de personas trabajan en un mismo proyecto y se harían la picha un lío si el sistema de protección fuera muy complicado), resulta un juego de niños desproteger sus aplicaciones más caras.


1) No hagas que las cadenas que informan del error de protección sean cadenas constantes, ya que si lo haces así, el cracker puede encontrar las referencias a esta cadena y a partir de ahí ya es más fácil buscar el núcleo de la protección. Para evitar esto, crea las cadenas dinámicamente, o mejor aún prueba a encriptarlas.


3) Cuando detectes un error/violación en el sistema de protección, no informes con ningún tipo de mensaje al usuario, simplemente sal del programa o haz que el sistema se cuelgue, esto hará que el cracker tenga menos puertas de entrada.


4) Si tu sistema utiliza la fecha del sistema para ver si el periodo de evaluación a pasado, realiza siempre varias comprobaciones al inicio, y al cabo de por ejemplo 3 días, vuelve a comprobar. A ser posible nunca utilices las funciones del SO para obtener fechas, es mejor extraerla de los ficheros.


5) Haz comprobaciones internas del ejecutable, esto es una suma de comprobación o verificación del código (CRC) que puede ser objetivo de ataques externos, haciendo esto, podrás saber si tu aplicación a sido modificada por algún cracker o incluso algún virus y actuar como indica el punto 3.


6) Nunca uses una misma función para comprobar la validez de un numero de serie, mantén siempre varias copias de esta función, aunque esto signifique tener código repetido, te aconsejo que modifiques su funcionamiento aunque no su resultado, esto generará código diferente para cada función. Elige la función de una manera aleatoria. Esto dará por saco a muchos crackers, y aunque consigan parchear una función, deberán de parchear también el resto.


7) Puedes añadir trucos anti-debugging, pero no te serán de mucha ayuda a no ser que sean métodos desconocidos, ya que cualquier cracker que se precie conoce los métodos más utilizados, esto sólo le retardará unos instantes.


8) Bajo ningún concepto utilices un sistema de protección comercial, el 99% de estos sistemas ya se ha conseguido desproteger y es relativamente fácil encontrar parches genéricos.


9) Encripta o comprime todo o parte del código del programa, esto evitará que el cracker pueda disponer de un desensamblado que corresponda con el código verdadero del programa. No utilices compresores /encriptadores genéricos ya que en el 99% de los casos existen un descompresor / desencriptador genérico para estos compresores / desencriptadores. Descomprime / Desencripta el código, sólo cuando hayas comprobado que no se ha violado el sistema de protección, esto forzará al cracker a tener que desproteger el sistema para poder obtener el código real. Este sistema casi nunca se implementa por ser quizá muy complejo para la mayoría de programadores "profesionales", pero resulta extremadamente efectivo contra los crackers menos avanzados.


10) Nunca uses el registro para guardar información relevante al sistema de protección. Lo mejor es guardarlos en lugares poco comunes , p. ej: archivos de bases de datos de la misma aplicación.


11) Nunca hagas que tu sistema de protección dependa exclusivamente de una DLL externa, ya que es muy fácil crackear una DLL y luego hacerla servir para todos los programas que utilicen ese tipo de protección. Este es otro de los fallos que cometen muchos programadores, debido a su querido Windows.


12) Procura que el sistema de protección no pueda burlarse con tan sólo cambiar el flujo del programa (es decir con tan sólo modificar un salto), realiza múltiples comprobaciones, haz saltos inútiles y añade código superfluo, esto creará un clima de confusión muy desagradable para el cracker.


13) Nunca utilices una variable global para indicar si el programa esta registrado o no (0 o 1 es lo más típico :-)) ya que con tan solo cambiar este valor, el resto del sistema de protección se irá al garete.


14) Si tu aplicación tiene alguna función recortada, no incluyas el código fuente dentro del programa demo, ni tampoco muestres esta función en ningún menú.


15) Utiliza el propio código de tu protección como tabla para el cálculo de los números de registro, esto pueda resultar muy desagradable para los que suelen usar,....... .


16) Utiliza números de serie que contengan letras y números separados por guiones, suelen ser más difíciles de crackear que los numéricos.


17) Cuando hagas la rutina de cálculo, hazla lo más complicada posible, esto no quiere decir que el cálculo sea una chorrada. Al contrario, utiliza las instrucciones XOR, AND, SHR y RCL RCR (muy eficaces y difíciles de invertir), incluso puedes usar las instrucciones del copro para dificultar la comprensión del código.


18) Sobre todo después de un cálculo complejo, nunca incluyas la típica comprobación final:
cmp reg/mem,reg/mem


jne@NoRegistrado

Esto es lo más sencillo de invertir, y puede sumir un buen sistema de protección en lo más ridiculo.


19) Utiliza llamadas indirectas a tus funciones de protección (punteros a funciones, guardados en tablas) p. ej:
mov eax,dword ptr [EDI*4+32]
call [eax]

en C:

Funcion=(int *) TablaFunciones[i+32];
Funcion();

Esto evita que el cracker pueda encontrar las referencias a las funciones relativas al sistema de protección.


20) Puedes ocultar los datos de la protección en archivos de sonido e imagen o de objetos 3D usando steganografía . En caso de que el cracker sea capaz de deducir donde se encuentran los datos, se verá obligado a conocer la estructura interna de estos archivos y esto dificultará durante mucho tiempo su trabajo. Puedes utilizar este sistema para identificar cada copia de tu programa y así saber de donde provino la filtración :-). Aunque esto resulta peligroso si algún trabajador de tu empresa obtiene una copia que es para uno de tus clientes y la distribuye por ahí.


21) Analiza el código fuente de varios virus y implementa sus técnicas de protección en tus sistemas, los virus son una fuente increíble de como poder proteger tu software. Encriptación, auto-modificación del código, generación de código aleatorio y un sinfín de trucos que solo puedes encontrar en estas maravillas de programas.(Esto es para los que creen que los virus sólo sirven para dar por culo).


22) Camufla los archivos relevantes a la protección, aunque no sirve de mucho puede despistar a más de uno.

 

 

[Atrás]