-[ 0x0D ]-------------------------------------------------------------------- -[ Ensamblador orientado al cracking ]--------------------------------------- -[ by ThEnemI ]------------------------------------------------------SET-29-- ENSAMBLADOR ORIENTADO AL CRACKING by ThEnemI 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 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 tambi‚n 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*