Copy Link
Add to Bookmark
Report
SET 029 0x0d
-[ 0x0D ]--------------------------------------------------------------------
-[ Ensamblador orientado al cracking ]---------------------------------------
-[ by ThEnemI ]------------------------------------------------------SET-29--
ENSAMBLADOR ORIENTADO AL CRACKING
by ThEnemI
<thenemi@hotmail.com>
ADVERTENCIA
El autor no se hace responsable del mal uso que se le pueda asignar al
contenido de este texto. Esto se hace con fines educativos. Ademas, no he sido
yo, nadie me ha visto, y no teneis pruebas. xD
Haz lo que te de la gana con el texto
INDICE
0x00 Introduccion
0x01 FAQ
- Cracking
- Ensamblador
- Herramientas
- Hexadecimal
- Dificultad
- Problemas
0x02 El ordenador por dentro
- Que es
- Sistema de computo
- memoria
- entrada-salida
- CPU
- Procesador
0x03 Atacando al lenguaje
- para empezar
- registros generales
0x04 El primer programa
0x05 Guardar y cargar programas
- guardar
- cargar
0x06 Condiciones, ciclos y bifurcaciones
- teoria
- practica
0x07 Alguna cosa mas...
0x08 Cracking
- tecnicas de proteccion
- atacar
- practicar
0x09 Despedida y Reflexion
0x00. Introduccion
Este texto no pretende ser una guia avanzada, ni tan siquiera una guia.
Es simplemente una "recopilacion" de textos LIBRES que vagan por la red. Si ya
sabes lo basico, deja este texto y coge algo mas complejo. ;>
Pero si antes de leer textos sobre como crackear x crackme te gustaria
saber algo de ensamblador... Este es tu articulo
0x01. FAQ (Frecuently asked questions)
Se que a muchos de vosotros esto os parecera aburrido, y quereis pasar
enseguida a la accion (al ataquerrrr!!!) PERO.... Si no sabemos que es lo
que estamos haciendo...
?:/ (no coment). Bueno, ahi van....
/// Que es el cracking?
Es una tecnica que consiste en la desproteccion de SOFTWARE. Ojo,
no confundir con una tecnica de hacking que se llama igual, y es mas
bien destrozar todo lo que pilles (desconectando ordenadores de Inet,
jo$%!@ el HD*....)
*HD: Hard drive (disco duro)
/// Que es ensamblador?
Ensamblador es un lenguaje de programacion de bajo nivel, con las
consecuencias que ello conlleva:
1. Es dificil de aprender (ya con cara de panico? tranquilo, solo te
costara al principio)
2. Exige conocer todos los componentes del ordenador (auch!)
3. Obtenemos el maximo rendimiento!!
De momento no os preocupeis, para el cracking solo necesitareis
conocer las ordenes basicas, aunque os recomiendo enteraros un
poquillo mas...
/// Que herramientas voy a necesitar?
Pues para aprender ensamblador, lapiz, papel, interes, y un debug
(dios, no!!!!) tranquilo, si usas windows* (XP, ME, 9x*,NT...)Viene
incluido. Dependiendo de la version, en accesorios, MS-DOS*,o
en accesorios, simbolo del sistema, o en "ejecutar" escribe
"command.com"
********Comenario SET
Me parece que command.com era en windows 3.11, apartir de Win-95 y desde luego
XP, 2000, NT se tiene que escribir "cmd"
********Fin
*windows: Es un sistema operativo. Es decir, el que interpreta las
instrucciones. Ya es hora de que sepas que hay mas sistemas operativos, como
puede ser MS-DOS, Linux y sus versiones (Suse, RedHat...), y la familia
UNIX, SunOS, Solaris...
Para crackear: pues el progama objetivo, y un debugger mas
potente (olly, softice...) y un editor hexadecimal. De momento,
no os preocupeis.
*M$-DO$: Microsoft Disk Operative $ystem. El primer $istema Operativo
(O$ en ingles)de la queridisima compaÏia de Billy.
/// Hexadecimal
Pues supongo que todos han oido hablar del sistema decimal (10
digitos, del 0 al 9) o del sistema binario (con 0 y 1) Pues HEXA, no
es mas que un sistema, en que se usan numeros del 0 al 9, y letras de
la A a la F.[0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F] Para que quede claro:
1=1; 2=2; 3=3; 4=4; 5=5; 6=6; 7=7; 8=8; 9=9; A=10; B=11; C=12; D=13;
E=14; F=15.
/// Yo valgo?
Pues si tienes interes, y usas un poquito lo que hay debajo del
pelo... (eso no, la cabeza!)
/// Tengo un problema...
Para cualquier duda, escribe a <thenemi@hotmail.com>
0x02. El ordenador por dentro
Pues para conocer tu ordenador (un vistazo rapido), que mejor que unos
apuntes de la Escuela Politecnica Superior de Alicante, y otros de la
universidad de Guadalajara. Digo yo que tendran que saberlo... (se
pueden encontrar navegando por ahi, como ya dije esto tiene mucho de
recopilacion)
A. Que es un ordenador?
Un ordenador es una maquina para el tratamiento de informacion, que
funciona manipulando seÏales electricas binarias (0 y 1) y que se constituye
de los siguientes elementos:
[ELEMENTOS DEL SISTEMA DE COMPUTO]
Le llamamos sistema de computo a la configuracion completa de una computadora,
incluyendo las unidades perifericas y la programacion de sistemas que la hacen
un aparato util y funcional para un fin determinado. Se compone de los
siguientes elementos:
* La memoria (RAM/ROM/CMOS/EPROM/CACHEs)
Es un conjunto de celdas (actualmente fabricadas con semiconductores)
usadas para procesos generales, tales como la ejecucion de programas y el
almacenamiento de informacion para las operaciones.
Cada una de las celdas puede contener un valor numerico y tienen la
propiedad de ser direccionables, esto es, que se pueden distinguir una de
otra por medio de un numero unico o direccion para cada celda.
El nombre genrico de estas memorias es Random Access Memory (Memoria de
acceso aleatorio) o RAM por sus siglas en ingles. La principal desventaja de
este tipo de memoria es que los circuitos integrados pierden la informacion
que tienen almacenada cuando se interrumpe la alimentacion electrica. Esto
lleva a la creacion de memorias cuya informacion no se pierda cuando se apaga
el sistema. Estas memorias reciben el nombre de Read Only Memory (Memoria de
solo lectura) o ROM.
* Las unidades de entrada y salida
Para que una computadora nos sea util es necesario que el procesador se
comunique al exterior por medio de interfaces que permiten la entrada y la
salida de datos del procesador y la memoria. Haciendo uso de estas
comunicaciones es posible introducir datos para su procesamiento y la
posterior visualizaci¢n de los datos ya procesados.
Algunas de las unidades de entrada mas comunes son teclados, lectoras de
tarjetas (ya en desuso), raton, etc. Las unidades de salida mas comunes son
las terminales de video(monitor...) y las impresoras.
* La Unidad Central de Proceso o CPU
Es la parte mas importante. Tambien se conoce como microprocesador.La CPU
esta formada a su vez por la unidad de control y la unidad aritmetica y logica.
La funcion de la CPU consiste en leer y escribir contenidos de las celdas
de memoria, llevar y traer datos entre celdas de memoria y registros especiales
y decodificar y ejecutar las instrucciones de un programa.
* Analizando las unidades de la CPU
Unidad de control: su funcion es intentar reconocer las instrucciones en
binario y generar las ordenes para que se ejecuten.
Unidad aritmetico-logica: trata de realizar las operaciones basicas de
calculo aritmetico,como puede ser la suma, resta, multiplicacion, o la
division, asi como las operaciones logicas bit a bit, and, or , xor, not, neg.
(lo aprenderas mas adelante)
Sobre decodificar y ejecutar las instrucciones de un programa:
El reconocimiento de las instrucciones ( secuencias de valores binarios
determinados ) es muy importante, pues de no ser reconocida, en procesadores
anteriores al 80286 provoca un cuelgue, o bien la ejecucion de operaciones
inesperadas, algo que puede aprovecharse para la deteccion de un determinado
procesador, o una determinada marca de procesadores.
Procesador: como trabaja
El procesador trabaja de manera distinta segun el modo de funcionamiento
activado. Los modos existentes en los 80x86 son el modo REAL ( para mantener
la compatibilidad con los 8086), el modo PROTEGIDO ( una extension muy amplia
de este modo ), y el modo intermediario entre los dos, el VIRTUAL 86 ( V86 ).
Dependiendo del modo de trabajo activo se realiza de una manera distinta el
direccionamiento de la memoria, es decir que se interpretan de diferente modo
las direcciones a memoria. Aunque existen mayores diferencias entre los modos,
nosotros estudiaremos el mas sencillo, el modo REAL
El procesador cuenta con una serie de celdas de memoria que se utilizan
con mucha frecuencia y que, como ya hemos visto, forman parte de la CPU.
Estas celdas son conocidas con el nombre de registros. Un procesador puede
tener una docena o dos de estos registros. La unidad aritmetica y logica de la
CPU realiza las operaciones relacionadas con los calculos numericos y
simbolicos. Tipicamente estas unidades solo tienen capacidad de efectuar
operaciones muy elementales como: suma y resta de dos numeros de punto fijo,
multiplicacion y division de punto fijo, manipulacion de bits de los registros
y comparacion del contenido de dos registros.
Un dato mas:
Las computadoras personales pueden clasificarse por lo que se conoce como
tamaÏo de palabra, esto es, la cantidad de bits que el procesador puede
manejar a la vez.
0x03. Atacando al lenguaje
A.- Para empezar
Antes de seguir conviene hacer una aclaracion: cuando hacemos un programa,
primero lo escribimos en un lenguaje de alto nivel (que entendemos) y despues
lo traducimos a lenguaje maquina. Ya esta, podemos seguir.
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 tambien 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 tambin a los registros BX, CX y DX.
Esto se hace en procesadores x86
Los registros son conocidos por sus nombres espec¡ficos. Algunos de ellos:
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
Mas adelante veremos mas concretamente los regsitros de banderas, pila,etc..
Algo practico: Desde MS-DOS, escribe debug: aparecera un guion (interprete
de comandos) Si escribes "r", veras el registro.
B.- Registros "generales".
Estos registros son escribibles y legibles directamente mediante instrucciones de transferencia
de datos.
Registro Ancho. Nombre.
AX 16 bits ACUMULADOR
BX 16 bits
CX 16 bits CONTADOR
DX 16 bits
EAX 32 bits (386+)
EBX 32 bits (386+)
ECX 32 bits (386+)
EDX 32 bits (386+)
ALGO MAS COMPLEJO: a veces se quiere acceder a la parte baja y alta de uno
deestos registros, por ello existen nombres para designar la parte baja rL, de
8 bits y la alta rH de 8 bits, donde r es A o B,o C o D. Por ejemplo, AL
designa a la parte baja del registro AX.De igual manera existe AH,AL,BL,BH,CH,
CL,DL y DH.
Toda direccion en modo REAL se descompone en un segmento y un offset, siendo
la representacion grafica tipica SEG:OFFS. Dicha direccion es virtual, es
decir que corresponde con una direccion fisica de longitud maxima 1Mb, y que
calculamos mediante la formula siguiente:
16*SEG+OFFS = direccion fisica.
De esta manera al direccionar la direccion por ejemplo 0:100, estamos
accediendo a la posicion de memoria 0*16+100, es decir a la 100. Se puede por lo
tanto acceder a una misma posicion de memoria fisica(de 0 a 1Mb) de distintas
maneras. Por ejemplo, acceder a la direccion 0:160h o 16h:0 implica acceder a
la misma posicion fisica, la 160h. Si fijamos el segmento, el offset tiene el
papel de indice dentro de un array de 64kb como maximo. Veamos varios ejemplos
practicos, pero antes es necesario conocer lo que son los registros de segmento.
Dispone el procesador de unos registros de segmento, que almacenan el segmento
que se va utilizar en una operacion de acceso a memoria, cargado por el
intermediario de un registro general [no te desmoralices si no lo entiendes
demasiado]
Si te fijaste, en el registro del debug habia unas letras al final. Esto
es lo que quieren decir:
Overflow
NV = no hay desbordamiento;
OV = si lo hay
Que es el overflow? pues si un registro puede almacenar hasta un numero de
2 cifras, si introducimos uno de 3, se desborda.
Direction
UP = hacia adelante;
DN = hacia atras;
Interrupts
DI = desactivadas;
EI = activadas
Sign
PL = positivo;
NG = negativo
Zero
NZ = no es cero;
ZR = si lo es
Esto va a ser util a la hora de comparar numeros.
Auxiliary Carry
NA = no hay acarreo auxiliar;
AC = hay acarreo auxiliar
Parity
PO = paridad non;
PE = paridad par;
Sobre el bit de paridad: Como ya sabes, 1 byte = 8 bits (una letra). Pues para
dar mayor seguridad, cada x cadenas(generalmente en todas) se a¤ade un noveno
bit. Si al recibir todas las cadenas tenemosun numero par de bits de paridad,
quiere decir que todo ha funcionado correctamente.
Carry
NC = no hay acarreo;
CY = Si lo hay
0x04. Haciendo el primer programa
Si! Por fin! Pero.. (joooo!!!) Solo una cosa mas: en el lenguaje ensamblador
se pueden apreciar dos partes en el codigo: la primera es el nombre de la
instrucci¢n, y la segunda, los par metros de la misma. Por ejemplo: sabiendo que
la instruccion "mov" mueve el parametro indicado al registro que mandemos, y que
AX es el acumulador, se podria hacer lo siguiente:
En ms-dos, escribir "debug" teclear "a 0100 assamble".
Para ver una lista extendida de los comandos escribe "help" o bien "?"
Esta orden le indica al debug que queremos comenzar a indicar instrucciones
en la direccion 0100 (os acordais de lo de las celdas?) Normalmente, al
escribir "a" se colocara automaticamente en 0100, pero conviene recordarselo,
ya que si no puede traer problemas.
Una vez hecho esto, teclear lo siguiente:
0CAE:0100 mov ax,0002
0CAE:0103 int 20
0CAE:0105
Comentarios: la instruccion mov ax, 002 mueve el valor HEXA 0002 a ax
(primero le indicamos a donde lo movera, y despues que movera) Int 20 le indica
al programa que hemos terminado.
Para ejecutar nuestro programa escribimos:
-g
Nos saldr el siguiente mensaje:
"El programa ha terminado de forma normal"
Si queremos comprobar el valor de ax tecleamos:
-g 01013
(genera hasta 103)
Nos mostrara el registro:
AX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0CAE ES=0CAE SS=0CAE CS=0CAE IP=0103 NV UP EI PL NZ NA PO NC
0CAE:0103 CD20 INT 20
Los demas pueden cambiar, pero ax debe valer dos.
Otras instrucciones:
La instruccion ADD, suma dos numeros.
Ejemplo:
ADD bx,ax ;Esto sumara A BX el valor de ax (dos en este caso). Por lo
tanto, bx pasara a valer 2h*
*:la h se usa para indicar que es hexadecimal.
Ejercicios: Crea un progama que almacene en cx la suma de dos numeros
cualesquiera,
estando x en ax, e y en bx (p.ej, ax=2,bx=3,cx=2+3)
SOLUCION:
Un posible programa seria este:
-a
0CAE:0100 mov ax,0007 /indica que ax vale 7/
0CAE:0103 mov bx,0004 /indica bx vale 4/
0CAE:0106 add cx,ax /queremos que ax y bx almacenen el valor de nuestros
numeros,
0CAE:0108 add cx,bx /con lo cual estos no se pueden usar para
almacenar la suma. Por
0CAE:010A int 20 /tanto le indicamos que a¤ada al valor de cx
(0000)) el valor de uno de ellos, para luego
0CAE:010C /sumarle el otro /
-g
El programa ha terminado de forma normal
-g 010a
AX=0007 BX=0004 CX=000B DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0CAE ES=0CAE SS=0CAE CS=0CAE IP=010A NV UP EI PL NZ NA PO NC
0CAE:010A CD20 INT 20
Por que aparace CX=000B? Pues porque 000Bh(hexadecimal) = 0011d (decimal)
Y ya est !
0x05. Guardando y cargando programas
A.- GUARDAR:
Para guardar un programa se necesita saber el tama¤o del mismo, indicarle
a cx
lo que ocupa y guardar. Lo mejor es un ejemplo, con el programa anterior:
-a
0CAE:0100 mov ax,0007
0CAE:0103 mov bx,0004
0CAE:0106 add cx,ax
0CAE:0108 add cx,bx
0CAE:010A int 20
0CAE:010C
-n prueba.com
-h 10c 100
020C 000C
-rcx
CX 0000
:000c
-w
Escribiendo 0000C bytes
Explicamos:
n le indica el nombre. Estos archvos tienen la extension "com"
h nos indica el tama¤o que hay entre la celda 010c y 0100. El primer parametro
es la suma (100+ 10c) y el segundo la resta, es decir, el tama¤o de nuestro
programa.
rcx: nos muestra el valor del regisro cx y nos deja modificarlo. CX indica
el espacio que queremos reservar para nuestro programa, en este caso, 000c
w: (write) pues guarda. va a guardar en el primer sitio que pille, es decir,
si en msdos antes de escribir debug aparece C:/ archivos de pepito, ahi se
guardara. Si aparece solo c:/ pues en C...
B.- CARGAR:
para cargar, primero le indicamos el nombre, y despues le decimos hasta
donde cargamos.
Ejemplo:
-debug
-n prueba.com
-l
-u 100 10a
0CFA:0100 B80700 MOV AX,0007
0CFA:0103 BB0400 MOV BX,0004
0CFA:0106 01C1 ADD CX,AX
0CFA:0108 01D9 ADD CX,BX
0CFA:010A CD20 INT 20
la instruccion "l" (load) le indica que cargue el programa cuyo nombre
introducimos.
"u" (unasamble) le dice que nos muestre lo que hay. para evitar ver lineas
que no pertenecen a nuestro programa le indicamos que abra desde 100 hasta 10a.
Y ya esta.
0x06. Condiciones, ciclos y bifurcaciones
A. Teoria
Pues esto sirve si queremos hacer un programa que, por ejemplo, dependiendo
de si quieres o no, te muestre un mensaje por pantalla. O si la contrase¤a es
correcta o no te deja registrarte xD. He aqui cosas nuevas:
Instruccion Funcion
jmp salta a la direccion que le indiquemos e (direccion)
almacena cadenas de texto. Ej: e 105 "hola" 0d 0a "$". 0d 0a
es el valor hexa de intro (retorno de carro)
int 21 ejecuta una determinada funcion dependiendo del valor ah*. Por
ejemplo,
si ah vale 9, muestra un mensaje. (el que se encuentre en dx)
loop [valor] loop trabaja con cx. Si cx es mayor que 0, salta a la direccion
que le indiquemos
dec resta uno a valor. Ej: dec cx
jnz [valor] jnz trabaja con bx. Si bx es distinto a cero salta a valor
jcxz [valor] si cx es cero, salta a valor. Se puede usar bx, ax....
*ah: este registro que nos aparece nuevo, indica lo que debe hacer int 21
B. Practica
La forma mas sencilla de comprender este tema es por medio de ejemplos. (UNI
DE GUADALAJARA). Vamos a crear tres programas que hagan lo mismo: desplegar un
n£mero determinado de veces una cadena de caracteres en la pantalla.
- a100
0C1B:0100 jmp 125 ; brinca a la direcci¢n 125H
0C1B:0102 [Enter]
- e 102 "Cadena a visualizar 15 veces" 0d 0a "$"
- a125
0C1B:0125 MOV CX,000F ; veces que se desplegara la cadena
0C1B:0128 MOV DX,0102 ; copia cadena al registro DX
0C1B:012B MOV AH,09 ; copia valor 09 al registro AH
0C1B:012D INT 21 ; despliega cadena
0C1B:012F LOOP 012D ; si CX>0 brinca a 012D
0C1B:0131 INT 20 ; termina el programa.
Por medio del comando "e" es posible introducir una cadena de caracteres en
una determinada localidad de memoria, dada como par metro, la cadena se
introduce entre comillas, le sigue un espacio, luego el valor hexadecimal del
retorno de carro, un espacio, el valor de linea nueva y por ultimo el simbolo
¡$¡ que el ensamblador interpreta como final de la cadena. La interrupcion 21
utiliza el valor almacenado en el registro AH para ejecutar una determinada
funcion, en este caso mostrar la cadena en pantalla, la cadena que muestra es
la que est almacenada en el registro DX. La instruccion LOOP decrementa
automaticamente el registro CX en uno y si no ha llegado el valor de este
registro a cero brinca a la casilla indicada como parametro, lo cual crea un
ciclo que se repite el numero de veces especificado por el valor de CX. La
interrupcion 20 termina la ejecucion del programa.
Otra forma de realizar la misma funci¢n pero sin utilizar el comando LOOP es
la siguiente:
- a100
0C1B:0100 jmp 125 ; brinca a la direccion 125H
0C1B:0102 [Enter]
- e 102 "Cadena a visualizar 15 veces" 0d 0a "$"
- a125
0C1B:0125 MOV BX,000F ; veces que se desplegara la cadena
0C1B:0128 MOV DX,0102 ; copia cadena al registro DX
0C1B:012B MOV AH,09 ; copia valor 09 al registro AH
0C1B:012D INT 21 ; despliega cadena
0C1B:012F DEC BX ; decrementa en 1 a BX
0C1B:0130 JNZ 012D ; si BX es diferente a 0 brinca a 012D
0C1B:0132 INT 20 ; termina el programa.
En este caso se utiliza el registro BX como contador para el programa, y por
medio de la instrucci¢n "DEC" se disminuye su valor en 1. La instruccion "JNZ"
verifica si el valor de B es diferente a 0, esto con base en la bandera NZ, en
caso afirmativo brinca hacia la direcci¢n 012D. En caso contrario contin£a la
ejecuci¢n normal del programa y por lo tanto se termina.
Una £tima variante del programa es utilizando de nuevo a CX como contador, pero
en lugar de utilizar LOOP utilizaremos decrementos a CX y comparacion de CX a 0.
- a100
0C1B:0100 jmp 125 ; brinca a la direcci¢n 125H
0C1B:0102 [Enter]
- e 102 "Cadena a visualizar 15 veces" 0d 0a "$"
- a125
0C1B:0125 MOV DX,0102 ; copia cadena al registro DX
0C1B:0128 MOV CX,000F ; veces que se desplegara la cadena
0C1B:012B MOV AH,09 ; copia valor 09 al registro AH
0C1B:012D INT 21 ; despliega cadena
0C1B:012F DEC CX ; decrementa en 1 a CX
0C1B:0130 JCXZ 0134 ; si CX es igual a 0 brinca a 0134
0C1B:0132 JMP 012D ; brinca a la direcci&oaute;n 012D
0C1B:0134 INT 20 ; termina el programa
En este ejemplo se usa la instruccion JCXZ para controlar la condici¢n de salto,
el significado de tal funcion es: brinca si CX=0
El tipo de control a utilizar depender de las necesidades de programaci¢n
en determinado momento.
Ejercicios: En funcion de lo visto deberias ser capaz de crear un programa
que imprima tu nombre UNA vez por pantalla. Te crees capaz?
Solucion:
Una posible solucion seria esta:
-a 100
0CAE:0100 jmp 125
0CAE:0102
-e 102 "Hola, soy x" 0d 0a "$"
-a 125
0CAE:0125 mov dx,0102
0CAE:0128 mov cx,0001
0CAE:012B mov ah,09
0CAE:012D int 21
0CAE:012F int 20
0CAE:0131
-g
Hola, soy x
El programa ha terminado de forma normal
0x07. Alguna cosilla mas
A la hora de crackear (Si ese es el objetivo!) debes saber lo que es la pila
(donde se almacenan las cadenas) y la instruccion "cmp" esta compara dos valores
y en funcion de esto hara una cosa o no (te dejara registrarte...)
Si te interesa este tema, te aconsejo de que busques guias que te ayuden mas
en el mundo del assambler, esto es solo el principio....
Se me olvidaban los saltos condicionales! Pues estos hacen x cosa en funcion
de como haya ido la comparacion. Ejemplo:
CMP EAX,EBX
JE 0102
Mande?? Si, veras: compara EAX con EBX. Estos podrian contener por ejemplo
el serial bueno y el que nosotros hemos introducido. Si son iguales (Jump if
Equal) pues salta a 102, donde podria comenzar el c¢digo que nos dice que
estamos registrados. Esto es solo un ejemplo.
Aunque podr¡a saltar siempre (JMP) Saltar si vale cero (JZ) si no vale cero
(JNZ) si no son iguales... (JNE) etc etc etc. Pero esos son los mas usados.
0x08. Cracking.
A.Tecnicas de proteccion.
Pues hay pogramas que hay que pagar para usar. Te dejan un tiempo para que
los pruebes, y despues... se acabo. Por supuesto, no se borran, ya que ES ILEGAL
que un programa borre archivos sin la autorizacion del usuario. He aqui los
sistemas de proteccion mas comunes (por d4rkm4st3r, numero anterior):
*******************************************************************************
*********************** Sistemas de Proteccion Por Tiempo**********************
*******************************************************************************
Los sistemas de proteccion por tiempo pueden operar de distintas formas:
*El software COMPRUEBA SI HAN TRANSCURRIDO X CANTIDAD DE DIAS desde la
instalacion del mismo, y si es asi el software procede a su salida inmediata.
Durante la salida del software este puede mostrar algun mensaje informando al
usuario del hecho en cuestion (The Evualuation Period has expired).
*El software COMPRUEBA SI HA LLEGADO A UNA FECHA LIMITE, si es asi procede de
la misma manera que en el caso anterior. La diferencia esta en que el
software dejara a partir de una fecha determinada y no volvera a funcionar
si se vuelve a instalar.
*******************************************************************************
************************ Sistema de Proteccion Por Nags************************
*******************************************************************************
Este sistema no es propiamente un sistema de proteccion, sino es un sistema
para molestar al usuario del software y recordarle q debe adquirir el software
original. Estas son cuadros de dialogo q aparecen al inicio o al final de la
aplicacion y estan activos hasta q el usuario un determinado boton o se termina
una cuenta atras.
*******************************************************************************
********************* Sistema de Proteccion Por CD-Check***********************
*******************************************************************************
Este sistema de proteccion comprueba que el CD del software se encuentra en la
unidad de CD-ROM cada vez q se ejecuta. Estos sistemas no evitan q el CD sea
duplicado, lo q significa q si introducimos una copia funcionara normalmente.
Hay dos variantes de este sistema: en el primero identifica al CD-ROM mediante
la etiqueta q este posee, si el CD tiene la etiqueta esperada continua su
ejecucion. El segundo metodo se ocupa de comprobar si existe un determinado
archivo dentro del CD-ROM, si el archivo existe, continua con la ejecucion. La
dificultad de estos sistemas va aumentando cuando si necesita los datos que hay
en el CD para poder continuar.
***Los juegos, lo usan para que necesariamente tengas que introducir el CD, es
decir, que no baste con que te instales el juego de un amigo....
B. Atacar
Pues el programa no se va a dejar atacar facilmente. Estas son las tecnicas
que usara para protegerse:
*Anti-Debugging: El software usa tecnicas para detectar nuestra presencia y
evitar ser trazado (significa correr un fragmento de la aplicacion con un
debugger). Normalmente Intentara detectar la presencia de un debbuger y parar
la ejecucion del software mientras este presente.
*Encriptacion/Compresion de datos: El software utiliza tecnicas q ocultan el
verdadero codigo del programa hasta q se ejecuta, inutilizando asi cualquier
intento de desamblado del codigo.
Para atacar un programa lo mejor es usar las cadenas conocidas
(pincipalmente mensajes de texto). Lo veras en las practicas.
C. Practicar:
Vas a necesitar un debug (el olly, p.ej) y un editor de textos hexadecimal.
para que el editor? para cambiar los valores, esto no lo hace el debug. Para
que el debug? para ver el programa!!
Esta lecci¢n corre de tu cuenta. Pero, crackmes sencillios hay...
Los crackmes son programas para que la gente practique, y amplie sus
conocimientos. Sin ir m s lejos, en el n£mero anerior de SET te explican uno
paso a paso.
C bis. Practicar
Esto cuenta el doble. Ademas, no te quedes en este texto continua en los
siguientes....
0x09 Despedida y Reflexion
Si este texto llega a publicarse, se confirmara la teoria de que la "scene"
esta en crisis. Hay gente muy buena ahi fuera que posee grandes conocimientos
como para que se tengan que publicar cosas con un nivel... bajo (en relacion al
habitual) Cualquiera que se haya dado una vuelta por la web habra podido
comprobar de que hablo.
Con esto simplemente espero que nos demos cuenta (yo tambien) de que la
scene no son solo los mas "31337", somos todos. Y en SET no solo escriben 3,
todos los lectores pueden hacerlo (mirarme a mi...) Todos los que se quejan del
nivel: ¨Por que no escribis? Comprendo que esteis hasta arriba de examenes
(incluso... 4?6 meses seguidos? ) Pero... y los que escriben?
¨No tienen obligaciones? ¨Viven de esto? ...
Yo, desde luego, no estoy dispuesto a dejar que una de las mejores publicaciones
que ha existido/existe se derrumbe por vagueza. Y si hace falta escribir
cosas sencillas, que reunan otros texos, se escriben. Ya iremos aprendiendo.
Pero ser solidarios, y participar (parece una campa¤a del Domund xD)
Nota final: Como dije al principio es una recopilacion de textos que
circulan libremente por internet. Que os haya servido de ayuda!
¨SIGNIFICA ESTO QUE LA AUDIENCIA PIDE UN NIVEL MAS SENCILLO? (la audiencia es la
que "manda", y si no escribe, es porque no entiende?)
"Alter, Glaube, Geld, Rasse... Was macht das?
(Edad, pasta, raza, religion.... Todo eso que importa?)
En fin, el caso es que espero que os haya servido
Un saludo de ThEnemI.
*EOF*