Hola amigos hoy veremos como resolver el crackme de Nyan que fue publicado en el grupo de CrackSLatinoS al cual le mando un saludo y por publicar este reto...bueno empesemos primero lo analizamos con el ExeInfo PE y a ver que nos dice
y vemos que está programado en Golang un lenguaje que no había escuchado y Google nos dice esto
también no dice que es un ejecutable de 64 bits así que lo abrimos con x64dbg y buscamos los string a ver que nos dice, a ver si encontramos el mensaje correcto o el incorrecto y vemos lo siguiente.
Es mucha basura está claro que aquí no vamos a encontrar nada y como dice Nyan ese es el objetivo que no encuentres como resolverlo... Bueno así que lo ejecutamos y al ingresar alguna contraseña y presionar enter vemos que se cierra de repente no se pausa y eso es por los hilos... Si queremos saber cuantos hilos tiene no vamos a la pantalla de hilos y vemos lo siguiente
Si los detenemos no nos deja trabajar bien... así que por hay no es, bueno se me acaban las opciones así que se me ocurre algo la API que cierra el programa y nos vamos a los módulos donde están las APIs y encontramos la API ExitProcess esta
Si se preguntan que vamos a hacer con esa API, les cuento vamos a seguir el camino que sigue el programa para cerrarse o terminar, ya que al presionar enter se cierra, así que damos doble clic en ella y nos manda a esta parte del código
Como vemos nos manda a una parte sin salida, ese pedazo de código se ejecuta con los hilos y cierra el programa... Pero los hilos no nos importan vamos a seguir el camino y averiguar que call manda llamar esa función y para eso damos clic derecho al push rbp y después clic en encontrar referencias así como en la imagen
Y nos muestra lo siguiente
Como vemos son muchos call que mandan llamar esa función, así que ponemos un breakpoint en cada una y ejecutamos el crackme para después ingresar como contraseña "polomon" y presionamos enter y vemos que se detiene en la siguiente
Vemos que se detiene en una....yo quite los breakpoint para no tener tantos y damos doble clic en ese call y no manda a esta zona
Otra zona que no muestra nada, pero no se apresuren vamos a averiguar de donde mandan llamar esa función...así que primero quitamos el brackpoint para no tener tantos y damos clic derecho en él push rbp y clic en encontrar referencias así como en la imagen
Y nos muestra lo siguiente
Esta vez solo hace referencia a un solo call así que damos doble clic en él a ver donde nos lleva y nos lleva a esta zona
Ahora vamos a dar clic derecho en la comparación(cmp) y después clic en encontrar referencias así como en la imagen
Y nos muestra los siguientes
No vamos a poner breackpoins, damos clic en el primer call y miramos lo siguiente
Como podemos ver hay algunos string que llaman la atención uno de ellos es el que se imprime cuando inicia el programa y otro que no sabemos para qué es... Damos clic en el segundo call y nos muestra el chico bueno o el mensaje correcto
Ese pedazo de código se ejecuta con los hilos y si asemos lo mismo para ver de que parte del código es llamado nos manda a un salto JMP que está abajo... Modificando los saltos podemos imprimir el mensaje correcto, pero ese no es suficiente, tenemos que encontrar el serial y el tercer call no nos lleva a nada así que la opción es el primer call y ponemos un breackpoint en uno de los string así como en la imagen
Nota: en este momento estoy corriendo el crackme no lo cerré por eso me muestra el serial, así que lo cerramos y lo ejecutamos para ver si se detiene donde pusimos el breakpoint....y si se detiene ahora es irnos presionando F8 para ver donde se detiene para que ingresemos el serial y se detiene aquí en este call
así que ponemos un breakpoin en la línea de abajo e ingresamos como serial "polomon" y damos enter y se detiene donde le dijimos al programa
Para revisarlos y echarles una mira dita y no trasearlos con F7 y F8 solo nos ponemos encima de ellos y presionamos enter para ver que contienen o que hacen y nos regresamos con la tecla menos y en uno de ellos vemos que pregunta el número de dígitos del serial y eso lo sé porque ingrese varios seriales distintos con números distintos de dígitos y descubrí que el serial contiene 9 dígitos este es el call
después por casualidad ingrese "123456789" y medio el serial correcto.... Luego mire esa cadena arriba y me dije si pongo "012345678" funcionara algo tiene que ver esa cadena y si funciono después ingrese pedazos de 9 dígitos de esa cadena y funcionaban, no sé porque, pero funcionan así que le hice un keygen tomando pedazos de esa cadena aquí se los dejo
EDITO: El serial solo tiene que tener 9 caracteres pueden ser cualquiera solo con longitud 9 eso lo muestra en la imagen de arriba pero para mas muestra les dejo una imagen entramos en el call ese y yo ingrese como serial "polomon" y vemos que compara la longitud de este serial con 9
Como vemos compara el largo de la cadena y si es 9 elige un ret y sino el otro
Aquí una foto de él
Así que probamos unos cuantos seriales para probar el keygen y nos muestra esto
























No hay comentarios.:
Publicar un comentario