RareGaZz16:(r16_02):21/10/1999 << Back To RareGaZz16


---- { R16_02 } -------------------------------------------------------------- -------- { LA GUIA PERFECTA PARA COMENZAR A CRACKEAR } ----------------------- --- { ANTIKTON } INDICE ------ 0. NOTA DEL AUTOR. 1. GUIA DE ENSAMBLADOR (ASM) ENFOCADA AL CRACKING. 2. CONFIGURACION Y USO DE SOFTICE. 3. NUESTRO PRIMER CRACKING. 4. URLs. 5. CIERRE DE EDICION. -------------------- | 0. NOTA DEL AUTOR. | -------------------- ------------------------------------------------------- Hiz, soy Antikton y voy a intentar explicaros como se crackea; pero antes voy a dejar unos puntos claros: 1.- Si no tienes ni puta idea de lo que es crackear, mejor que dejes de leer este fichero y lo borres. 2.- Si sabes lo que es pero no tienes ni puta idea de programacion (lo que se dice nada de nada) y crees que vas a poder estar crackeando programas comerciales en unos minutos, gilipollas!!! tu te crees que esto es coser y cantar??? 3.- Perdonad si me equivoco al escribir o solo pongo los signos al final (como los ingleses) pero es la economizacion del lenguaje. 4.- Si tienes unos poquillos conocimientos de programacion y te gustaria crackear, te felicito porque has dado con el manual adecuado (digo yo) pero necesitaras dos o tres meses para empezar a crackear tu solito :) 5.- NOTA: Este documento con la informacion que en el aparece, es solo para uso de aprendizaje. El autor no se hace responsable de lo que la gente haga con ello. ;) 6.- Bueno, comenzemos a crackear X) El articulo esta enfocado en crackear programas para Windows 95/98 de esos que piden un password o que piden un nombre y un codigo ( o sea, la mayoria :) ------------------------------------------- | 1. GUIA DE ASEMBLER ENFOCADA AL CRACKING. | ------------------------------------------- -------------------------------- Antes de nada, si no sabes lo que es ASM o lo que es un Looping o un FOR...NEXT, etc. te recomiendo que dejes de leer este manual ya que no tienes el nivel suficente para leerlo :P REGISTROS (Registers) --------------------- Los registros son basicamente sitios por defecto en donde se guardan datos. Los unicos por los que os teneis que preocupar son: (E)AX, (E)BX, (E)CX y (E)DX. (La (E) solo es para cuando se debuguea en codigo de 32 bit) Tambien estan los registros de parejas: DS:SI ; pueden ser usados como fuente (origen) para operaciones de cadenas. ES:DI ; usado como el destino para las operaciones de cadenas. Entender los registros no es muy importante para crackear, pero lo que si tienes que saber es que son variables para el almacenamiento de datos :) FLAGS ----- Los Flags son esencialmente como los registros excepto que los Flags solo pueden contener valores especificos, como verdadero o falso (1 o 0), etc. Los flags son calculados por comandos como CMP y son usados para comprobar el resultado de una llamada (CALL), por ejemplo: CMP AX,BX ; compara AX con BX, si son iguales el Flag 0 cambia JZ 00124531 ; si el flag 0 ha cambiado, salta a 00124531, si no continua LA PILA (STACK) Y LOS PUSH AND POP (PONER Y QUITAR) --------------------------------------------------- Antes de cualquier funcion de llamada (a partir de ahora CALL), un programa debe PONER (a partir de ahora de diremos PUSH) unos parametros que la funcion espera encontrar en la pila (tecnicamente llamado Stack). Los datos se colocan de una manera especial. Piensa lo siguiente. Piensalo como si fuera una "pila" (stack) de platos, el primer plato que ponemos (al hacer un monton) se queda abajo y sera el ultimo en coger; y el ultimo en poner (el de arriba), es el primero en coger. Recuerda esto cuando estes sobre una CALL, los parametros son cogidos en orden inverso. Te pongo un ejemplo para que te quede claro: La funcion API de Windows GetDlgItemTextA requiere los siguientes parametros: (1) Manejo de la ventana de dialogo (Handle Dialgo Box) (2) Identificador del Control (3) Direccion del Buffer del Texto (4) Tamaño maximo de la cadena Por tanto, esto puede ser pasado de este modo (de forma inversa, para luego cogerlo ordenadamente): MOV EDI,[ESP+00000220] ; Coge en EDI el Handle Dialog Box PUSH 00000100 ; PUSH (4) - Tamaño maximo de la cadena PUSH 00406130 ; PUSH (3) - Direccion buffer de texto PUSH 00000405 ; PUSH (2) - Identificador de Control PUSH EDI ; PUSH (1) - Handle Dialog Box CALL GetWindowText ; Llama (CALL) a la funcion GetWin... Facil, no? esto sera importantea la hora de crackear aplicaciones que piden numeros de serie. Si conocemos la direccion del buffer para nuestro numero de serie (es decir, donde se encuentra almacenado el numero que le hemos metido en la memoria), en este caso 00406130, solo hay que hacer un breakpoint y normalmente terminaremos alrededor del procedimiento que genera el numero de serie bueno. POP se usa para borrar el primer "plato" de la pila. Normalmente, despues de hacer uns PUSH y haber una llamada, se colocan varios POP para borrar los datos innecesarios. AND --- - Uso: AND dest, orig - Fin: Lleva a cabo una operacion de tipo AND de las dos entradas, reemplazando el dest con el resultado. - Ejemplo: AND BX, 03h No hay mucho que decir. Esto es importante para cuando necesitemos hacer un generador de numeros de serie para un programa :) CALL (Llamada) -------------- - Uso: CALL address (direccion) - Fin: Ejecuta una funcion en la direccion "address" - Ejemplo: CALL 10284312 Una vez que la funcion termine, el codigo continua en la linea siguiente de CALL (es como un GOSUB) CMP --- - Uso: CMP dest, orig - Fin: Resta el orig del dest y actualiza en Flag - Ejemplo: CMP AX, 03h Esta instruccion es muy importante para nosotros (los crackers) :) Esta colocado muchas veces en el programa para verificar algo; por ejemplo que el numero de serie que introducimos es el mismo que el que tiene el programa o genera ;) INT (Interrupcion) ------------------ - Uso: INT interrupcion - Fin: Llama a una funcion general (normalmente de la BIOS) - Ejemplo: INT 10h Esta funcion es muy comun en programas de DOS, pero no lo veremos mucho ya que me voy a dedicar (como he dicho antes) al Cracking en W95. Normalmente los parametros son guardados en los registros por defecto (AX, BX, CX, ...) JMP (Salto) ----------- - Uso: JMP direccion - Fin: Equivale a un GOTO. Salta a la seccion de codigo de la direccion. - Ejemplo: JMP 00402011 JMP es un salto incondicional. Tan simple como un GOTO :) Hay muchas variantes. Las mas importantes son: JZ o JE - Salta si el Flag 0 es cambiado JNZ o JNE - Salta si el Falg 0 no es modificado Normalmente estan despues de uns intruccion de CMP, por ejemplo: CMP numseriebueno, numseriemalo ; compara los num. de serie JNE fueradeaki ; si no son iguales, salta a otra parte del codigo MOV (Mover) ----------- - Uso: MOV dest, orig - Fin: Copia el byte o el valor de la palabra desde el orig al dest - Ejemplo: MOV AX, DX Lo veras muy a menudo cuando estes stepping (ejecutando linea por linea. una cosa, a lo mejor me confundo y lo llamo stepting o steping, pero me refiero a esto, pa cuando lo veais). MOV es como si fuera LET dest=orig Hay algunas variantes como MOVSX, pero es raro. RET (Retorno) ------------- - Uso: RET - Fin: Para volver de una funcion (Como si fuera RETURN) - Ejemplo: RET Normalmente lo veras el final de una funcion, y solo dice que vuelva a la direccion de la llamada (CALL) para continuar. LEA (Como LET) -------------- - Uso: LEA dest, orig - Fin: Hace que el dest sea igual que el orig - Ejemplo: LEA EAX, [EBP-34] Hace que EAX=EBP-34, facil, no? ------------------------------------ | 2. CONFIGURACION Y USO DE SOFTICE. | ------------------------------------ --------------------------------------- Contenido: 2.1. Configuracion de SoftIce 2.2. Uso y teclas de SofIce 2.3. Comandos importantes para el Cracking 2.1. CONFIGURACION DE SOFTICE ----------------------------- Para comenzar a usar SoftIce para Windows 95 (gracias a NuMega), tenemos que ver si se cargan las librerias; para ello comprueba que el fichero WINICE.DAT en el apartado "Examples of export symbols that can be included for Chicago" no tengan delante el punto y coma, y verifica que las rutas de los ficheros a tu windows sean correctas. Si quieres tener menos memoria ocupada, quita los puntos y comas solo a KERNEL32.DLL, USER32.DLL y GDI32.DLL que son los mas importantes. Logicamente tendras que reiniciar el ordenador y volver a cargar SoftIce. 2.2. USO Y TECLAS DE SOFTICE ---------------------------- La pantalla de SoftIce es parecida a la siguiente (por lo menos en la ver. 2, porque la v3.2 cambia): ------------------- | Ventana Registros | R - editar ; Aqui estan los valores de los registros |-------------------| | Ventana Datos | D - ver E - editar ; Es donde vemos la memoria |-------------------| hex. y dec. y la direccion | Ventana Codigo | U - ver A - Inserta ; Vemos el codigo en ASM |-------------------| conforme se va ejecutando | Ventana Comandos | ; Aqui pondremos los comandos ------------------- Otras teclas importantes son: F5 / Ctrl+D -> Ejecuta F10 -> Paso a Paso F11 -> Funcion en Funcion t -> traza una llamada 2.3. COMANDOS PARA EL CRACKING ------------------------------ Bueno, para explicar los comandos que mas usaremos (que son muy pocos) voy a deciros el proceso generico para el cracking de un programa. Bien, resulta que cuando a un programa le damos a la opcion del menu REGISTER (aparece en muchos programas), sale una ventana que nos pide, por ejemplo, el nombre y el codigo. Pues nuestra tarea sera interceptar el lugar en donde el programa compara nuestro codigo con el generado por el mismo para comprobar si es correcto o erroneo. Facil, eh? pues si, los programas sencillos si. Primera pregunta, ¿como interceptar cuando el programa recoge dichos datos? Para ello hay que colocar un BreakPoint. Un BP sirve para detener el programa y ver el codigo ASM en la funcion que nosotros le digamos. Por ejemplo que se detenga cuando recoga el codigo que introducimos. Las dos funciones mas usadas para recoger las cadenas que introducimos son: GetDlgItemTextA y GetWindowTextA Bueno, para ver como se usa y como se crackea (que es el tema que nos ocupa) pasemos al siguiente apartado. ----------------------------- | 3. NUESTRO PRIMER CRACKING. | (from ED!SON tutorial) ----------------------------- ---------------------------------------------- Antes de arrancar W95 o W98, tenemos que arrancar en DOS y ejecutar WINICE el cual se encargara de arrancar el Windows. 3.1. PROTECCION POR NUMERO -------------------------- - Target: Task Lock 3.00 - Protection Type: Una simple proteccion de introduzca un numero - Tool Needed: SoftIce 2.0 o sup. * PASO 1: Ejecutar el programa TaskLock ;) * PASO 2: Buscar la opcion REGISTER. Introducir un numero al azar y pulsar OK. * PASO 3: Ohh! no es correcto :( (todavia) ;) * PASO 4: Volver a poner un numero y antes de pulsar Ok hay que colocar un BreakPoint (BP) Para ello pasaremos a SoftIce pulsando Ctrl+D y pondremos: BPX GetWindowTextA pulsamos ENTER y saldremos de SoftIce pulsando de nuevo Ctrl+D y ahora si, pulsamos OK y... :( * PASO 5: ein! otra vez ese estupido mensaje de numero incorrecto !!! Bueno, esta claro que la funcion que usa para coger el numero no es GetWindowTextA Bueno, ponemos otra vez el numerito y pulsamos de nuevo Ctrl+D Ahora borraremos el BrakPoint de antes que no vale para nada con el comando BC 0 (es 0 porque es el primero. Si tuvieramos varios BP, podriamos listarlos con BL y ver el numero que es, en nuestro caso, con BL pondria 00) BPX USER32!GetWindowsTextA C=01 Bueno, ahora probaremos con BPX GetDlgItemTextA damos a enter y salimos (Ctrl+D) pulsamos OK y... :) * PASO 6: Bingo!!! ahora estamos dentro de SoftIce :) Estamos al comienzo de la funcion GetDlgItemTextA, pero para ver desde donde es llamada pulsamos F11 Ahora debes desconectar el BP, pon bd 0 (si necesitas activarlo despues, que no lo necesitaremos es be 0) * PASO 7: La primera linea que aparece es: CALL [USER32!GetDlgItemTextA] Pero que hay antes?? Para ello pulsaremos unas cuantas veces CTRL+flechaarriba hasta ver lo siguiente: RET ; final de la func. anterior PUSH EBP ; comienzo de la funcion MOV EBP, ESP ; ... SUB ESP, 0000009C ; ... PUSH ESI ; ... > LEA EAX, [EBP-34] ; EAX=EBP-34 PUSH EDI ; ... MOVE ESI, ECX ; ... PUSH 32 ; Guarda: la long. max. > PUSH EAX ; Guarda: direccion del buffer :) PUSH 000003F4 ; Guarda: ... PUSH DWORD PTR [ESI+1C] ; Guarda: ... CALL [USER32!GetDlgItemTextA] ; coge el texto y comienza la func. Los PUSH, como dije, son para guardar valores para su uso posterior :) Las lineas importantes les he puesto un > delante; observemoslas. Vemos que el buffer de texto se guarda en EAX y cuanto vale EAX? EAX=EBP-34 Bien, ahora ponemos d ebp-34 para ver la memoria en ese valor. Jeje, vemos en la ventana de Datos el numero que hemos puesto :) *PASO 8: Ahora, lo que hay que hacer es buscar donde se hace la comparacion entre nuestro codigo y el codigo bueno. Para ello hay que ir paso por paso de instrucciones pulsando F10 hasta encontrar algo relacionado con EBP-34 (que es en donde esta nuestro numero). Tras unos pocos F10 nos encontramos lo siguiente: > LEA EAX, [EBP+FFFFFF64] ; EAX=EBP-9C LEA ECX, [EBP-34] ; ECX=EBP-34 (Ahora nuestro numero PUSH EAX ; Guarda EAX. esta en ECX) PUSH ECX ; Guarda ECX > CALL 00403DD0 ; Llama a una funcion ADD ESP, 08 ; ... TEST EAX, EAX ; Chequea el resultado de la funcion JNZ 00402BC0 ; Salta si no es 0 Yo veo claramente como se recoge una variable en EAX, otra en ECX (nuestro numero), se llama a una funcion ( que suponemos que es la que genera el numero bueno) y despues es comparada. Bien, entonces ¿que se esconde bajo EAX (EBP+FFFFFF64) ? pues si, el numero correcto. Ponemos D EAX y aparecera el numerito en la ventana de Datos ;) Ahora lo que tenemos que hacer es ponerle dicho numerito en el programa cuando lo pida y ya esta :) ---------- | 4. URLs. | ---------- ----------------------------------------------------------------- Tengo que decir que dentro de poco hare un hueco en internet para ayudaros a los problemillas que tengais. La URL sera http://members.tripod.com/~antikton/cracking/ Bueno, ahora os pongo las URLs de los programas que he usado: - SoftIce: Busca en http://astalavista.box.sk o dentro de poco en mi pagina web. - TaskLock: Busca en http://www.filez.com o en otro buscador de FTP o dentro de poco en mi web. ----------------------- | 5. CIERRE DE EDICION. | ----------------------- ---------------------------------------------------- Bueno, en esta articulo hemos aprendido asembler (enfocado al cracking), el manejo de SoftIce y a crackear un programa basado en proteccion por numero. No esta mal para ser el primer numero, pero ya iremos progresando poco a poco y a ver si alguien me echa una mano (antikton@rocketmail.com) Si no habeis entendido algo (porque no me haya expresado bien) o necesitais cualquier cosa, o teneis una sugerencia o lo que sea (dar animos para que saquemos el siguiente numero, si no, no lo saco), hazmelo saber mandandome un e-mail a antikton@iname.com byez ;) Web : http://come.to/antikton e-mail: antikton@iname.com