DEFINICIÓN DE CRACKING
El cracking se puede describir como el grupo de técnicas empleadas para codificar,
analizar y estudiar los principios de un programa sin disponer de su código fuente. Cuando un desarrollador
crea un programa, comienza escribiendo el código fuente en el lenguaje de programación
que haya elegido para acabar compilándolo (en un programa ejecutable). Llegado este
punto, nadie podría editar el programa sin disponer del código fuente y realizar una nueva
compilación.
La técnica de ingeniería inversa constituye la piedra angular del cracking, se basa en
la descompilación, o compilación inversa, de un programa a un lenguaje de programación,
generalmente, el más básico, esto es, ensamblador.
la descompilación, o compilación inversa, de un programa a un lenguaje de programación,
generalmente, el más básico, esto es, ensamblador.
HERRAMIENTAS DE CRACKING ELEMENTALES
El procedimiento básico consiste en la descompilación
de un programa en un lenguaje de programación, a ensamblador en la mayoría de las
ocasiones. El cracker podrá estudiar el programa de forma pasiva, desensamblarlo con un
desensamblador (descompilador que efectúa una compilación inversa en ensamblador)
para obtener su código ensamblador estático, o bien aplicar un programa de depuración, un
depurador, para depurar el programa. Al constituir uno de los pasos claves el uso frecuente
de algún depurador para realizar el análisis del programa, resulta pertinente intentar evitar
su utilización (o al menos, obstaculizarla en gran medida). Razón que conduce a los
infractores a aplicar distintos métodos y programas que enmascaren su depurador. El
programa más conocido empleado para detectar un depurador y "dejar las cosas en su
sitio" se denomina Frogsice.
Si se efectuaran alteraciones al código del programa, éstas deberán guardarse en
algún lado. Con este propósito existen varios editores hexadecimales; alternativamente, se
puede modificar el código del programa directamente en memoria mediante un cargador.
También figuran los volcadores, programas diseñados para guardar en disco el
contenido de la memoria. Muy útiles para almacenar datos importantes descodificados por
el programa automáticamente. ProcDump representa un buen ejemplo: es un volcador y
descodificador que también incluye otras muchas funciones.
de un programa en un lenguaje de programación, a ensamblador en la mayoría de las
ocasiones. El cracker podrá estudiar el programa de forma pasiva, desensamblarlo con un
desensamblador (descompilador que efectúa una compilación inversa en ensamblador)
para obtener su código ensamblador estático, o bien aplicar un programa de depuración, un
depurador, para depurar el programa. Al constituir uno de los pasos claves el uso frecuente
de algún depurador para realizar el análisis del programa, resulta pertinente intentar evitar
su utilización (o al menos, obstaculizarla en gran medida). Razón que conduce a los
infractores a aplicar distintos métodos y programas que enmascaren su depurador. El
programa más conocido empleado para detectar un depurador y "dejar las cosas en su
sitio" se denomina Frogsice.
Si se efectuaran alteraciones al código del programa, éstas deberán guardarse en
algún lado. Con este propósito existen varios editores hexadecimales; alternativamente, se
puede modificar el código del programa directamente en memoria mediante un cargador.
También figuran los volcadores, programas diseñados para guardar en disco el
contenido de la memoria. Muy útiles para almacenar datos importantes descodificados por
el programa automáticamente. ProcDump representa un buen ejemplo: es un volcador y
descodificador que también incluye otras muchas funciones.
MÉTODOS DE PROTECCIÓN
- Duración limitada
- Número limitado de ejecuciones
- Otras restricciones numéricas
- Número de registro o contraseña-número de serie
- Fichero clave
- Programas limitados
- Clave hardware (“dongle”)
- Comprobación de la presencia del dispositivo de almacenamiento
- Protección contra la copia del dispositivo de almacenamiento
- Protección comercial
- Compresores y codificadores para formato PE
- Programas en Visual Basic
Las técnicas de protección tienden a utilizarse de forma conjunta: por ejemplo, se
pueden encontrar versiones limitadas por tiempo de un programa que se desbloquea al
introducir el número de serie correcto o un fichero temporal, etc.
pueden encontrar versiones limitadas por tiempo de un programa que se desbloquea al
introducir el número de serie correcto o un fichero temporal, etc.
Sus puntos débiles:
Duración limitada
Los creadores de software que aplican métodos de protección basados en la
duración limitada pretenden asegurarse de que su software no va a volver a funcionar
pasado el período de prueba o que sus opciones van a quedar restringidas de una u otra
manera.
Cualquier programa que utilice este método de protección normalmente guardará la
fecha en el momento de su instalación ( los algoritmos avanzados lo guardan en varios
sitios) —por ejemplo, en registros, ficheros, etc.— y así poder comparar dicho valor con la
fecha actual en cada ejecución (varias veces, si fuera posible ). Su inconveniente radica en
que la fecha actual del sistema depende enteramente del usuario; estos algoritmos se
pueden sortear cambiando simplemente la fecha del sistema a otra anterior.
fecha en el momento de su instalación ( los algoritmos avanzados lo guardan en varios
sitios) —por ejemplo, en registros, ficheros, etc.— y así poder comparar dicho valor con la
fecha actual en cada ejecución (varias veces, si fuera posible ). Su inconveniente radica en
que la fecha actual del sistema depende enteramente del usuario; estos algoritmos se
pueden sortear cambiando simplemente la fecha del sistema a otra anterior.
mov eax, [ebp+123456h] // obtención de la fecha actual
// y almacenándola en el// registro EAX
emp eax, lEh // comparándola con la fecha/hora
//límite, etc. (almacenada en EBX)
jl contiue // si la fecha actual es menor que
// e l valor limite, el programa
// puede continuar
Al cambiar en este caso concreto la última instrucción a una bifurcación
incondicional (JMP), el proceso siempre saltará a la etiqueta “continue”
independientemente del resultado de la instrucción CMP anterior, así la protección quedará
deshabilitada.
incondicional (JMP), el proceso siempre saltará a la etiqueta “continue”
independientemente del resultado de la instrucción CMP anterior, así la protección quedará
deshabilitada.