lunes, 10 de junio de 2013

Windows Installer Detection

Hoy en el trabajo me encontré con un problema curioso.

Estaba trabajando en Windows 7 y tenía un binario (PE) que se suponía no debía pedirme permisos a través del UAC para poder ejecutarlo. Sin embargo, me pedía confirmación al ejecutarlo:




Primeramente, pensé que esto se debía a un archivo manifest pero examinando el archivo con, por ejemplo, CFF Explorer, no había señales de ningún manifest. Qué estaba pasando?.

Le conté a marciano lo que estaba pasando y comenzamos a verlo un poco más de cerca, con una búsqueda en Google, encontró un link interesante y me dijo: "Mirá, me parece que es esto", el link era a una página en la MSDN donde se explicaba algo llamado Windows Installer Detection.

La historia es la siguiente: con la aparición de Windows Vista y UAC los programas comenzaron a correr con privilegios de un usuario standard, o sea, el usuario Administrador de Windows XP ya no era más Administrador en Vista. Esto acarreó el problema de que muchos programas que necesitaban de privilegios de Administrador para poder correr ya no funcionaban, sobre todo, instaladores de programas que necesitaban, por ejemplo, escribir en algún directorio especial.

Cómo se solucionó este problema? La gente de Microsoft desarrollo un sistema muy complejo basado en heurísticas muy complejas también, para poder determinar si un programa necesita o no de privilegios de Administrador para poder correr.

La verdad es que no se si se me va a hacer fácil explicar estas heurísticas pero voy a hacer el intento. La heuristica está basada en ... el nombre del archivo!!! (WTF?).

Si, aunque no lo crean es así, hagan la prueba. Windows se fija si el nombre del archivo contiene palabras tales como "setup", "install" o "update" y si ese es el caso, entonces, supone que el programa necesita de privilegios de Administrador para poder correr y agrega el prompt de UAC.

Entonces, hicimos la prueba de renombrar el archivo y mágicamente, el control de UAC desapareció:



 
Esto es lo que dice el artículo de Microsoft:

With the arrival of User Access Control (UAC) in Windows Vista, applications run with standard user privileges by default. Some programs, however, need to run with administrative privileges, most notably installers that need to write to privileged locations. These programs will fail with access denied errors when run as standard user. To remedy this, starting with Windows Vista, the operating system will apply some heuristics to determine whether the executable is, in fact, an installer, and if so, attempt to elevate to administrator privileges. However, sometimes these heuristics can themselves cause problems. This unit will explain these installer detection heuristics, and show you how to overcome common problems due to these.
Acá pueden leer algo más de información.
Los invito a que hagan la prueba!!!.

Hasta pronto!.