Título: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 5 Enero 2012, 08:50 am Tutorial Russian Dolls crackme
Autor: Andrewl información del crackme:http://crackmes.de (http://crackmes.de) Autor del tutorial:UND3R Objetivos: Realizar Keygen Abrimos el crackme directamente, observaremos que nos informa el número de dígitos del serial: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/1.jpg) Si introducimos un serial falso nos mostrará el siguiente mensaje: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/2.jpg) Abrimos el crackme desde OllyDbg y veremos el siguiente Entry Point: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/3.jpg) Buscamos referencias de texto dentro del crackme: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/4.jpg) Notaremos la cadena de texto "Congratulations!", hacemos doble clic para dirigirnos hacia la dirección en donde es utilizada: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/5.jpg) Vemos una instrucción PUSH, encargada de meter el puntero de la cadena de texto en el stack y luego una instrucción JMP SHORT que permite la utilización de la misma call hacia la API MessageBoxA permitiendo el ahorro de instrucciones: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/6.jpg) Si subimos un poco veremos que para que el crackme nos muestre el mensaje de "Congratulations!" se deben cumplir ocho comparaciones. Si alguna de las ocho nos da como resultado cero (Activación de la bandera ZF) nos mostrará el mensaje equivalente al introducir un serial falso. Para obtener el mensaje de un serial correcto se debería cumplir las siguientes afirmaciones: Citar 00402D78 . 807C24 11 00 CMP BYTE PTR SS:[ESP+11],0 Stack SS:[0012FAC5]=01 00402D7F . 807C24 14 00 CMP BYTE PTR SS:[ESP+14],0 Stack SS:[0012FAC8]=01 00402D86 . 807C24 13 00 CMP BYTE PTR SS:[ESP+13],0 Stack SS:[0012FAC7]=01 00402D8D . 807C24 17 00 CMP BYTE PTR SS:[ESP+17],0 Stack SS:[0012FACB]=01 00402D94 . 807C24 16 00 CMP BYTE PTR SS:[ESP+16],0 Stack SS:[0012FACA]=01 00402D9B . 807C24 15 00 CMP BYTE PTR SS:[ESP+15],0 Stack SS:[0012FAC9]=01 00402DA2 . 807C24 10 00 CMP BYTE PTR SS:[ESP+10],0 Stack SS:[0012FAC4]=01 00402DA9 . 807C24 12 00 CMP BYTE PTR SS:[ESP+12],0 Stack SS:[0012FAC6]=01 * (Otra manera sería invertir los nemónicos de instrucciones JE SHORT por JNE SHORT) También vemos un CALL ESI llamativo ya que este podría ser el encargado de comprobar si el serial introducido corresponde a un serial válido, coloquemos un BP en él: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/7.jpg) Iniciamos el crackme (F9) e introducimos un serial falso: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/8.jpg) Notaremos que se ha detenido en nuestro BP: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/9.jpg) Entramos al CALL ESI y veremos lo siguiente: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/10.jpg) Traceamos algunas instrucciones hasta llegar a la instrucción XOR: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/11.jpg) Si pasamos la instrucción XOR (F7), notaremos que han cambiado algunas instrucciones posteriores a JNZ SHORT. Esto se debe a una función de descifrado en donde el contenido de ESI es alterado producto de la operación booleana XOR entre [ESI] y 76, guardando el resultado en el operando de destino (dentro de ESI). Luego de eso es incrementado ESI para apuntar a las siguientes instrucciones y disminuido ECX, este segundo registro es utilizado como contador de bucle ya que luego de SUB ECX,1 hay un nemónico de instrucción de tipo salto condicional en donde salta a la instrucción XOR si el resultado de la instrucción SUB ECX,1 es distinto de cero: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/12.jpg) Colocamos un BP a continuación de JNZ SHORT e iniciamos el crackme (F9): (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/13.jpg) Veremos una serie de instrucciones descifradas: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/14.jpg) Quitamos el BP y traceamos (F7), notaremos las siguientes instrucciones encargadas de la validación del serial: Código: 0FB648 03 MOVZX ECX,BYTE PTR DS:[EAX+3] ; mueve el cuarto valor del serial a ECX En caso de que la comparación de como resultado la activación de la bandera Cero (ZF), se moverá dentro de EDX el byte 1: Código: MOV BYTE PTR DS:[EDX],1 (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/15.jpg) Si miramos el valor de EDX en los registros de propósito general de 32 bits veremos que EDX apunta a una de las ocho direcciones que debe contener 1 byte para que el serial sea considerado como válido: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/16.jpg) Si seguimos traceando (F7) notaremos una función encargada de cifrar las instrucciones previamente descifradas: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/17.jpg) Seguimos traceando (F7), veremos nuevamente el procedimiento de descifrado: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/18.jpg) Colocamos un BP a continuación de la instrucción JNZ SHORT: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/19.jpg) Iniciamos nuevamente el crackme (F9) y notaremos que se repiten nuevamente los procedimientos: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/20.jpg) podríamos resumirlo de la siguiente manera: -descifra las instrucciones a ejecutar -ejecuta las instrucciones descifradas encargadas de verificar el serial -cifra las instrucciones previamente ejecutadas (Lo más probable es que el programa cifre las instrucciones ejecutadas para evitar que al retornar del CALL ESI queden descubiertas todas las instrucciones de comprobación del serial, al igual que luego de introducir un serial si es dumpeado el ejecutable, quedarían expuestas las comprobaciones.) Si seguimos traceando notaremos que siempre se repiten las mismas funciones: Código: 0015E028 0FB648 03 MOVZX ECX,BYTE PTR DS:[EAX+3] ; mueve el cuarto valor del serial a ECX Por lo que podríamos crear un script de ODbg encargado de almacenar todas las comparaciones que realiza. Al realizar comprobaciones de los datos obtenidos por el script, los serial ingresados eran considerados como incorrectos por lo que por lógica deberían haber más comparaciones que si se cumplen se introduce un byte 0, por lo que encontré funciones muy similares pero con la gran diferencia que si estas se cumplían en vez de poseer la instrucción MOV BYTE PTR DS:[EDX],1 a continuación de JNZ SHORT, contenían la instrucción MOV BYTE PTR DS:[EDX],0, a consecuencia de esto cree un script que en un documento de texto me mostrara la comparación junto con un SI o un NO en donde SI es introducido cuando la instrucción siguiente a JNZ SHORT es MOV BYTE PTR DS:[EDX],1 y un NO cuando la instrucción siguiente a JNZ SHORT es MOV BYTE PTR DS:[EDX],0 Script: Código
El script debe ser ejecutado de la siguiente forma: 1)colocar BP en CALL ESI 2)iniciar el crackme (F9) 3)introducir el serial: 12345678 (ya que nos dará la referencia de la posición del dígito que se está comparando) 4)Se detendrá en el BP se debe quitar y entrar dentro del CALL (001CFFE8 55 PUSH EBP) El script debe ser detenido una vez que hemos presionado aceptar a la alerta generada por la API MessageBoxA del serial incorrecto. Una vez terminado el script si abrimos log.txt (documento de texto creado por el script) veremos lo siguiente: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/21.jpg) En la primera linea: el cuarto carácter es comparado con m y si este se cumple mueve dentro de EDX el byte 1. Ya que el script logea las comparaciones de manera secuencial, la lógica sería buscar desde abajo hacia arriba una comparación con SI y luego buscar hacia abajo la misma comparación con un NO, si se encuentra la comparación el dígito es inválido en caso contrario el dígito es válido, para optimizar la búsqueda utilizaremos Excel, seleccionamos todo el contenido de log.txt y lo pegamos dentro de una nueva hoja de Excel: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/22.jpg) Nos dirigimos a Datos->Filtro: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/23.jpg) En la ubicación A1 ("Log:") contendrá un botón: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/24.jpg) Seleccionamos el botón y nos vamos a Filtros de texto-> Comienza por...: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/25.jpg) He introducimos 1: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/26.jpg) De esta forma Excel filtrará de manera secuencial todos los datos que comienza con 1, en otras palabras nos mostrará todas las comparaciones realizadas con el primer dígito: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/27.jpg) Copiamos el contenido filtrado en un nuevo documento de texto, nos dirigimos hasta el final y comenzamos a buscar "SI" de la siguiente manera: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/28.jpg) De manera lógica estamos buscando la última comparación válida del dígito 1 Ya encontrado el "SI" buscamos hacia abajo la igualdad válida para saber si es anulada por un "NO" (En este caso está a la vista, pero en los demás dígitos no son tan visibles las igualdades válidas que más abajo se ven afectadas por un "NO"): (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/29.jpg) Si no se encuentra la comparación hemos encontrado un dígito válido: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/30.jpg) en caso contrario debemos volver al "SI" encontrado y buscar nuevamente "SI" hacia arriba ya encontrado el primer dígito se debe filtrar nuevamente en Excel pero esta vez por los que comienzan en 2 y repetir el procedimiento de búsqueda hasta encontrar los ocho dígitos. Una vez encontrado los ocho dígitos al introducir el serial, el crackme nos mostrará el siguiente mensaje: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/31.jpg) Ya con un serial válido podemos obtener un Keygen: 1)debemos introducir el serial válido. 2)EJ: CAaC5EEs. 3)Si queremos saber todas las posibilidades del primer dígito vamos introduciendo números desde el "0" al "9", luego letras mayúsculas desde la "A" a la "Z" y letras minúsculas desde la "a" a la "z". Pero el mensaje del serial incorrecto nos es un poco molesto, por lo que podríamos borrarlo, nos dirigimos a la string: "sorry, try harder!": (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/32.jpg) y llenamos con instrucciones NOP (Not operand) y agregamos un JMP tal como lo muestra la imagen: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/33.jpg) Guardamos los cambios y ya podremos obtener los dígitos válidos para cada posición del serial con mayor comodidad. La lista completa de posibles combinaciones es la siguiente: Código: 1ºD 2ºD 3ºD 4ºD 5Dº 6Dº 7ºD 8ºD Keygen: Para el Keygen he tenido que suprimir las letras Ñ y ñ en cuanto a la generación del serial debido a que estoy iniciándome en el lenguaje ASM y estoy utilizando procedimientos pre-diseñados por lo que desconozco como solucionarlo y como trabajar directamente con APIS por lo que el Keygen es muy simple, pero cumple con su finalidad, aquí el código de fuente: Código
En el cada vez que presionemos una tecla nos mostrará seriales distintos: (http://r00t-pssw.webcindario.com/images/Crack/Russian%20Dolls%20crackme/34.jpg) IMPORTANTE: Si el serial es copiado directamente y no es introducido de manera manual o ni si quiera un dígito, el crackme lo considera como inválido pudiendo ser este verdadero. UND3R Pack de descarga: -Crackme modificado sin el mensaje de serial incorrecto -Código de fuente Keygen .asm -Seriales correctos.txt -Crackme -Keygen -Script -log.txt LINK: http://www.mediafire.com/?nxlnml8nx4i8dvb (http://www.mediafire.com/?nxlnml8nx4i8dvb) Título: Re: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 5 Enero 2012, 09:13 am Adjunto el .doc http://www.mediafire.com/?tfwab3pm1r1g9ir (http://www.mediafire.com/?tfwab3pm1r1g9ir)
Título: Re: [Tutorial] Russian Dolls crackme Publicado por: Tinkipinki en 5 Enero 2012, 13:50 pm Hola .:UND3R:.
Excelente trabajo y documentacion..... ;-) Saludos cordiales Título: Re: [Tutorial] Russian Dolls crackme Publicado por: Иōҳ en 5 Enero 2012, 14:13 pm En realidad son 2 caracteres para cada posición.
y este crackme es el del concurso de cls, y aún no termina :silbar: Título: Re: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 5 Enero 2012, 15:46 pm En realidad son 2 caracteres para cada posición. y este crackme es el del concurso de cls, y aún no termina :silbar: Lo encontré en otra página: http://crackmes.us/read.py?id=161 (http://crackmes.us/read.py?id=161) En cuanto a esos concursos de CLS como se mandan las soluciones? :S xd Hola .:UND3R:. Excelente trabajo y documentacion..... ;-) Saludos cordiales Muchas gracias Tinkipinki, hace tiempo que no sabía de ti, espero que estés muy bien Saludos Saludos Título: Re: [Tutorial] Russian Dolls crackme Publicado por: Иōҳ en 5 Enero 2012, 16:01 pm Corrige el tute, tienes errores u.u
Título: Re: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 5 Enero 2012, 16:17 pm Cual es el error? si me dan siempre seriales válidos :huh:
Título: Re: [Tutorial] Russian Dolls crackme Publicado por: Иōҳ en 5 Enero 2012, 18:16 pm na error mío xD
Título: Re: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 5 Enero 2012, 18:20 pm >:( jeje, Saludos
Título: Re: [Tutorial] Russian Dolls crackme Publicado por: karmany en 5 Enero 2012, 18:24 pm Feliz año!! y qué magnifico trabajo UND3R !!!
Sé lo que cuesta escribir un pedazo tutorial como ese. Seguro que muchos te lo agradecerán. Y la cantidad de imágenes. He guardado una copia en formato .png de todo el hilo. Si quieres pon el enlace en Crackmes/tutoriales para que no se pierda, que lo dejé abierto. PD. Recuerdo que hace poco eras tú el que pedía consejo, ahora vas a ser tú el profesor :-P Título: Re: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 5 Enero 2012, 18:31 pm Feliz año!! y qué magnifico trabajo UND3R !!! Sé lo que cuesta escribir un pedazo tutorial como ese. Seguro que muchos te lo agradecerán. Y la cantidad de imágenes. He guardado una copia en formato .png de todo el hilo. PD. Recuerdo que hace poco eras tú el que pedía consejo, ahora vas a ser tú el profesor :-P Aun recuerdo cuando comencé siempre recibiendo la ayuda de todos, tanto la tuya como la de los demás usuarios con grandes conocimientos, soy y seré siempre el aprendiz, Muchísimas gracias por notar el esfuerzo del tutorial, comencé a las 2:00 de la mañana y terminé a las 5:00 me ha costado una larga noche pero con saber que una persona valora mi esfuerzo puedo descansar tranquilo :) Muchas gracias Karmany, saludos Título: Re: [Tutorial] Russian Dolls crackme Publicado por: x64core en 7 Enero 2012, 09:24 am Hey! Felicidades!
Ya vi el code ASM :3 esta bien ! ;-) Título: Re: [Tutorial] Russian Dolls crackme Publicado por: jackgris en 7 Enero 2012, 17:02 pm Muy bueno el tute UNDER ;-)
Título: Re: [Tutorial] Russian Dolls crackme Publicado por: .:UND3R:. en 7 Enero 2012, 17:04 pm Hey! Felicidades! Ya vi el code ASM :3 esta bien ! ;-) Muchísimas gracias RHL :D Muy bueno el tute UNDER ;-) Muchas gracias jackgris :D :D |