Erwin.Ried.cl / Documentos / Cracking /
Adaptando complementos a nuestro antojo

Podría ser que nunca has pensado en modificar un complemento de alguna aplicación, especialmente de tu navegador. Lo cierto es que esto es factible y bastante simple. La idea aquí es modificar opciones, idioma y otras funciones de un visualizador tridimensional para Internet Explorer. (24/01/2007 01:37 AM)


1. Introducción

Existe una interesante aplicación llamada 3DMeNow, la cual mediante dos fotografías puede generar una cabeza tridimensional con expresiones, movimientos y muchos detalles.

Lo extraño es que la primera versión (1.0) de este programa era bastante más completo que la versión siguiente (1.5) en la cual quitaron la posibilidad de exportar a video (probablemente para incluirla como otra aplicación), quitaron la posibilidad de crear torsos y lo más importante para este artículo: añadieron una fea publicidad en el visor incrustado en el navegador.

Vean a lo que me refiero (la imagen supuestamente es mi cabeza virtual):



El actual menú es el siguiente, la opción final muestra una ventana con los créditos de la aplicación. Personalmente, aunque sea necesario, pienso que generalmente se ve feo esta opción en los elementos incrustados en el navegador, que deberían ser lo más limpios posibles:




2. ¿Dónde está el plugin?

Esta pregunta es primordial, lo mejor sería dar un vistazo al código de la página que genera el programa como demostración o "preview":



¿Claro como el agua?, ¿No?, bueno CLSID hace referencia (como dije muchas veces antes) al código único de algún servicio, librería, objeto. En este caso vamos directamente al editor del registro de Windows:



De hecho, no podría haber estado más claro. Dentro de la conocida clave InprocServer32 estaba nuestro buscado complemento:



La extensión OCX denota directamente que se trata de un control ActiveX, algo así como una aplicación incrustable en programas compatibles como en los programas del conjunto de Microsoft Office (por medio del cuadro de controles, en la barra de Visual Basic), entornos de desarrollo compatibles como Visual Studio (significaría que con extremada facilidad podríamos hacer nuestro propio reproductor de caras 3d en C#, Visual Basic u otro lenguaje), y páginas web vistas en Internet Explorer y probablemente Netscape.


3. Comenzando a meter mano

Usando Resource Hacker, Exescope o XN Resource Editor revisamos el complemento. Por algun motivo, la imagen de la corporación no está definida como recurso, probablemente para que no la borren o cambien. De todas formas acá queda trabajo por realizar traduciendo y borrando cosas para dejar el menú del complemento así:



Guardamos, cerramos y comprobamos estos pequeños cambios:



Todo anda bien, pero ¿qué hacemos con la fea imagen de la esquina?.


4. En búsqueda de la imagen

Me refiero a tratar de acertarle a donde se encuentra la pequeña imagen. Si no se encontraba como un recurso, probablemente fue incrustada en el código, en un formato diferente al BMP, pues de otra forma hubiera figurado en los recursos.

Los formatos principales que tenemos ahora serían PNG, GIF y JPEG. Podemos analizar un representante de cada formato con un editor para ver como es la cabecera de cada archivo para hacernos una idea:

Las fotos PNG comienzan así:


Las fotos GIF comienzan así:


Las fotos JPEG comienzan así:


Cada formato en especial tiene una palabra legible al comienzo, PNG, GIF y JFIF respectivamente.

Ahora simplemente buscamos esas palabras claves dentro del archivo OCX utilizando un editor hexagesimal:







Señoras y señores, al parecer, tenemos a un ganador.


5. Usando Heurística, pero al ojo

Revisando las nueve coincidencias de JFIF, hay una que sobresale, pues delante de la palabra JFIF tiene 6 bytes idénticos al que vimos con el editor bloc de notas.



Buscamos hacia abajo y descubrimos el final de la imagen (esta parte es al ojo, simplemente debemos notar, por ejemplo que los bytes empiezan a formar palabras en inglés que podría ser código de la librería):



Copiamos ese trozo de código a un archivo y revisamos su contenido:



Ciertamente, esa era la foto que buscabamos. Para reemplazarla simplemente pegamos una nueva imagen en el editor hexagesimal, aunque debemos conservar el largo de la imagen original, es decir la nueva debe ser menor y no debemos cambiar nada hacia abajo, es decir si borramos 100 bytes y colocamos una imagen de 80 bytes en el espacio de la imagen vieja, debemos añadir 20 bytes en blanco.

Por ejemplo así se vería si reemplazamos la imagen por una imagen en blanco hecha en mspaint (la cabeza fue movida deliberadamente para demostrar el resultado):



Ese resultado no es muy elegante, una mejor solución será quitar la imagen o de igual forma, invalidar la actual sin provocar excepciones en el decodificador JPEG interno del complemento.

Para remover el recuadro blanco lo más seguro es anular el tamaño de la imagen, si lo que antecede a JFIF es fijo, incluyendo la cadena JFIF, los bytes que siguen deberán ser el tamaño de la imagen. Como investigar el formato JPEG requeriría un poco más de trabajo, simplemente borramos los bytes que siguen hasta un largo considerable y probamos:



Si queremos lograr una mejora en la compresión del archivo (por ejemplo en formato zip o rar) podemos limpiar más hacia abajo rellenando con ceros. Sin embargo, con este último cambio logramos un resultado agradable:




6. Algo adicional

Aunque el programa ya no incluye una opción para convertir a video, esto es posible aun. Necesita un capturador de pantalla como SnagIt y un automatizador del sistema tal como GroundControl.

Debemos configurar SnagIt para capturar un área predeterminada y guardar esta captura directamente hacia archivos numerados, la combinación para activar la captura será Ctrl+Mayus+P. Así con el diseño de un pequeño código podemos capturar todos los cuadros (moviendo automáticamente la barra de desplazamiento de 3dMeNow, gracias a GroundControl):

Código:
//
// Copyright (C) 2005-2006 by Erwin Ried.
//
// This code is under Open Publication License, for more information
// go to the 'about' page from main site. 
//
// Esta macro está definida para una resolución de 1024x768
//
SetSendKeysDelay(10)
// Activar y maximizar 3dMeNow
ActivateWindow("3DMeNow*")
MaximizeWindow()
MouseRollTo(7,659)
:arriba
Delay(50)
// Capturar imagen con SnagIt presionando (Ctrl+Mayus+P)
SendKeys("+^p")
Delay(100)
// Avanzar la barra de animación de 3dMeNow
MouseLeftButton(Down)
MouseOffset(3,0)
MouseLeftButton(Up)
GetMousePosition(%posx,%posy)
// ¿Llegamos al final del proceso?
If(morethan(%posx,1019),ExitMacro(),GoTo(":arriba"))


Después, podemos compilar el video en Macromedia Flash o Adobe Premiere. Aunque podriamos capturar directamente la pantalla a video, esto nos proporcionaría menos control, calidad y fluidez. Como ejemplo de la compilación de imágenes es el siguiente video:




7. Un simple ejemplo en Visual Basic

Para probar un poco el reproductor, hice una simple interfaz de control del complemento e incluí el modelo mostrado en este artículo, necesita las librerías de Visual Basic 6.0 para funcionar.



Para descargar el programa haga clic aquí, para ver el código de la aplicación, descarga el código fuente desde aquí. Tiene un tamaño aproximado de 2,5 megabytes e incluye todo lo necesario. La voz añadida a la animación es una extracción de la introducción del tema "The Dark Secret", del disco "Symphony Of Enchanted Lands II" del grupo Rhapsody.


8. Conclusiones

Macromedia Flash, Shockwave y muchos otros complementos del navegador y de aplicaciones podrían ser modificados a nuestro capricho gracias a pequeñas "astucias" similares a las reportadas en este artículo.

Sólo tengan presente mantener una copia de la versión original para restaurar el complemento cuando algo malo suceda y perdamos la funcionalidad que nos entregaba.

Haga clic sobre una de las estrellas para calificar este artículo.

Opiniones y comentarios (Escribir un nuevo comentario)
esta wapiisimo jeje yo tambien quiero hacer algo asi q fuerte
Escrito por laura (18/04/2007 07:58 AM)
me gustaria encontrar una pagina donde pueda meter mi foto y modificarla,si alguien sabe algo que me conteste a la_neny_gaitana@hotmail.com
Escrito por shiki (06/03/2007 06:47 PM)
Te quedó buenisimo, podrias hacer la version Ried del mono de Ally McBeal ;)
Escrito por Marcelo.Aliaga.cl (10/02/2006 12:51 PM)

Copyright © 2013 por Erwin Ried.