11
Ene
¿Será virus o no?
El viernes pasado fui a la empresa a la que le estamos desarrollando el sistema de la query perezosa, para llevarles una beta del programa, el cual tiene algunos detalles menores, sobre todo de interacción con la versión del conector de Oracle que existe en la empresa, por lo que las cifras no tienen ningún decimal.
El punto es que en una de las computadoras el sistema no funciono, debido a que no podía cargar de forma correcta una Dll, concretamente midas.dll. La biblioteca estaba en el mismo directorio que el ejecutable, por lo que no debería de causar problema alguno, más sin importar los intentos que hicimos, inclusive cambiando la versión del a dll esta siguió igual. El caso es que la primera vez que lo ejecute, no estaba la dll, hecho que es completamente achacable a mi, puesto que olvide copiarla de la otra computadora. A ciencia cierta no se lo que paso pero mi suposición es que cuando no se encontró la Dll el algún virus pudo cachar el error y acto seguido copiarse el mismo con ese nombre y colocarse en el directorio de system32 y he hizo todos los movimientos necesarios en el registro para que se cargue con cada aplicación.
Tengo que admitir que esta suposición es sin fundamento alguno, solamente mi intuición, que ya en algunas otras veces me ha llevado a descubrir una que otra cosilla en las computadoras que en ocasiones reparo. Hay dos formas en que una aplicación puede cargar una dll, de forma dinámica y normal. En la forma normal, el loader del sistema operativo lee la tabla de imports del ejecutable en la cabecera del mismo, busca la dll y la carga en memoria o simplemente la mapea si es que ya se encuentra cargada. Este método tiene la desventaja de que si la dll no se encuentra entonces el programa no puede iniciar.
Cuando la dll se carga de forma dinámica, lo que se requiere es hacer una llamada a la función de la api de windows LoadLibrary a la cual se le pasa como parámetro la ruta de la librería que deseamos cargar en memoria. La ventaja es que aunque la dll no exista, el programa se ejecuta, el problema es que no podremos hacer uso de los recursos que se encuentren en esa librería. En realidad no son solo dos, sino que hay más pero que a final de cuentas caen en la segunda, es decir que son de forma dinámica, muchas de ellas inventadas o descubiertas por aquellos que se dedican a producir malware.
En este caso la librería se cargaba de forma dinámica, es decir que el programa se ejecutaba, pero al no poder para comunicarse con el servidor de base de datos requería cargar esa dll, entonces la comunicación era imposible.
Tal vez por azares del destino, unos minutos después de que intente de ejecutar el programa en la computadora, llego la persona de soporte técnico de la empresa para revisar otra de las maquinas que se encontraban en la oficina. Cuando la licenciada cuya maquina era la del problema con la dll, le comento del problema, el tipo de soporte me pregunto que cual era el problema y le comente que no se una dll no se podía cargar. Cuando el ejecuto el programa dijo en un tomo burlesco "Si corrió", a lo que acto seguido le respondí "Ese no es el problema, el problema es que lanza un error". Digamos que en ese momento surgió una pequeña guerra de egos, la cual rápidamente termino cuando el de soporte tuvo que pedir ayuda a su jefe vía teléfono, para explicarle el problema y ver cual era la solución. Creo que en consenso, tanto el de soporte como su jefe llegaron a la decisión de que el problema no era causado por un virus, que eso era ilógico.
Como era de suponerse el tipo de soporte partió sin dar solución al problema, tal vez alistándose para respaldar y después formatear.
Luego de un rato volví a la computadora y otra de las cosas que fortaleció mi creencia de que ahí había virus encerrado, fue el hecho de que el administrador de tareas se encontraba deshabilitado. Claro esta que esto es algo muy común en las infecciones que sufre nuestra pc. No tarde en buscar en mi memoria a mi buen amigo USB Cleaner (UC), para habilitar todo lo que fuera necesario. Más cual sería mi sorpresa al ver que el programa UC simplemente no se ejecutó. En este punto decidí abortar la misión de revisar la computadora, ya que la empresa cuenta con un departamento de soporte técnico, aunque no se si podrán hacer algo mejor que formatear computadoras.
El punto es que en una de las computadoras el sistema no funciono, debido a que no podía cargar de forma correcta una Dll, concretamente midas.dll. La biblioteca estaba en el mismo directorio que el ejecutable, por lo que no debería de causar problema alguno, más sin importar los intentos que hicimos, inclusive cambiando la versión del a dll esta siguió igual. El caso es que la primera vez que lo ejecute, no estaba la dll, hecho que es completamente achacable a mi, puesto que olvide copiarla de la otra computadora. A ciencia cierta no se lo que paso pero mi suposición es que cuando no se encontró la Dll el algún virus pudo cachar el error y acto seguido copiarse el mismo con ese nombre y colocarse en el directorio de system32 y he hizo todos los movimientos necesarios en el registro para que se cargue con cada aplicación.
Tengo que admitir que esta suposición es sin fundamento alguno, solamente mi intuición, que ya en algunas otras veces me ha llevado a descubrir una que otra cosilla en las computadoras que en ocasiones reparo. Hay dos formas en que una aplicación puede cargar una dll, de forma dinámica y normal. En la forma normal, el loader del sistema operativo lee la tabla de imports del ejecutable en la cabecera del mismo, busca la dll y la carga en memoria o simplemente la mapea si es que ya se encuentra cargada. Este método tiene la desventaja de que si la dll no se encuentra entonces el programa no puede iniciar.
Cuando la dll se carga de forma dinámica, lo que se requiere es hacer una llamada a la función de la api de windows LoadLibrary a la cual se le pasa como parámetro la ruta de la librería que deseamos cargar en memoria. La ventaja es que aunque la dll no exista, el programa se ejecuta, el problema es que no podremos hacer uso de los recursos que se encuentren en esa librería. En realidad no son solo dos, sino que hay más pero que a final de cuentas caen en la segunda, es decir que son de forma dinámica, muchas de ellas inventadas o descubiertas por aquellos que se dedican a producir malware.
En este caso la librería se cargaba de forma dinámica, es decir que el programa se ejecutaba, pero al no poder para comunicarse con el servidor de base de datos requería cargar esa dll, entonces la comunicación era imposible.
Tal vez por azares del destino, unos minutos después de que intente de ejecutar el programa en la computadora, llego la persona de soporte técnico de la empresa para revisar otra de las maquinas que se encontraban en la oficina. Cuando la licenciada cuya maquina era la del problema con la dll, le comento del problema, el tipo de soporte me pregunto que cual era el problema y le comente que no se una dll no se podía cargar. Cuando el ejecuto el programa dijo en un tomo burlesco "Si corrió", a lo que acto seguido le respondí "Ese no es el problema, el problema es que lanza un error". Digamos que en ese momento surgió una pequeña guerra de egos, la cual rápidamente termino cuando el de soporte tuvo que pedir ayuda a su jefe vía teléfono, para explicarle el problema y ver cual era la solución. Creo que en consenso, tanto el de soporte como su jefe llegaron a la decisión de que el problema no era causado por un virus, que eso era ilógico.
Como era de suponerse el tipo de soporte partió sin dar solución al problema, tal vez alistándose para respaldar y después formatear.
Luego de un rato volví a la computadora y otra de las cosas que fortaleció mi creencia de que ahí había virus encerrado, fue el hecho de que el administrador de tareas se encontraba deshabilitado. Claro esta que esto es algo muy común en las infecciones que sufre nuestra pc. No tarde en buscar en mi memoria a mi buen amigo USB Cleaner (UC), para habilitar todo lo que fuera necesario. Más cual sería mi sorpresa al ver que el programa UC simplemente no se ejecutó. En este punto decidí abortar la misión de revisar la computadora, ya que la empresa cuenta con un departamento de soporte técnico, aunque no se si podrán hacer algo mejor que formatear computadoras.






Escribir un comentario