ESTUDIO DE PROTECCIONES BASICO PARA PRINCIPIANTES    (También llamado cracking)

Impartido por Ratón

 

Nota

Cada capitulo ira acompañado de su crackme correspondiente.No facilitare paginas de donde bajarse herramientas ni enlaces a paginas de crackers, la intención es que busquéis en Internet todo lo necesario. Seguro que encontráis mas paginas de herramientas, tutoriales y utilidades relacionadas con este tema que las que yo pueda deciros.

Con esto solo quiero fomentar vuestro interés, además se que la búsqueda os proporcionara gratas sorpresas.

A todos un saludo.

 

 

Con este capitulo adjunto dos manuales sobre Olly Debugger de The Pope

 

Capitulo 0

 

 

Objetivo

 

Prepararse minimamente para el curso y ver de qué va el rollo.

 

Introducción

 

Esta idea surge con el fin de rellenar el hueco que bajo mi punto de vista falta en el foro de HackxCrack sobre el tema Cracking.

Este pretende ser un cursillo muy básico de aproximación al estudio de las protecciones en los programas comerciales examinando sus puntos vulnerables.

Esta dirigido a personas que nunca hayan tenido contacto con este tema y explicado de la mejor manera que pueda explicarlo un principiante (o sea yo).

Lo explicare como a mi me hubiera gustado que me lo explicaran, por tanto será explicado de la manera más llana y sencilla posible explicando todo de forma detallada (siempre dentro de mis posibilidades).

Será tratado partiendo de crackmes, pequeños programas construidos para simular la protección  de los programas comerciales.

También veremos algún programa shareware que tenga relación con el tema, sin modificar el programa pues seria un acto ilegal, observaremos el programa cargado en memoria sin realizar cambio alguno en el ejecutable, solo como complemento y ejemplo practico de alguno de los capítulos del curso.

Esta pensado para complementarse con tutoriales e información difundida por la red, pues como digo trataremos lo mas básico y si tenéis ansias de saber no os bastara  solo con la información que se incluya en cada capitulo.

Constara en principio de 10 capítulos comprimidos en formato rar para descargar, con sus correspondientes crackmes y material de apoyo si fuera necesario.

Acepto críticas, ayudas y correcciones.

Espero animar con esto a que colabore gente con más y más amplios conocimientos que yo en la materia (cosa no muy difícil, por cierto).

Si alguien desea unirse al proyecto será bienvenido.

Para cualquier pregunta sobre el tema habilitare un hilo en el foro. No contestare preguntas sobre este tema en ningún otro hilo con el fin de centrar todo lo que tenga que ver con el tema crack en un solo hilo para facilitar vuestras consultas.

La intención no es solo utilizar este hilo para el curso sino agrupar en el cualquier pregunta relacionada con el tema crack.

 

A la hora de explicar utilizare distintos términos para nombrar la misma cosa, por ejemplo: programa – ejecutable   ó   cadena – String.

Esto lo haré para que veáis las distintas formas de llamar a la misma cosa y os aclaréis al leer tutoriales de otros crackers.

Click o clickear será la acción de pulsar el botón izquierdo del ratón, click derecho será la acción de pulsar el botón derecho del ratón, doble click será la acción de pulsar 2 veces el botón izquierdo del ratón.

Ya iréis pillando mi forma de explicar (espero).

 

 

Herramientas necesarias.

 

Será importante hacerse con ciertas herramientas.

Os daré una base sobre la que partir y vosotros mismos iréis adaptándoos a lo que necesitéis según vayáis aprendiendo.

En principio seria interesante que consiguierais poco a poco estos programas:

 

 Necesario para el capitulo 1   Olly Debugger  (debugger) El curso se basa al 90% en este programa. Imprescindible.

                                          

      Siguientes capítulos   W32Dasm  disassembler (desemsamblador)

                                            DeDe Delphi decompiler (descompilador de ejecutables programados en delphi)

                                            PE Explorer (editor de recursos)

                                            Exescope (editor de recursos)

                                            Peid (detector de protecciones de ejecutables)

                                            Pe scan (detector de protecciones de ejecutables)

                                            Procdump (desempacador genérico de protecciones de ejecutables)

                                            Ida pro (desemsamblador)

                                            Smartcheck (debugger visual basic)

                                            Resource hacker (editor de recursos)

                                            Patch FX (creador de cracks para distribuir)

 

La intuición, la paciencia y el empeño esta en vuestras manos.

 

Si necesitáramos algún programa específico que no estuviera en esta lista (un editor hexadecimal por ejemplo) lo diré con antelación.

Procurad conseguir la versión mas reciente de los programas así como sus plugins si los tuvieran.

 

Aparte no estaría de más que mirarais algún tutorial de ensamblador para ver las instrucciones más comunes.

No es necesario aprender a programar en ensamblador, lo que necesitemos saber se ira aprendiendo poco a poco.

 

De momento aquí os dejo una pequeña tabla con instrucciones en  lenguaje ensamblador sacada de diversos libros y paginas Web.

También una tabla de conversión ASCII – Hexadecimal.

Para que toméis contacto con el Olly Debugger incluyo dos manuales (muy buenos manuales, mirad la carpeta correspondiente a este capitulo) de The POPE (gracias The POPE).

                                                                             

                                                                                          

 No es necesario estudiar el lenguaje ensamblador, pero estaría bien que le echarais un vistazo por lo menos a las instrucciones de salto.

 

 

ENSAMBLADOR

 

Registros de la CPU

 

La CPU tiene 14 registros internos, cada uno de 16 bits. Los primeros cuatro, AX, BX, CX, y

DX son registros de uso general y también pueden ser utilizados como registros de 8 bits,

para utilizarlos como tales es necesario referirse a ellos como por ejemplo: AH y AL, que

son los bytes alto (high) y bajo (low) del registro AX. Esta nomenclatura es aplicable

también a los registros BX, CX y DX.

 

Los registros son conocidos por sus nombres específicos:

 

AX Acumulador

BX Registro base

CX Registro contador

DX Registro de datos

DS Registro del segmento de datos

ES Registro del segmento extra

SS Registro del segmento de pila

CS Registro del segmento de código

BP Registro de apuntadores base

SI Registro índice fuente

DI Registro índice destino

SP Registro del apuntador de la pila

IP Registro de apuntador de siguiente instrucción

F Registro de banderas

 

 

 

 

Instrucciones lógicas.

 

Son utilizadas para realizar operaciones lógicas sobre los operandos.

 

AND

NEG

NOT

OR

TEST

XOR

 

Instrucciones aritméticas.

 

Se usan para realizar operaciones aritméticas sobre los operandos.

 

ADC

ADD

DIV

IDIV

MUL

IMUL

SBB

SUB

 

 

Operaciones CALL y RET

 

La instrucción CALL transfiere el control a un procedimiento llamado, y la instrucción RET

regresa del procedimiento llamado al procedimiento original que hizo la llamada. RET debe

ser la ultima instrucción en un procedimiento llamado. Los formatos generales para CALL y

 

RET son:

 

(etiqueta) CALL (procedimiento)

(etiqueta) RET (inmediato)

 

 

El código objeto particular que CALL y RET generan depende de si la operación implica un

procedimiento NEAR (cercano) o un procedimiento FAR (lejano).

 

 

 

Instrucciones para ciclos

 

LOOP Transfieren el flujo del proceso, condicional o

 

incondicionalmente, a un destino repitiéndose esta acción hasta que el contador sea cero.

 

LOOP

LOOPE

LOOPNE

 

Instrucciones de conteo

 

Se utilizan para decrementar o incrementar el contenido de los

contadores.

 

DEC

INC

 

Instrucciones de comparación Son usadas para comparar operandos, afectan al contenido de las

banderas.

 

CMP

CMPS (CMPSB) (CMPSW)

 

Instrucciones de banderas

 

Afectan directamente al contenido de las banderas.

 

CLC

CLD

CLI

CMC

STC

STD

STI

 

 

Instrucciones de salto

 

Son utilizadas para transferir el flujo del proceso al operando indicado.

 

JMP

JA (JNBE)

JAE (JNBE)

JB (JNAE)

JBE (JNA)

JE (JZ)

JNE (JNZ)

JG (JNLE)

JGE (JNL)

JL (JNGE)

JLE (JNG)

JC

JNC

JNO

JNP (JPO)

JNS

JO

JP (JPE)

JS

 

 

Instrucción JMP

Propósito: Salto incondicional

Sintaxis:

JMP destino

Esta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las

 

condiciones actuales de las banderas ni de los datos.

 

Instrucción JA (JNBE)

Propósito: Brinco condicional

Sintaxis:

JA Etiqueta

Después de una comparación este comando salta si está arriba o salta si no está abajo o si

 

no es igual.

Esto significa que el salto se realiza solo si la bandera CF esta desactivada o si la

 

bandera ZF esta desactivada (que alguna de las dos sea igual a cero).

 

Instrucción JAE (JNB)

Propósito: salto condicional

Sintaxis:

JAE etiqueta

Salta si está arriba o si es igual o salta si no está abajo.

El salto se efectúa si CF esta desactivada.

 

Instrucción JB (JNAE)

Propósito: salto condicional

Sintaxis:

JB etiqueta

Salta si está abajo o salta si no está arriba o si no es igual.

Se efectúa el salto si CF esta activada.

 

Instrucción JBE (JNA)

Propósito: salto condicional

Sintaxis:

JBE etiqueta

Salta si está abajo o si es igual o salta si no está arriba.

El salto se efectúa si CF está activado o si ZF está activado (que cualquiera sea igual a

 

1).

 

Instrucción JE (JZ)

Propósito: salto condicional

Sintaxis:

JE etiqueta

Salta si es igual o salta si es cero.

El salto se realiza si ZF está activada.

 

 

Instrucción JNE (JNZ)

Propósito: salto condicional

Sintaxis:

JNE etiqueta

Salta si no es igual o salta si no es cero.

El salto se efectúa si ZF está desactivada.

Instrucción JG (JNLE)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JG etiqueta

Salta si es más grande o salta si no es menor o igual.

El salto ocurre si ZF = 0 u OF = SF.

 

Instrucción JGE (JNL)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JGE etiqueta

Salta si es más grande o igual o salta si no es menor que.

El salto se realiza si SF = OF

 

Instrucción JL (JNGE)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JL etiqueta

Salta si es menor que o salta si no es mayor o igual.

El salto se efectúa si SF es diferente a OF.

 

Instrucción JLE (JNG)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JLE etiqueta

Salta si es menor o igual o salta si no es más grande.

El salto se realiza si ZF = 1 o si SF es diferente a OF

 

Instrucción JC

Propósito: salto condicional, se toman en cuenta las banderas.

Sintaxis:

JC etiqueta

Salta si hay acarreo.

El salto se realiza si CF = 1

 

Instrucción JNC

Propósito: salto condicional, se toma en cuenta el estado de las banderas.

Sintaxis:

JNC etiqueta

Salta si no hay acarreo.

El salto se efectúa si CF = 0.

 

Instrucción JNO

Propósito: salto condicional, se toma en cuenta el estado de las banderas.

Sintaxis:

JNO etiqueta

Salta si no hay desbordamiento.

El salto se efectúa si OF = 0.

 

Instrucción JNP (JPO)

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JNP etiqueta

Salta si no hay paridad o salta si la paridad es non.

El salto ocurre si PF = 0.

 

Instrucción JNS

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JNP etiqueta

Salta si el signo esta desactivado.

El salto se efectúa si SF = 0.

 

Instrucción JO

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JO etiqueta

Salta si hay desbordamiento (overflow).

El salto se realiza si OF = 1.

 

Instrucción JP (JPE)

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JP etiqueta

Salta si hay paridad o salta si la paridad es par.

El salto se efectúa si PF = 1.

 

Instrucción JS

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JS etiqueta

Salta si el signo está prendido.

El salto se efectúa si SF = 1.

 

 

Instrucciones de transferencia

Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede usar

 

con diferentes modos de direccionamiento.

 

MOV

MOVS (MOVSB) (MOVSW)

 

Instrucciones de carga

 

Son instrucciones específicas de los registros. Son usadas para cargar en algo en registro

bytes o cadenas de bytes.

 

LODS (LODSB) (LODSW)

LAHF

LDS

LEA

LES

 

Instrucciones de la pila

 

Estas instrucciones permiten el uso de la pila para almacenar y extraer datos.

 

POP

POPF

PUSH

PUSHF

 

TABLA DE CONVERSION

 

 

Bueno espero que mientras leíais esta introducción estuvierais bajando el OllY, si es así podemos pasar al siguiente capitulo y empezar a trastear con el primer crackme.

 

 

Gracias

A todos los crackers y programadores de los cuales he aprendido y sigo aprendiendo.

A los creadores de crackmes

En especial y sin menospreciar a nadie a Ricardo Narvaja por su aportación y su trabajo sobre el estudio de las protecciones y sus tutoriales en castellano y a Makkakko por sus tutoriales con Olly Debugger (Recomendados 100%).

A ti que me estas leyendo.

 

 

Ratón Enero 2004