Crackme 1 Concurso 11 Del 2013

Este es un viejo tutorial que tenia por hay y decidí publicarlo

Como siempre le pasamos el RDG Detector para ver que tiene y nos
muestra lo siguiente:



    Nos dice que esta compilado en visual Basic 6 y en código nativo el cual lo hace más cil.

El botón lo podemos activar con el VBReFormer pero yo aquí lo boy a activar con el ollydbg seguimos


Empecemos a Reversear



Ahora lo abrimos con el olly y nos muestra lo siguiente:




Como vemos no nos mintió el RDG si esta compilado en Visual basic

Ahora presionamos F9 para ver si se ejecuta normalmente



Y como vemos tiene un método antidebugger y tiene un agujero el mensaje, es por dondevamos a atacar.

Nota: no des clic al botón del mensaje por que se cierra el olly


Bueno reiniciamos todo

Revisamos las Apis y vemos el rtcMsgBox


Vemos que es el 595 y damos Control+N Aparecerá lo siguiente:


Lo pondremos asi:



Luego presionamos F9 y vemos que se detiene en la línea 00402EF0 y mas arriba hay un salto JE:


El cual cambiaremos por un JMP y guardamos los cambios


Luego lo abrimos con el olly y corre perfectamente

Ahora falta activar el botónpara eso usaremos la api EnableWindow pondremos un Break point con el commandBar así:



Daremos F9 y observamos el stack



Y luego traseamos con F8 para salir de las librerías hasta llegar al crackme hasta llegar aquí



Cambiaremos el PUSH 0 por PUSH 1 ¿por que? Por que es el que lo mantiene a False y después guardamos los cambios no boy a decir todo el proceso por que se aria el tutorial mas largo seguimos


Ahora a encontrar el método de generación del serial

Para eso buscamos en las string aparece lo siguiente:


Damos doble clic en el string "Enhorabuena, lo conseguiste. Ahora monta unKeyGen."Para que nos lleve al lugar del desamblado







Hay podemos ver el call que compara el serial y el salto decisivo, si le damos para arriba podemos ver las Apis del Visual Basic como son el rtcMidcharVar y la de vbaLenBstr

  
bueno nos iremos hasta la línea 00403B4B donde se encuentra una api vbaLenBstr y pondremos un Break point y le damos F9.

Pondremos como nombre polomon” y serial 1234567”






Vemos que se detiene justo en el BP y presionando F8 nos devuelve 7 en
EAX que es el largo del nombre de polomon 






Seguimos traseando hasta llegar a la línea 00403B66 hay vemos que es unacomparación donde compara el largo de nuestro nombre por 1 y la siguiente línea es un salto JL donde si el registro SI es mayor o igual a AX entra.



Líneas mas abajo vemos un salto JMP



Lo cual nos lleva a que es un ciclo y dentro de el vemos la api rtcMidcharVar lo cual nos ase pensar que toma letra por letra a si que vamos a ver, para eso ponemos un Break point en la línea 00403BD9 y damos F9 y observamos el registro EAX


Sebe clarito esta tomando las letras por detrás y esta volteando la palabra polomon” lo cual quedaría a sinomolop” observemos el registro EAX en la ultima vuelta del ciclo



Valla buenoesta fue la última y ahora se sale y seguimos traseando con F8 hasta la línea 00403C1C que es un call y damos F7 para poder trasearlo

En la línea 0040358F nos encontramos una comparación y acto siguiente un salto JG que conlleva a un ciclo hasta la línea 00403667y seguimos traseando con F8 hasta aquí



Como vemos toma la n” denomolop” la convierte a su valor ascii y le suma lo largo de el nombre polomon” que es 7 después lo convierte a String que da como resultado u”  y a si sucesivamente hasta tener esta cadena






Después seguimos traseando con F8 hasta la la línea 00403C27 y observamos el registro



Vemos que convierte a mayúsculas una letra si y otra no bueno seguimos traseando con F8 hasta la línea 00403C53que es otro call el cual entraremos con F7.

Observamos que el mismo ciclo pero ahora toma la primera letra de
polomon” que es la p”

Observación: en la primera ves que entro manejaba la palabra nomolop” a ahora la maneja polomon”

Bueno como dijimos toma la p” y la convierte a su valor ascii que es el 112 yle suma 3




Y después lo convierte a String que es s y a si sucesivamente hasta tener estacadena



Bueno seguimos traseando hasta salir de este call hasta la línea 00403C63 y observamos el registro EAX



Vemos que convierte a mayúsculas una letra si y otra no


Bueno seguimos traseando con F8 hasta la línea 00403CDBque es el call de comparación y damos F7 para ver que compara



Como vemos compara 6 con F que es 15…El 6 es el largo de la contraseña a si que la contraseña debe contener 15 caracteres.

Ingresamos un nuevo serial 123456789ABCDEF de 15 caracteres y seguimos traseando con F8 hasta la línea 00403D80 y observamos en el Stack que compara los primeros 7 Dígitos ingresado con UvTvSvW



Y seguimos traseando y en la línea 00403D92 compara 9ABCDEF de la clave con SrOrPrQ




Y en la línea 00403DF3 esta otro call de comparación donde traseamos conF7 y como es dicil de explicar por que en cada maquina las direcciones son diferentessolo les digo que compara 8 con - el 8 por quees la que se encuentra en la mitad del serial que ingresamos.

Bueno entonces la clave para polomon” seria UvTvSvW- SrOrPrQ





Bueno eso seria todo y perdonen las faltas de ortografía y las explicaciones tan cortas y sencillas



Saludos Flamer