En primer lugar examiné el fichero de reporte de instalación que genera AVG al ser instalado, el fichero Avg7inst.log. En él busqué la línea que detalla el problema concreto de instalación, representada en la siguiente imagen:
¿No puede encontrar el archivo o el directorio? Extraño mensaje de error, sin duda.
¿Cómo averiguar cuál era el causante?
Ante este mensaje de error durante la instalación, no me quedó otra opción que examinar detalladamente la instalación del antivirus hasta llegar al punto en el que se trata de instalar el fichero Avgamsvr.exe. Para ello, pedí al usuario un fichero PML generado por Process Monitor. Process Monitor (http://www.microsoft.com/technet/sysinternals/processesandthreads/processmonitor.mspx), es una excelente herramienta que monitoriza los accesos al registro y a archivos del disco que realizan los procesos del sistema. Combina lo mejor de Regmon, Filemon y Process Explorer en una sola herramienta.
Al abrir el fichero PML y filtrar adecuadamente, me encontré con un código de error algo más esclarecedor:
El error que devolvió el controlador de Process Monitor sin duda era más explicativo.
El código Sharing Violation (infracción al compartir) es un código de error muy común en Windows. Ocurre cuando algún proceso intenta modificar de alguna manera algún fichero que está siendo utilizado por otro proceso. Pero, ¿cuál podría ser el proceso que estaba manejándolo?
Es bastante extraño que un fichero que acaba de ser creado esté siendo accesado por el sistema operativo. Quise echar un vistazo a la pila de llamadas del hilo del proceso Avgsetup.exe que estaba funcionando en el momento de recibir el mensaje de error. Me encontré con esto:
Este era el causante de la instalación fallida.
Si lee la información de la pila, verá que el hilo de la instalación en el punto concreto de la creación del fichero estaba funcionando en modo kernel (todas las funciones tienen una K rosa a la izquierda). En concreto, la función ZwSetSystemInformation del fichero Ntoskrnl.exe llama a un extraño fichero M_hook.sys, residente en el directorio %AppData%\hidires. La función ZwSetSystemInformation no está públicamente documentada, pero su prefijo (Zw) me indica que es una función relacionada con los servicios del sistema que acceden en modo kernel (y por tanto no hay validación de parámetros, al contrario de las que tienen prefijo Nt).
Ya se encontró al culpable
El fichero M_hook.sys tiene toda la pinta de tratarse de un rootkit instalado por algún troyano. Su objetivo debe de ser esconderse de los mecanismos internos del sistema operativo y bloquear la creación en el disco de ficheros relacionados con software antivirus conocido. Ante un sistema comprometido de esta manera, la única solución que garantice que no resta código malicioso en el disco es reinstalar el sistema operativo de cero.
Espero que les haya parecido interesante el artículo. Para evitar este tipo de problemas, recomiendo mantener el sistema al día, trabajar con un usuario con los menores privilegios posibles, activar un antivirus actualizado así como un cortafuegos y tener mucho cuidado con el software que se descarga de Internet, especialmente si proviene de sitios no oficiales o de redes P2P.