miércoles, diciembre 06, 2006

Un filtro de páginas web algo molesto

Hace unos meses me encontré con un problema bastante interesante en cierto grupo de noticias: Tras instalar y desinstalar un producto de terceros de filtrado de contenido web, aparecía una página web cada vez que se abría un navegador de Internet. La página indicaba lo siguiente:

Your subscription isn't valid. We found the following error:

The OrangeBox Web Home service isn't running in Windows on your computer. Please reboot your computer. If this message occured after a reboot of the computer, contact your administrator.


En este artículo verá cómo llegué a la causa de la aparición de la molesta página web.

En primer lugar revisé la configuración del navegador para ver si se había agregado algún tipo de proxy a la conexión a Internet. Pero no, no se había agregado ningún proxy; además, la lista de procesos observada desde Process Explorer indicaba que no había ningún proceso residente que pudiera estar interceptando las salidas HTTP de la máquina. La causa debía estar entonces en el kernel de Windows, específicamente en algún controlador de arranque (boot driver) o similar que hubiera instalado el producto y que estaría interceptando silenciosamente las conexiones web del sistema.

En aquel momento no tenía disponible otra máquina física libre para realizar una sesión remota de depuración de kernel (live kernel debugging) y tampoco tenía muchas ganas de realizarla desde una máquina virtual. :-P Así que me dispuse a volcar la memoria del sistema afectado y "escudriñar" entre todos los datos intentando buscar alguno que me diera algo de luz sobre el problema. ¿Qué dato podría utilizar como guía? Decidí anotar la palabra "webfilter", que es la que aparecía en la URL de la barra de direcciones del navegador cada vez que se intentaba abrir una página web.

Generando un volcado de memoria

Para generar manualmente un volcado de memoria en un sistema NT se puede emplear el método descrito en este artículo de la KB de Microsoft. El controlador i8042prt.sys busca el valor "CrashOnCtrlScroll" durante su carga; si este valor tiene contenido "1", el controlador se mantiene "escuchando" en su ISR (Interrupt Service Routine) esperando la combinación de teclas Ctrl derecho+Bloq. desplazamiento+Bloq. desplazamiento. Esto hace que la función I8xProcessCrashDump haga una llamada al kernel, concretamente a la función KeBugCheckEx del fichero Ntdll.dll, lo que genera finalmente el volcado de memoria y posterior reinicio del sistema (si así está configurado en el panel Inicio y recuperación de Propiedades del sistema).

Nota: Cuando se produce un volcado de memoria, Windows examina antes el tipo de volcado que quiere el usuario. Esto se puede manejar desde el panel Propiedades del sistema, pestaña Opciones avanzadas, botón Configuración (apartado Inicio y recuperación), apartado Escribir información de depuración.

En este caso la opción elegida fue Volcado de memoria completa, lo que genera un fichero de volcado del tamaño de la RAM física del equipo. Como este fichero puede resultar demasiado grande, no siempre es necesario realizar un volcado completo de RAM, y en muchas ocasiones esto no aporta información relevante sobre la causa del problema.


Analizando con Windbg

Windbg es un depurador de Microsoft que puede ser descargado de forma gratuita desde la dirección: http://www.microsoft.com/whdc/devtools/debugging/default.mspx. Antes de utilizarlo, es importante que se configuren correctamente los símbolos del sistema.

Para configurar los símbolos en Windbg, haga clic sobre File, Symbol File Path. Si dispone de conexión a Internet durante la sesión de depuración, esta línea estándar hará que Windbg descargue al directorio C:\Websymbols los símbolos apropiados para su sistema operativo según los vaya necesitando:

SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols


Una vez que los símbolos estaban correctamente configurados, abrí el fichero de volcado desde Windbg pulsando sobre File, Open Crash Dump.

Con el fichero de volcado ya cargado en Windbg, podemos examinar la pila de llamadas en el momento que se generó el volcado de memoria. En este caso esto no resultó de demasiada utilidad, puesto que en el momento que generé manualmente el volcado de memoria el sistema estaba en estado inactivo y funcionando correctamente.

Para buscar cadenas dentro de la memoria del volcado empleé el comando "s", con el parámetro -a, que permite buscar cadenas ASCII, y con la cadena "webfilter" como parámetro de búsqueda. F7000000 y FAAAAAAA son las direcciones de inicio y fin donde quise realizar la búsqueda. Son las direcciones donde Windows comienza a cargar los boot drivers, lo que evita que el depurador tarde demasiado tiempo buscando en porciones de memoria no relevantes en este caso concreto.

El resultado de la búsqueda fue esclarecedor, en la dirección de memoria F9c8b463 estaba la cadena "webfilter/licerr..." ¡justamente la dirección web que aparecía al cargar cualquier página!

Cadena webfilter/licerr, parte de la URL que se mostraba en el navegador web.

Seguidamente quise saber a qué cosa pertenecía esa cadena. El comando !address permite realizar eso mismo:

Ya lo tenemos, el controlador Difdrv.sys es el que generaba esa molesta página web.

Como ve, era el controlador Difdrv.sys, instalado por el filtro de terceros, el que hacía aparecer esa página web de error cada vez que se accedía a Internet. En su código observé llamadas a Difsvc.exe, el servicio instalado por el filtro, con el objeto de comprobar que efectivamente estuviera iniciado. Si no lo estaba, aparecía otra web indicando de dicho percance.

Espero que les haya parecido interesante el artículo. La aplicación de filtrado descrita aquí (OrangeBoxWeb) no es demasiado conocida y las referencias son prácticamente nulas en cualquier buscador de Internet, así que espero que el artículo les permita solucionar el problema si lo experimentan en sus sistemas o, por qué no, les sirva para comenzar a familiarizarse con Windbg, un buen depurador de Microsoft.

miércoles, noviembre 29, 2006

¿Qué es la vista "Mosaicos extendidos"?

En cierto grupo de noticias me encontré con un usuario de Windows Vista que experimentaba en su sistema lo siguiente: La ubicación Equipo mostraba su contenido en una vista bastante poco conocida: La vista "Mosaicos extendidos". En este artículo conocerá un poco más acerca de esa vista y sabrá cómo recuperar la opción estándar ("Mosaicos") si experimenta este mismo problema en su PC.

La vista "Mosaicos extendidos" se trata de una modificación de la vista "Mosaicos" en la que la leyenda de los archivos cubre la ventana en la totalidad de su ancho, por tanto no hay columnas definidas. Tiene el aspecto de la siguiente figura:


Explorador de Windows configurado en la vista "Mosaicos extendidos"

¿Cómo se activa esta vista? En la opción Vistas sólo aparece Mosaicos, no Mosaicos extendidos

Para activar la vista "Mosaicos extendidos" es necesario que la carpeta en cuestión esté configurada en la vista "Mosaicos" y que además se haya agregado un folder flag a dicha carpeta. Los folder flags son valores de doble palabra que forman en su conjunto un tipo enumerado. Se encargan de manejar ciertas características adicionales de la vista de las carpetas, tales como "alinear a la cuadrícula", mostrar subcarpetas, etc. Si quiere obtener más información sobre este tipo enumerado, examine el fichero de cabecera Shobjidl.h presente en el SDK de Windows Vista.

Toda esta información se almacena en el Registro

Cuando una aplicación hace uso de la correspondiente API para habilitar ciertos folder flags (SetCurrentFolderFlags), Explorador de Windows almacena en una ruta del Registro esta información. Windows Vista, a diferencia de Windows XP, almacena la información sobre las carpetas en estas rutas del Registro: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags y HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU. Cada subclave representa un bag o información sobre una carpeta. En concreto, los folder flags se almacenan en un valor DWORD llamado "FFlags".

Si quisiera modificar la información que se muestra en dicha vista, deberá agregar/modificar un valor de cadena llamado "ExtendedTileInfo" en ciertas partes del Registro. Este artículo no pretende entrar en detalle en este aspecto, consulte la documentación de MSDN para más información.

¿Cómo recuperar la vista Mosaicos?

Si su sistema de pronto ha empezado a mostrarle cierta carpeta en la vista "Mosaicos extendidos" y quisiera recuperar la vista "Mosaicos", siga estos pasos:

  1. Descargue Process Monitor o Regmon desde http://www.microsoft.com/technet/sysinternals/default.mspx.

  2. Ejecútelo y establezca un filtro con la siguiente palabra clave (sin comillas): "Bags". Para saber cómo establecer filtros, consulte la documentación de Process Monitor o de Regmon.

  3. Asegúrese de que la aplicación está monitorizando los accesos al Registro del sistema y abra la carpeta afectada.

  4. Obtendrá una salida como la de la figura:

En este momento ya sabe que la subclave \Bags\3 es la que mantiene la información de la carpeta afectada. Cierre todas las instancias de Explorador de Windows, abra Editor del Registro (Regedit.exe) y elimine la subclave completa o, si lo prefiere, solamente el valor "FFlags" que contenga. Windows lo creará de nuevo cuando acceda a la carpeta y cierre Explorador de Windows.

Espero que este artículo les haya ayudado a profundizar sobre una característica presente desde hace tiempo en Windows pero que no resultaba muy conocida: los folder flags. Además se ofrecen las pautas para recuperar la opción de la vista "Mosaicos" cuando sólo se muestre "Mosaicos extendidos".

lunes, noviembre 20, 2006

¿Sabía que...? [III]

Si en Windows XP hace clic con el botón derecho del mouse sobre una región libre del escritorio y selecciona Propiedades, puede observar que la pestaña Configuración tiene un espacio en blanco al final. Este espacio en blanco está presente en todas las versiones localizadas de XP y no se trata de un gazapo de alguno de los programadores. Aunque le parezca extraño, se trata de un "arreglo" para garantizar la compatibilidad con cierto software antiguo de tarjetas gráficas Matrox. Le sorprendería saber la cantidad de arreglos de este tipo que hay en el código de Windows para asegurar la compatibilidad con software algo mal diseñado pero sin embargo extendido.