En este capítulo veremos como crackear el mismo Crackme, pero si no pudiésemos ver las string references, es decir, imagínense que cuando lo desensamblamos con el wdasm o miramos las referencias de texto en el OllyDBG y no encontramos nada, qué hacemos?. Bueno para resolver esta preguntra, aclararemos lo siguiente, además de poder situar lo Breakpoint en ciertos lugares del programa como hemos hecho en el capítulo anterior, existen las llamadas funciones API, que son funciones que existen en Windows y el programa utiliza para no escribir funciones que ya puede utilizar tomándolas de otro lado.
La idea será utilizar estas funciones para que nos guíen a la zona deseada, para poder encontrar el salto condicional que deseamos cambiar. En este caso la función API que utilizaremos es una llamada MESSAGEBOXA , que es la que dibuja las ventanitas con mensajes, así que pensaremos que si podemos ubicar cuando el programa llama a esta función para dibujarnos la ventanita de NO LUCK THERE MATE, podremos ubicar desde donde se realiza la comparación, ya que antes de dibujarla checkeará si nuestro serial es correcto.
Dicho esto, ponemos manos a la obra. Como siempre lo primero que haremos será irnos a nuestro querido OllyDBG, y desensamblaremos el Crackme. Hecho esto le daremos a F9 (para que corra el debugeador y se ejecute el programa), y luego haremos click derecho sobre el programa desensamblado e iremos a SEARCH FOR--->Name (label) in current module, o simplemente pulsaremos CTRL+N, lo que es equivalente y obtendremos algo como lo siguiente.

Bueno aquí estamos delante de los módulos que se utilizan. Lo que haremos será localizar el que nos interesa MESSAGEBOXA. Aquí veremos una diferencia, mientras que con el Softice bastará poner BPX MESSAGEBOXA, para poner un breakpoint en la función, aquí lo que haremos será seguirla para ver desde donde se utiliza, ya que con un Breakpoint no llegaremos a nada :) .
Entonces lo siguiente, ubicada la función nos situaremos sobre ella y le daremos al botón derecho del mouse, y lo que nos ocupa a nosotros es ver desde qué lugares es llamada, así que iremos a la opción FIND REFERENCES TO IMPORT y allí nos salen 4 direcciones 40135C, 401378, 4013BC, 40143A .
Si hacemos doble click sobre la primera (para que nos lleve al programa desensamblado, a la posición desde donde se llama) veremos que se trata de la ventana de que hemos ingresado el serial correcto, es claro que esta no nos interesa, ya que si ingresamos el serial incorrecto no utilizará dicho mensaje :p .
Así que seguimos, si hacemos doble click sobre el segundo y el tercero, veremos que ambos hacen referencia a la ventanita de error, mmmmm... por aquí debe ser el asunto. Pero miro y digo "son dos", algo no está bien, y es allí donde usando la memoria me acuerdo que ya en el capítulo anterior, el programa me había engañado llevándome por un camino falso, así que procederé con cautela.
Hago doble click sobre la que se llama desde 401378 y debajo de la posición en la que me arroja, hay un RETN (return, es decir que utiliza la función y me devuelve mediante esa orden, debajo de la posición desde la cual fue llamada para dibujar la ventana), así que pondremos con F2 un Breakpoint en ese RETN, he intento registrarme, esta vez lo hemos pillado, ya que el programa nos arroja el error inmediatamente luego de intentar registrarnos, lo que nos está diciendo que nuestro Breakpoint no ha detenido el programa, por lo que el programa no utiliza la zona donde pusimos con F2 el Break, por lo tanto este es el mensaje de error que nos había engañado en el capítulo pasado.
Así que sabiendo esto hacemos doble click sobre 4013BC, e igual que con el anterior vemos que debajo de donde nos arroja, hay un RETN, al que le pondremos un Breakpoint , y luego intentaremos registrarnos.
En esta ocasión el programa se ha detenido ;), así que le daremos a F8 para que nos devuelva, y nos arroja sobre la posición 401232, hasta aquí vamos bien pero, mmmm.... este lugar me resulta familiar,aaaaaa....como no? si no es más ni menos que donde la otra vez habíamos hallado el salto a modificar la última vez jajaja ;), si miramos 5 y 6 órdenes hacia abajo respectivamente veremos la comparación y el salto, modificaremos el salto igual que la vez anterior posicionándonos sobre él , le damos a la barra espaciadora, para que nos lleve a la opción Assemble y allí modificamos el salto JE por un JNE, y ... BINGO , lo hemos logrado una vez más y no hemos precisado las referencias de texto ;).
Escríbanme para decirles si les ha gustado, cualquier duda o sugerencia.