Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

miércoles, 21 de mayo de 2008

Modificando ventanas de diálogo en Windows

Cuando dejamos solo el ordenador, es recomendable bloquearlo para evitar la intromisión de cualquier persona en el equipo. De no hacerlo así, podrían robarnos información o alterar el estado del sistema, instalando algún software malintencionado. Esto, que es una de las máximas de la seguridad informática (seguridad física), puede conseguirse fácilmente mediante el atajo de teclado [Windows]+L, como veíamos hace unos días.


Pues bien, si deseamos hacer que desaparezca el cuadro de diálogo que aparece en esta situación, indicando que el equipo ha sido bloqueado y que para restaurarlo debemos volver a hacer login en el mismo, tras pulsar la combinación de teclas [CTRL]+[ALT]+[SUPR], sólo tenemos que seguir unos sencillos pasos.


La información de los recursos de Windows se encuentra, en buena parte, en las DLL que ejecutan determinados procesos. En concreto, la información del diálogo que comentamos se encuentra en el archivo msgina.dll, que podemos encontrar en dos ubicaciones: c:\windows\system32 y c:\windows\system32\dllcache.


A la hora de editar una DLL, podemos hacerlo principalmente de dos formas. La primera, editando el código en ensamblador de la misma (desensamblándola, pues, con herramientas como el debugger OllyDbg), o accediendo a los recursos que proporciona la propia DLL, con herramientas del tipo Resource Tuner (de pago) o Resource Hacker (gratuita). Entre los parámetros que podremos alterar de una DLL se encuentran los iconos que contiene, mensajes o, incluso, su visibilidad.


Procedemos entonces a modificar la DLL usando Resource Hacker, pero primero es conveniente realizar una copia de seguridad de la DLL original. Que luego nunca se sabe cómo terminan estos experimentos. Tras hacer la copia, procedemos a abrir la DLL, que podrá darnos varios mensajes de error por estar bloqueada por Windows, y en este caso deberíamos modificar una copia y, posteriormente, sobrescribir las originales, en sus dos ubicaciones, antes de la carga de Windows, mediante la consola de recuperación o un LiveCD de Linux, por ejemplo. En el caso en que no sea así, el cambio será inmediato.



reshacker01.PNG


Buscamos, dentro del árbol de recursos, el correspondiente al Dialog 1900, y lo abrimos. Mostrará una información similar a la siguiente:



1900 DIALOGEX 6, 18, 274, 69
STYLE DS_FIXEDSYS | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Computer Locked"
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
FONT 8, "MS Shell Dlg"
{
CONTROL "This computer is in use and has been locked.", 1752, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 37, 7, 230, 8
CONTROL "Text", 1902, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 37, 21, 230, 26
CONTROL "Press Ctrl-Alt-Del to unlock this computer.", 1754, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 37, 54, 230, 8
CONTROL "", 2403, STATIC, SS_ICON | WS_CHILD | WS_VISIBLE, 7, 5, 21, 20
}

El contenido podrá cambiar, evidentemente, dependiendo del idioma en que tengamos instalado el sistema operativo. Aquí podríamos cambiar el tipo de letra del cuadro de diálogo, el mensaje que nos muestra o vincularle algún icono a mostrar. Pero no haremos nada de esto. Simplemente cambiamos su contenido:



1900 DIALOGEX 0, 0, 0, 0
STYLE WS_POPUP | WS_VISIBLE
CAPTION ""
LANGUAGE LANG_ENGLISH, 0x3
FONT 0, ""
{
}

Pulsamos en Compile Script, y guardamos los cambios. Recordad que debe hacerse en las dos copias de la DLL. Puede que el sistema muestre una alerta indicando que se ha modificado un elemento integrante del SO y que puede ser peligroso. De ser así, aceptaremos el cambio. Si el mensaje que muestra es sobre el bloque del archivo, que no podrá ser sobrescrito, deberemos dar un rodeo para reemplazar el fichero, como apuntaba antes, haciendo uso de la Consola de recuperación o alguna otra herramienta.


Una vez modificadas las dos copias de las DLL, y tras reiniciar el equipo, si procedemos a bloquearlo veremos que ha desaparecido el diálogo correspondiente al mensaje en cuestión. Sin embargo, accederemos al equipo como siempre, pulsando [CTRL]+[ALT]+[SUPR] e identificándonos.


¿Qué utilidad puede tener esto? Por un lado, si tenemos una imagen de fondo de escritorio, al bloquear el equipo aparecerá sin la molesta ventana. Por otro, y en ambientes bromistas donde dejar el equipo desprotegido puede ser peligroso, puede servirnos para hacer la del “cazador cazado”, es decir, poner como fondo de pantalla una captura de la misma (mediante [Impr Pant], y guardando posteriormente una imagen que usaremos como fondo), ya que al bloquear el equipo, dará la impresión de estar completamente desprotegido. Si alguien intenta hacer algo, evidentemente, no podrá hacerlo (recordemos que está completamente bloqueado), y se irá con un palmo de narices ;).

5 comentarios:

  1. nesecita saver cual es una ventana de dialogo y no encuentro

    ResponderEliminar
  2. Este tipo de ventanas son aquellas que muestra el S.O. para interactuar con el usuario ante una determinada acción.

    ResponderEliminar
  3. Saludos, disculpe, mi pregunta es: ¿como saber donde esta una determinada ventana de dialogo? (en esta dll no se encuentra una ventana que estoy buscando) podria ser tan amable de ayudarme diciendome en que dlls puedo encontrar ventanas o saber a que dll pertenece alguna ventana. Saludos, gracias.

    ResponderEliminar
  4. Muy buenas, Anónimo.

    Puedes hacer uso de varias herramientas para es. Por ejemplo, DLL Export Viewer podría servirte para ver las funciones que tiene una determinada DLL y API Guide para tener incluso código de ejemplo listo para su uso.

    Saludos.

    ResponderEliminar
  5. Por cierto, Anónimo, si programas para Windows 7 o Windows XP, hay un par de páginas sobre las DLL del sistema operativo que pueden servirte de ayuda:

    http://www.win7dll.info/
    http://xpdll.nirsoft.net/

    Saludos.

    ResponderEliminar