¿Nadie piensa en las DLL? I
¿Nadie piensa en las DLL? I
¿Nadie piensa en las DLL? II
[…]
Introducción
A primeros de octubre fue celebrada la 3ª edición de las conferencias Navaja Negra, como ya estuve comentado por aquí tenía una pequeña charla sobre librerías DLL. Faltaba por divulgar la parte más técnica.
En los siguientes artículos, vamos a ver como es posible mediante la manipulación y modificación de librerías logramos evitar las medidas de seguridad como son los antivirus, y ejecutar nuestros códigos en el sistema.
El objetivo principal, es concienciar de los peligros, ya que se tiene la falsas creencia que sólo un fichero (*.exe) puede ser infectado. Un usuario más avanzado puede tener más cuidado con otros ficheros como: (*.pdf;*.bat;*.msi…) Pero en definitiva, todos son peligrosos.
¿En que he basado tal afirmación?
Según virus total (a septiembre de 2013). Las DLL están en el 6º lugar de los ficheros más analizados. Lo cual no está nada mal, si no tenemos en cuenta que se han analizado un total de appx 1.000.000 fotografías en diferentes formatos.
¿Qué es una DLL?
Una librería es simplemente un conjunto de datos y código. Se utiliza para almacenar aquellas funciones que van a ser recurrentes. Es decir, si tenemos la función “Suma” y la vamos a necesitar utilizar en todos nuestros proyectos, es más sencillo crear una librería con la función que tener que escribirla de nuevo en cada uno de nuestros programas. De esta forma, además estamos segmentando las secciones de código, lo que simplifica la lectura.
Resumiendo, las librerías albergan:
– Procedimientos (no devuelven valores).
– Funciones (devuelven un valor)
Carga de librerías
Existen 2 formas de poder cargar una librería una es de forma estática, el programa tiene como parte del código las DLL que va a necesitar ejecutar. O de forma dinámica en la que el programa solicita las DLL que necesita y es en ese momento en el que le son cargadas.
Utilizar una de las dos formas, no es excluyente. Un programa perfectamente puede utilizar ambas formas.
IAT (Estática)
La carga se produce al iniciar el ejecutable, antes de ser ejecutado carga e inicializa las librerías que se han agregado al programar. De esta forma, antes de ser ejecutado ya se sabe las necesidades del programa. Es obligatorio que todas las DLL declaradas se encuentren instaladas. En caso contrario el programa no podrá arrancar y saldría el mensaje avisando que nos falta una o varias librerías.
Dinámica
Como no todas las librerías tienen que ser declaradas, si no que durante la ejecución del programa puede necesitar cargarlas (Esto se puede producirse en caso de no utilizar una función hasta que se hace “click” en un apartado o zona concreta del programa ej: si no vas a usar la función de “sumar”.) De esta manera se evita cargar la memoria de componentes que pueden no ser necesarios
Con la carga dinámica, en caso de no existir la librería que se ha solicitado el programa funcionará normalmente hasta que se utilice alguna de las funciones integradas. En caso de no utilizar ninguna, no se produce el error.
¿Cómo funciona un ejecutable?
El sistema operativo carga el programa en memoria, revisa en la IAT las libarías declaradas y procede a inicializarlas. Una vez finalizado comienza la ejecución normal de la aplicación.
Continuará…