| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | Como crackear por Estado+porcino Capítulo 5 Color Crack. Multimedia Builder 3.0 | W95 / W98 / NT
Descripción | Programa para la creación de aplicaciones multimedia
Tipo | Limitaciones a la version no registrada
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url | www.mediachance.com
Protección | Numero de serie
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | SoftIce y Zen Crack
Objetivo | Simular estar registrados.
Cracker | Estado+Porcino
Grupo | Whiskey Kon Tekila
Fecha | Noviembre de 1998
INTRODUCCION
Victima: Multimedia Builder 3.0 Site: www.mediachance.com Herramienta: Nuestro amado Sice y Zen crack. Hoy es un día de Heineiken,Café de de Kenya,Moskovkaya,Guiness,Mahon y mujeres. Bueno, ya estamos de vuelta con un nuevo truco bajo el brazo: "Crack en Color" que lo aplicaremos a nuestro conejillo de indias, el excelente Multimedia Builder. Un programa para crear aplicacniones que incluyen sonido, imagen,video. Se programa al estilovisual de VB . No os perdais el reproductor de CD que viene con el ejemplo.
UN PRIMER VISTAZO
Realmente este programador se lo ha currado. Ha cerrado la mayoría de las puertas de entrada a los crackers, por tanto hay que abrir otras como el "Crack en Color". Veamos alguno de sus ingenios del autor: - Existe un número de serie que se introduce desde "Help\About\Register" - Cuando introducimos un número de serie falso no aparece ninguna ventana de error. Por lo que queda descartado el clásico "bpx messageboxexa". - Las cadenas de caracteres importantes las tiene encriptadas, por lo que no podemos buscarlas con el "Search and Replace", lo que impide un crack en 5 minutos.
PRIMER OSTIAZO
Desechados los ataques típicos, vamos a entrar por la puerta clásica siguiendo la pista del Serial falso. Metemos un número basura "12121212", Saltamos al sice y ponemos 's 30:00 l ffffffff "12121212"' En cada ocurrecia XX:xx aplicamos 'bpr XX:xx XX:xx+8 rw'. Una vez acabado damos al botón de OK y BOOM, aparecemos en el sice. Unos F12 llegamos a la rutina "GetwindowTextA". Dejamos esta línea de trabajo porque es muy aburrida. Al final conseguimos aislar una rutina en que devuelve 0 si estamos registrados y 1 en otro caso.Podemos falsearla para registrarnos. Y de hecho lo "conseguimos". Nuestro nombre aparece en la ventana de registro. Pero hay una sorpresita. Si ejecutamos Project/Run aparece "unregistered...". ¿Cómo es posible? ¡Pero SI estamos registrados!. La cosa es aún peor, si nos peleamos con el registro y generamos un número de serie válido las cosas no mejorar. ¿Que está pasando aquí?
ZEN CRACK
Si hemos pasado el algoritmo de registro satisfactoriamente, ¿porqué seguimos sin estar registrados?. Razonemos, la única forma de no estar registrados es que no pasemos alguna verificación. Sabemos que hemos pasado una, luego debe de haber otra verifiación en otra parte del código. Este programador ha pensado un poco. HA SEPARADO LAS COMPROBACIONES del serial. Y lo que es todavía más interesante, en cada comprobación analiza cosas diferentes. Así, si se pasa completamente una comprobación no se garantiza que se pase el resto. Sabemos ya que por lo menos hay dos comprobaciones (una que pasamos y otra no). Debe existir un nexo de unión entre las comprobaciones: Una variable que guarde el serial que hemos introducido. Pero aquín las variantes son múltiples :la primera comprobación puede encriptar el serial para la segunda, modificar un flag para que siempre resulte falsa la segunda comprobación... La pregunta que se plantea es ¿Cómo localizo la segunda comprobación?. La única pista es el horrible letrero amarillo ".. unregistered ..". Se podrían analizar todas las variables que modifica el primer algoritmo , pero eso es demasiado costoso. Debemos buscar otra forma. La única forma de saber que no hemos pasado las comprobaciones es el letrero amarillo. Es por ahí por donde debemos atacar. El mensaje está encriptado ,luego desechamos esa vía. El letrero parece un Label al estilo de de JAVA o Delphi, por lo que no tiene entidad propia como una ventana. ¿Por donde atacamos?
CRACK EN COLORES
Centremonos, ¿qué es lo que má llama la atención del letrero? , su color amarillo. Este color debe de asignarse de alguna forma. Además el amarillo parece que es el color de fondo del letreo. Si desensamblamos a nuestro objetivo vemos que utiliza la función setbkcolor. Así pues debemos localizar algo parecido a "setbkcolor(Amarillo)".Pero como se expresa exactamente el color amarillo. Normalmente los colores se forman a partir de la combinación de los llamados "colores básicos" . Lo normal es usar como colores básicos RGB="Rojo Verde y Azul." Nuestro problema es como expresar el amarillo del letrero en función de RGB. Por suerte nuestro amarillo es una simple combinación. Podemos utilizar la paleta de colores de cualquier programa para comprobarlo. En mi caso he usado el Visual Café 2.5 (crackeado por supuesto). Introduciendo Rojo=255,Verde=255,Azul=0 obtenemos el mismo amarillo que el del letrero. Si el color hubiera sido más complejo,capturamos la pantalla con el letrero y la importamos a un editor gráfico como el Photoshop.Seleccionamos un pixel del color amarillo del letreo y vemos sus componentes en términos de Rojo, Verde y Azul. Es posible que exita un program que realize esta función más sencilla. Si lo encontris, por favor notificádmelo. Asi pues debemos de localizar algo asi como "setbkcolor(255 255 0)". Necesitamos conocer si existen más parámetros para el setbkcolor. Mirando el API tenemos:
    COLORREF SetBkColor(HDC hdc,	// handle of device context

                        COLORREF crColor 	// background color value

                        );

    The COLORREF value is a 32-bit value used to specify an RGB color.

    When specifying an explicit RGB color, the COLORREF value has the following hexadecimal form:

    0x00bbggrr
Nuestro color es un entero y se pasa como segundo parámetro. Dado que los número se almacenan al revés debemos buscar SetBkColor(hdc,0000ffff). Desempolvemos los manuales del Sice, por lo que nos queda bpx setbkcolor if (*(esp+8)==ffff0000) Expliquemos un poco el churro que ha aparecido. bpx setbkcolor indica que se pare cuando se ejecute la rutina setbkcolor Se para cuando (*(esp+8)==00ffff), es decir, cuando el contenido del registro EIP+8 sea 00ffff. Recordemos que los parámteros a las funciones se pasan a través de la pila (ESP=registro stack pointer): Concretamente es ESP+8 porque en se apilan dos palabra de 4 bytes cada uno.
    Antes de la llamada ESP=000

    	Llamada             ESP=Dirección de retorno. (palabra de 4 bytes)

    			    ESP+4=parámetro HDC.(palabra de 4 bytes)

                                ESP+8=segundo parámetro
Aplicando nuestro bpx y pulsando "Proyect/Run" BOOM, aparecemos en el sice, para ver si estamos realmente ante el setbkcolor correcto, cambiemos el color "d esp+8" Y pasamos de "FFFF00" a "FFFFFF" . Obtenemos un bonito color blanco de fondo. Luego hemos pillado la llamada correcta. Un par de f12 después obsevamos :460a15 cmp [ESI+378],43CA Si los valores no son iguales vemos el mensaje de error. Por tanto es este el flag que controla todo. Ya sólo basta ver quien lo inicializa. Pero este es un trabajo conocido por todos que lo dejo como ejercicio. Fijaos como no se utiliza un clásico flag 1,0 sino un valor difícil 0x43CA. Un nuevo síntoma de que el autor ha leido sobre cracks.
CONCLUSION
Hemos aprendido una nueva técnica: "Color Crack". Es recomendable que se aplique cuando el mensaje de "unregistered "no sea una ventana sino una cadena dentro de una ventana. Debemos averiguar el color que se aplica al mensaje y colocar en el Sice: bpx nombreRutina if (*(esp+8)==00BBGGRR) Recordad que los valores de Blue(azul),Green (Verde) , Red (rojo) están hexa. Cuando apararezcamos en el Sice cambiar el color para ver si estamos en la ventana correcta. En tal caso buscar un salto que evite el mesaje. Este técnica siempre es aplicable, pero se recomienda que se utulize cuando existan pocos colores en la ventana y el mensaje esté resaltado del resto (cosa bastante habitual). Una posible generalización de está técina es aplicable al color del tipo de letra (foregroundcolor), el tipo de fuente, (setFont), el aspecto (cursiva ...). Recordad de echar mano de una buena ayuda Api para win32. No olvidemos el esquema de protección tan original de SEPARACIÓN DE COMPROBACIONES que ha implementado el autor. Realmente interesante, si señor.
NOTAS PARA LOS LECTORES
Notas para los lectores. 1.- Los mensajes del tipo "Hazme el crack para ....", "Dime como de crackea....", "Dime donde puedo encontrar..." son automáticamente ignorados. El objetivo de estos artículos es enseñar a crackear no enseñar a ser unos llorones ineptos que sólo saben mendigar. 2.- Sólo responderé a preguntas teóricas sobre cracks, indicando algunas pistas que faciliten la labor. 3.- Narices, escribid artículos sobre los programas que crackeeis. De nada sirve lo que aprendéis si no lo repartís, se os pudre en el cabeza, palabra. 4.- Lamento no haber contestado a ciertos mails interesantes. Desde aquí mis excusas. 5.- Si os ha servido para algo mis artículos, no seáis vagos y mandad un mail indicándomelo. Mr.PinK & WKT ( WHISKEY KON TEKILA ) Esperamos vuestras opiniones, sugerencias y ensayos en estadoporcino@hotmail.com En breve analizaremos tipos de protecciones mucho más interesantes. Recordad bebed de la fuente, buscad a +ORC en la red.
AL ATAQUE
AL ATAQUE
[ Entrada | Documentos Genéricos | WkT! Web Site ]
[ Todo el ECD | x Tipo de Protección | x Fecha de Publicación | x Orden Alfabético ]
(c) Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers. Si necesitas contactar con nosotros , lee esto antes e infórmate de cómo puedes ayudarnos