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 fá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 si “nomolop” 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” de “nomolop” 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 difícil 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