[Reto] Crackme C Yo-Mismo, nivel 1/10 (Principiantes)

Iniciado por cibergolen, 16 Marzo 2015, 16:42 PM

0 Miembros y 1 Visitante están viendo este tema.

cibergolen

Cita de: Flamer en 19 Marzo 2015, 02:42 AM
Hola tinco como estas...no abia contestado por falta de tiempo trabajo 8 horas diarias y el keygen no lo e hecho por lo mismo y por otro lado en este mismo momento seme quemo el monitor, sigo teniendo problemas con mi pc pero en fin.

Mi analisis el crackme tiene una rutina(un call) donde pregunta si el serial y el nombre son mayores que 6 osea que se permite de 7 digitos en adelante.

Despues de eso mas adelante se encuentra otro call este es el mas importante ya que es el que genera el serial pero no lo genera fasil mente sino que suma los valores ascii del serial que ingresamos menos el primer digito del serial.
Y despues de esto pasa por un ciclo el cual pregunta si es mayor a 100 y si es le xorea 50 y le resta 10 y saldra del ciclo cuando sea menor a 100 y el resultado que quede sera comparado con el valor ascii de la primera letra del nombre que ingresamos el cual tiene que ser igual

asi que aqui importa la primera letra del nombre y el serial a ingresar.

bueno saludos flamer y no fui espesifico con direciones por que estoy desde mi celular

Buen trabajo, Flamer, sólo falta el keygen  :silbar:

Tincopan: Gracias a ti por tratar de resolverlo, para el próximo crackme no colocare la solución..  ::)

Un saludo, y buen trabajo (Todos los que trataron de solucionarlo, pronto vendré con la V2)

d00rt

User: D0000rt
Pass: 0555500

Ahora mismo tengo que ir a la facultad para seguir trabajando en el proyecto de fin de carrera, pero mas adelante si queréis y ya que soy nuevo podría hacer un tutorial de como resolver este Crackme con el Ollydbg, de todos modos agradecer a tincopasan por su amabilidad y ayuda (En cuanto pueda te contesto al MP).

Next Level  ;-)

tincopasan

d00rt: Felicitaciones! como dicen los que saben lo mejor que se puede hacer es un tute de lo aprendido! así que estaría bueno que hagas uno para los que no se animaron a resolverlo.
Saludos


ViejoMajara

¡Hola!

Aunque Flamer lo había explicado resumido, pero perfecto, aquí envío un tutorial para alguien que sea más novato que yo. Es el primero que preparo para los demás, o sea que espero vuestra comprensión.

TUTORIAL PARA RESOLVER EL CRACKME

Corremos el crackme.exe para ver cómo funciona. Sale una ventana en la que nos indica: "Introduzca usuario". Metemos un nombre y pulsamos enter.

En la misma ventana aparece "Introduzca serial". Metemos un número y pulsamos enter.

Como parece que no acertamos, desaparece la ventana.

Miramos cómo está escrito y si está empaquetado con RDG Packer Detector. Nos indica que está escrito en C++ y no detecta packer alguno.

Lo abrimos con OLLY parcheado para su detección por nombre y con todas las opciones de HideOD marcadas.

Lo corremos con F9. Nos sale la ventana anteriormente citada, introducimos nombre y clave como antes, pero ahora en la misma ventana nos indica: "Buen intento".

Pulsamos Debug y Restart y nos lleva al inicio en 401220. Botón Derecho (BD), Search for y All referenced text strings. Vemos "Correcto" y "Buen intento" en dos direcciones distintas. Vamos a esa zona en el debugger.

Brujuleamos por la zona y observamos que en 4013C0 hay CALL 401290, luego un CMP EAX,1 y un JNZ al "Buen intento" si EAX no es 1.

En 4013D3 hay un CALL 4012E9, dos líneas más abajo un CMP [EBP-208],AL y un JNZ al otro "Buen intento" si [EBP-206] y AL no son iguales.

A la vista de lo anterior ponemos BP  en los dos CALL y pulsamos F9. Nos aparece la ventana, la rellenamos como siempre y al dar al segundo  enter se nos para en 4013C0.

Entramos en el CALL con F7 y estudiamos lo que hace. Primero mide la longitud (cantidad de caracteres) del nombre y, si es 6 o menos, retorna EAX=0. En caso de que el nombre tuviese una longitud mayor que 6, mide la longitud (cantidad de cifras) de la clave y si es 6 o menos, retorna EAX=0. Si la longitud de la Clave también es superior  a 6, retorna EAX=1. Cuando sale del CALL, si EAX=0 salta al segundo "Buen intento" y finaliza. Si EAX =1, sigue adelante.

Lo finalizamos, eliminamos el BP en 4013C0 y reiniciamos el crackme, pero ahora meteremos un nombre y una clave de longitud superior a 6. Se nos para en 4013D3.
Entramos en el CALL con F7 y lo estudiamos. Aquí  vemos que suma los valores ASCII de todas las cifras de la Clave excepto la más significativa (la de la izquierda), la hace un XOR 32, al resultado le resta 0A y a la cifra resultante la compara con 64. Si es mayor que 64, a la resultante le hace las mismas operaciones, XOR 32 y resta de 0A, y así hasta que da un resultado menor o igual que 64, en el que sale del CALL poniendo en EAX este valor.

A la salida, en 4013E4, compara EAX con el valor ASCII  de la primera letra de la Clave. Si son iguales nos imprime "Correcto" y termina, y si no, nos larga el primero de los "Buen intento" y termina.

Forma de solución rápida: Reiniciar, poner un BP en 4013E4, correrlo, poner nombre y clave de más de 6 signos y darle a enter. Parará en 4013E4. En el espacio del OLLY donde explica lo que hace, verás la primera letra de la clave que has metido y la que tenía que ser. Pones esta letra la primera de tu nombre y más de seis letras después, y la misma clave que has usado para obtenerla anteriormente y te aparecerá "Correcto".

La otra, prepararte un Keygen. Yo lo he hecho en Python 2.7.
Las operaciones del segundo CALL en el keygen las  puedes hacer en decimal, sustituyendo 32 por 50, 64 por 100 y 0A por 10.
 

Flamer

Hola aqui el KeyGen:


http://ultrashare.net/hosting/fl/a0bda93c07


mas vale tarde que nunca jajaja

saludos Flamer y boy hacer un tutorial en mi blog aver que sale y alo mejor subo el code de mi keygen