ESTUDIO COLECTIVO DE DESPROTECCIONES
WKT Tutorialz Site
WKT
Programa Exploit Submission Wizard 5 W95 / W98 / NT
Descripción Programa de registro de paginas web en buscadores.
Tipo Shareware
Url http://www.exploit.net
Protección Limitacion  a solo registrar tu pagina web en 17 buscadores.
Dificultad 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas SoftIce v3.24
Objetivo Conseguir la clave para registrarse.
Cracker Esiel2
Fecha 1 de Junio de 1999

Introducción

          En este tutorial se vera como hacer una aproximacion a un programa hecho en visual basic con el depurador soft-ice, sin usar el Smartcheck (esto puede ser un poco lioso) . Lo primero de todo, tenemos que asegurarnos que en el fichero winice.dat tenemos la siguiente linea:

                    exp=c:\windows\system\msvbvm60.dll

          Sin esta linea, claro esta, no podriamos hacer nada. ;)

Al Atake

          Vamos a por el, y lo que hacemos despues de ejecutarlo, ver un menu donde pone REGISTER pulsamos sobre el y nos aparece lo que buscamos, un textbox donde nos pide la clave para poder registrarnos y en su lugar esta la cadena "Free Submission Wizard Only", tendremos que borrarla y poner nuestra clave favorita, en mi caso 'esiel2'. Pulsamos sobre el boton que pone 'Save Wizard Key' y nos sale el tipico mensaje diciendo que la clave no es correcta, tras esto, si nos fijamos detectamos que el programa automaticamente pone en mayusculas las dos primeras letras de mi password, ¡Que Raro!, solo las dos primeras, el resto lo deja en minusculas. Bueno, bueno, bueno, intentemos un aproximamiento un breakpoint ¿cual se os ocurre? ... ¡VENGA!... ¿Ninguno? .... Pues el de casi siempre, rtcmsgbox, asi que escribimos nuestro clave otra vez 'esiel2' y pulsamos sobre el boton ... y zash ... volvemos al soft-ice despues de nuestro breakpoint, asi que como ya nos ha sacado el mensaje de error tendremos que subir hacia arriba para encontrar donde toma la decision de que nuestra clave sea correcta o incorrecta, y nos encontramos con la siguientes intrucciones:

0137:0048E79E   add esp,38
0137:0048E7A1   test di,di
0137:0048E7A4   jz 0048E88F                                                <--- Aqui toma la decision
0137:0048E7AA   mov edi, [MSVBVM60!__vbastrcat]                   si sacar el error o no
0137:0048E7B0   push 00442038                                                     dependiendo del flag 'z'
                                                                                                          creo que sabeis al que
                                                                                                          me refiero ;)
 

          Pero, resulta que si cambiamos el flag, nos sale el mensaje de que estamos registrados pero cuando queremos registrarnos en mas de 17 buscadores nos dice que no puede ser, ¿como es eso?, ¿no estabamos ya registrado?, ... pues no. Pues entonces, tendremos que hacerlo mas fino y buscar una clave que sea realmente valida para ello, asi que si nos acordamos del principio en donde vimos que el programa cogia las dos primeras letras y las convertia en mayusculas, asi que si buscamos un breakpoint o bien coja caracteres a la izquierda de la cadena o bien tranforme caracteres en mayusculas, con lo que si nos miramos el tutorial sobre Crackeando en Visual Basic podemos ver ambos breakpoint, los cuales son los siguientes:

rtcLeftCharBstr
rtcUpperCaseBstr

          Probamos con el primer breakpoint, volvemos al programa y pulsamos sobre el boton e inmediatamente regresamos de nuevo al Soft-ice en las siguientes lineas:

0137:0048E512   push edx
0137:0048E513   call [MSVBVM60!rtcLeftCharBstr]     <--- Coge caracteres a la izda.
0137:0048E519   mov edx,eax
0137:0048E51B   lea ecx, [ebp-1c]
0137:0048E51E   call esi

          En estas lineas se coge los dos primeros caracteres de mi clave introducida, que fue 'esiel2', pues se coge 'es'. Y despues sigue con:

0137:0048E520   push eax
0137:0048E521   call [MSVBVM60!rtcUpperCaseBstr]     <--- Aqui convierte 'es' en 'ES'
0137:0048E527   mov edx,eax
0137:0048E529   lea ecx, [ebp-24]
0137:0048E52C   call esi
0137:0048E52E   push eax
0137:0048E52F   mov eax, [005112E8]
  ....
  ....
0137:0048E54A   push eax
0137:0048E54B   push ecx
0137:0048E54C   call [MSVBVM60!rtcRightCharBstr]    <--- Coge caracteres a la dcha.
0137:0048E552   mov edx, eax                                                  'iel2'.
0137:0048E554   lea ecx, [ebp-20]
0137:0048E557   call esi
0137:0048E559   push eax
0137:0048E55A   call [MSVBVM60!rtcLowerCaseBstr]  <--- Convierte los anteriores 
0137:0048E560   mov edx,eax                                                   caracteres en minusculas.
0137:0048E562   lea ecx, [ebp-28]
0137:0048E565   call esi
  ....
  ....                 Y asi pulsando la tecla F10 hasta que nos encontramos algo interesante
  ....                  como lo que viene ahora.
  ....
0137:0048E6C7   push 02
0137:0048E6C9   push edx
0137:0048E6CA   call [MSVBVM60!rtcLeftCharBstr]     <--- Coge de nuevo 2 caracteres
0137:0048E6D0   mov edx,eax                                                a la izquierda de mi clave.
0137:0048E6D2   lea ecx, [ebp-38]
0137:0048E6D5   call esi
0137:0048E6D7   mov ebx, [MSVBVM60!__vbaStrcmp]   <--- ¡Funcion para comparar
                                                                                                cadenas!! ¿para que puede
                                                                                                servir esta funcion?  jeje

0137:0048E6DD   push eax              <--- Se guarda lo que realmente le interesa al programa
                                                                de mi clave que son las dos primeras letras en
                                                                 mayusculas 'ES'
0137:0048E6DE   push 004420EC    <--- Es la direccion donde se guarda la clave 
                                                                   correcta.  Podemos verla poniendo: D 4420EC
                                                                  Y nos daria como resultado 'PW'

  * En estos 2 ultimos push se guarda las dos cadenas que ha comparado la funcion api    __vbastrcmp.

  ....           Seguimos observando el programa, puesto que como sabemos donde
  .... toma la decision de decirnos si somos buenos o somos malos pues tendremos que
  .... tracearlo un pokito y de camino viendo lo que va sucediendo.
  ....
0137:0048E6EE   push 02
0137:0048E6F0   neg edi
0137:0048E6F2   push eax
0137:0048E6F3   neg edi
0137:0048E6F5   call [MSVBVM60!rtcLeftCharBstr]
0137:0048E6FB   mov edx,eax
0137:0048E6FD   mov ecx, [ebp-30]
0137:0048E600   call esi            <--- Hace referencia al api __vbastrcmp
0137:0048E602   push eax             <--- ¡¡ Curioso ¡¡ Se vuelve a guardar de nuevo las dos
                                                          primeras letras de mi clave y en mayusculas ('ES')
0137:0048E603   push 004420E0    <--- Es la direccion donde se guarda otra clave 
                                                            correcta!!!!  en este caso es: 'EW'
 ....
 ....                Avanzamos un pokito y nos encontramos otra vez con esto.

0137:0048E61A   call [MSVBVM60!rtcLeftCharBstr]
0137:0048E620   mov edx,eax
0137:0048E622   mov ecx, [ebp-28]
0137:0048E625   call esi                <--- Hace referencia al api __vbastrcmp 
0137:0048E627   push eax           <--- Vuelve a guardar las 2 primeras letras de mi clave 
                                                            en mayusculas('ES').
0137:0048E628   push 004420D4    <--- Otra clave correcta, en este caso es: 'DN'.

  ....
  ....
0137:0048E63F   call [MSVBVM60!rtcLeftCharBstr]
0137:0048E645   mov edx,eax
0137:0048E647   mov ecx, [ebp-20]
0137:0048E64A   call esi                <--- Hace referencia al api __vbastrcmp
0137:0048E64C   push eax            <--- Vuelve a guardar las 2 primeras letras de mi clave 
                                                              en mayusculas ('ES').
0137:0048E64D   push 004410C8     <--- Otra clave correcta, en este caso es: 'KX'

  ....
  ....            Seguimos trazando el programa en busca de nuestro " jz 0048E88F   "
  ...             Hasta que lo encontramos.

          Ahora procedemos a probar una de las multiples claves correctas que hemos encontrado, pero tenemos una sorpresa y es que cuando pulsamos sobre el boton para comprobar pues nos sigue dando un error, asi que pensemos un poko .... seguramente algo se nos habra pasado por alto, pero la funcion de comparacion tomaba dos caracteres de mi cadena y devolvia dos caracteres como 'validos', y ademas el programa solo convierte a mayusculas las 2 primeras de mi clave ..... ummm .... uummmm.... y si cogemos y ponemos en el textbox la palabra clave+(4 o 5 espacios en blancos)... pues FUNCIONA, luego hemos crackeado este programa sin necesidad del Smartcheck. Resumiendo las posibles claves validas son:

PW_esiel2
EW-esiel2
DN-otra_vez-soy-yo-(esiel2)
KX-;o)
DNEWPWKX 
....

          Y asi todos las que quieras, esto es todo, hasta la proxima ..... Un Saludo. ;)





[ Entrada | Documentoz GenΘricoz | WKT TEAM Main Site ]
[ Todo el ECD | x Tipo de Protecci≤n | x Fecha de Publicaci≤n | x orden AlfabΘtico ]