Tutorial 2 - Crackme en Visual Basic

Material

Como ya adelantamos en el tutorial anterior, en este tutorial nos dedicaremos a crackear programas en Visual Basic, que nos servirá como introducción al crackeo de este tipo de programas.

Nociones básicas sobre cracking en Visual Basic

  • Visual Basic no utiliza las API’s de Windows, sino que tiene sus propias librerías, estas librerías reciben el nombre de MSVBVM60 en el caso de la versión 6 y MSVBVM50 en el caso de la versión 5, en este tutorial nos centraremos en la función VbaStrCmp que supongo que significa Visual Basic Strings Compare y que sirve para comparar cadenas de texto

Esta vez usaremos un crackme hecho en Visual Basic y de autor desconocido, lo único que se es que hace referencia a la pagina web http://usuarios.lycos.es/sisar .

Abrimos el programa y vemos que nos da una serie de instrucciones

Crackme con fines educativos.

###############################

Trate de hayar un número de serie correcto o un KeyGen

Solución en: http://usuarios.lycos.es/sisar

Quedémonos con eso del Keygen, después veremos por qué, y bueno, con la gran falta de ortografía que ha cometido el autor.

Antes de empezar veamos en que lenguaje esta programado y con que compilador, aunque ya lo sabemos, pero es para coger costumbre, así que abrimos el PEiD y:

0

Vemos que esta programado en Basic y con el compilador Visual Basic 5 o 6 (en este caso es 6, debido a las librerías que utiliza, pero PEiD no sabe diferenciar )

Como hicimos en el tutorial anterior abriremos el crackme, meteremos los datos que nos pide y veremos si nos da mensaje de error o hay que tirar de las API’s para crackear:

1

Vaya, vemos que otra vez nos dan mensaje de error y por lo tanto tiraremos de las referencias de texto para crackearlo, en un principio, según las instrucciones que se nos da, nosotros tendríamos que intentar crackearlo rompiendo la puerta, haciendo una copia de llaves y creando una llave maestra, pues vamos a ello

Rompiendo la Puerta

Cargamos el programa en el OLLY y vamos a ver las string references (2º botón sobre donde aparece el código en ASM y luego Search for > all referenced text string) y alli vemos lo siguiente:

2

Vemos que encontramos el mensaje de felicitación y el de error, también vemos un número sospechoso que si lo habéis probado sabréis que no es el serial . Ahora haremos doble clic sobre el mensaje de felicitación o el de error, da igual cual, yo, por elegir uno, he elegido el de felicitación. Apareceremos en:

3

Arriba del todo esta el mensaje de felicitación y abajo el de error (si os fijáis ahora en vez de ASCII pone UNICODE, UNICODE es otro sistema de codificación más completo que ASCII ).

Si seguimos un poco más arriba del mensaje de Correcto vemos un salto condicional sospechoso y que además apunta hacia un lugar cerca del mensaje de error:

4

Podríamos poner un BreakPoint como hicimos en el anterior tutorial para estar seguros de si es ese el salto que nos interesa, pero es que estamos tan seguros de que es ese que yo por lo menos no lo pondré (Estoy seguro por que esto es un Crackme, y un salto condicional cerca de un mensaje de error/felicitación y encima apuntando hacia un lugar que esta cerca de un mensaje de error es MUY SOSPECHOSO ).

Bueno cambiamos el JE por JNE (bien seleccionando la línea y dándole al 2º botón y luego assemble o bien haciendo doble clic sobre el código en ASM del salto):

5

Ejecutamos el programa que tenemos cargado en el OLLY con F9 y….

6

Ya hemos vuelto a romper la puerta.

Haciendo una copia de llaves

Volvemos a cargar el programa vamos a las String references y volvemos a hacer doble clic sobre cualquiera de los 2 mensajes, yo volveré a hacer doble clic sobre el de felicitación y si miramos un poco mas arriba veremos la función VbaStrCmp, de la cual he hablado al principio del todo (en la parte inferior de la imagen se puede apreciar el mensaje de felicitación):

7

Así que pondré un BreakPoint sobre ella (Seleccionamos la línea y presionamos F2 o hacemos doble clic sobre la traducción hexadecimal del código ASM).

Ahora ejecutamos el programa con F9 y al meter los datos y darle a comprobar nos saltará el OLLYDBG y si miramos la ventana de los registros y las flags veremos:

8

Vemos que se comparan 2 cadenas de texto, “angel” que es el código que yo metí y “;=>?@AC” que es bastante sospechoso , así que lo probamos y…. (antes de probarlo habrá que quitar el BreakPoint volviendo a hacer doble clic sobre el o pulsando doble clic sobre él o dándole al botón que pone una B y que esta debajo de los menús de file, view y todo eso y que es el 7º empezando por la derecha, y en la nueva ventana elegimos el BreakPoint y le damos a Remove) o sencillamente ejecutamos el programa sin el OLLY, es decir, haciendo doble clic sobre el programa.

9

Creando la llave Maestra

Como tengo una mente curiosa vuelvo a hacer el proceso de la copia de llaves con distintos nombre (o sencillamente si ese proceso os parece muy largo, probad diferentes nombres con el código que hemos sacado antes) y ¿que es lo que veo? Pues veo que el serial no cambia, que es siempre el mismo, es decir, que nos han vendido un Hardcoded camuflado como un Nombre/Serial, o sea, que de Keygen nada por que el serial es siempre el mismo (de ahí la alusión que he hecho al principio del tutorial ). Pues aparentemente nuestro trabajo ha acabado, ya no podemos hacer nada a este Crackme, pero como no nos gustan las mentiras y somos un poco vaguetes vamos a hacerle unas reformas al Crackme.

Reforma número 1

Al abrir el crackme aparece este texto:

Crackme con fines educativos.

###############################

Trate de hayar un número de serie correcto o un KeyGen

Solución en: http://usuarios.lycos.es/sisar

Vamos a borrar de ahí la siguiente parte: “ o un KeyGen” por que es eso no es cierto!

Volvemos a cargar el Crackme y vamos a las referencias de texto y pinchamos sobre la de error o felicitación, yo volveré a pinchar sobre la de felicitación, ahora aparezco sobre el mensaje de felicitación y hago clic con el 2º botón y luego le doy a Follow in dump > Selection y apareceremos en:

10

Nos olvidamos de eso y subimos un poco en el Dump hasta llegar a la posición de memoria 004013D0 en donde vemos lo siguiente:

11

¿Os suena? Es lo que aparecía en el cuadro de texto, ahora seleccionaremos la parte que queremos eliminar:

12

Para hacer la selección pincho sobre el Byte 6F y sin soltar el clic de ratón voy arrastrando hasta llegar a 6E, Luego hago clic con el 2º botón sobre el Dump y elijo Binary > Edit e intento borrar las letras en la sección donde pone ASCII, pero veo que no puedo ¿por que? Vemos que abajo pone Keep Size que es para mantener el tamaño, lo deselecciono y ya si puedo suprimir, lo borro y doy clic en OK y veo que los cambios no se guardan. No Problem aquí entra en juego la observación, vemos que los lugares donde no se guardan datos en el Dump se rellenan con 00 así que en vez de intentar editar la sección ASCII editaremos la sección Hex + XX (pongo XX por que depende de la posición) rellenándola entera de 0’s y teniendo activada la casilla de Keep Size

13

Ahora presiono OK y los cambios si se guardan en el DUMP

Reforma número 2

Me he dado cuanta que es bastante engorroso tener que borrar lo que aparece en las cajetillas de texto del nombre y del codigo, es decir:

Introduzca su nombre

Introduzca el código

Ya podrían haberlo dejado en blanco si arriba ya nos dice que introduzcamos nombre y serial (poniendo el nombre delante del serial)

Como no nos gusta tener que borrarlo por que somos vagos pasaremos a eliminarlo permanentemente, así que vamos al DUMP esta vez en vez de deciros yo la posición de memoria vamos a utilizar la función de Search for > Binary String así que nos dirigimos al DUMP hacemos clic con el 2º botón y nos vamos a Search for > Binary String allí escribimos “Introduzca su nombre”

14

Dejamos entire block seleccionado y en este caso Case sensitive nos da igual (sirve para distinguir entre mayúsculas y minúsculas pero como es un programa pequeño este crackme nos da igual), damos a OK y apareceremos en:

15

Y ya vemos como arriba está también el texto de “Introduzca su código” la palabra código sale un poco extraña (en el DUMP) por que lleva tilde , así que con esto de Introduzca su nombre seleccionado, damos clic con el 2º botón y vamos a Binary > Edit y la sección HEX la rellenamos entera de 0’s, damos a OK y ahora haremos lo mismo con lo de “Introduzca su código” que esta justo arriba, lo seleccionamos y vamos a Binary > Edit y la sección HEX la rellenamos de 0’s, hecho todo esto nos debería de quedar así el DUMP:

16

Para hacer los cambios permanente seleccionamos todos los cambios que hayamos hecho en el DUMP (arrastrando y de esta manera por cojones también tendremos que seleccionar otras cosas que no hemos modificado pero bueno no pasa nada ), pulsamos con el 2º botón en cualquier parte del Dump y elegimos Copy to executable ahora nos saldrá otra nueva ventana de DUMP en donde volveremos a hacer clic con el 2º botón y elegiremos Save file y le ponemos otro nombre para no sobrescribir el crackme original ;) yo le he puesto Crackme1mod, abrimos el Crackme a ver si ha funcionado la cosa y….

17

Pues vemos que efectivamente funciona.

P.D el siguiente hardcoded será el último de los fáciles.

P.D cuando tenga internet me meteré en la pagina que aparece en este crackme a ver si propone otra solución.

19 de Agosto de 2007