Se que .idata mantiene una tabla de las direcciones a las funciones de las importaciones... Mi pregunta es... ¿Todas las importaciones?
Hice un programa "Hello world" para analizar esta tabla y veo un millon de direcciones, cuando mi programa usa pocas funciones (en relacion).
Entonces, ¿Se carga todo?
Esto es trabajo del dynamic linker por lo que me imagino que no tiene idea de que funciones son las que va a utilizar el programa, por lo que las carga todas, ¿No?
Hola!
El nombre de la sección es irrelevante, lo que importa es lo que contiene la sección.
En el caso del Import Directory y la IAT, todas las funciones deben ser resueltas antes de ejecutar el programa. Por eso están ahí. Si quieres usar API's luego de caragdo el .exe, usas LoadLibrary + GetProcAddress.
Siempre conviene usar un parser de PE Header (por ejemplo CFF Explorer o PE-bear) para ver qué hay en cada sección.
Saludos!
Citartodas las funciones deben ser resueltas antes de ejecutar el programa
OK, eso era lo que queria saber.
Gracias por tu respuesta.
Un saludo.
Cita de: marax en 15 Noviembre 2021, 17:31 PM
Se que .idata mantiene una tabla de las direcciones a las funciones de las importaciones... Mi pregunta es... ¿Todas las importaciones?
Hice un programa "Hello world" para analizar esta tabla y veo un millon de direcciones, cuando mi programa usa pocas funciones (en relacion).
Entonces, ¿Se carga todo?
Esto es trabajo del dynamic linker por lo que me imagino que no tiene idea de que funciones son las que va a utilizar el programa, por lo que las carga todas, ¿No?
¿Que es todas? Todas las que tu programa enlaza estaticamente si, todas las que existen no. Y ojo que no las referencies directamente en tu codigo no significa que la RTL no lo haga.
Cita de: Eternal Idol en 15 Noviembre 2021, 19:54 PM
¿Que es todas? Todas las que tu programa enlaza estaticamente si, todas las que existen no. Y ojo que no las referencies directamente en tu codigo no significa que la RTL no lo haga.
Justo venia a aclarar que acabo de usar una herramienta del depurador para mostrarme las importaciones del programa y efectivamente no carga todas las referencias en .idata/.rdata/etc. Carga solo unas. (las que necesita, aparentemente).
Una pregunta, como exactamente es que el enlazador dinamico sabe que librerias cargar? Lo especifica en alguna parte el PE header?
Iba a preguntar si para anyadir nuevas referencias habria que modificar el fichero. Tomare por hecho que si pero como recuerdo hace tiempo haber visto un virus que las cargaba dinamicamente prefiero dejar la duda abierta
Esta todo en el PE, el nombre de las DLLs y funciones importadas.
¿Y si la funcion no esta importada de la DLL y no hay referencias a LoadLibrary + GetProcAddress, no hay manera de acceder a una funcion?
(No se si se crea que pregunto para desarrollo de malware, porque parece, pero es curiosidad. Si vamos al caso yo infectaria un binario con referencias a las funciones que normalmente uso y tengo una lista larga. Es que es interesante imaginar como se podria acceder a una funcion "Fuera del alcance" del binario en memoria).
O en disco. Mas en disco. Si vamos al caso nunca he hecho un run PE.
Saludiños
No sin hacer lo mismo (o algo muy semejante) que hacen esas funciones, leer el archivo, procesarlo, mappearlo en memoria como ejecutable por un lado y procesar el PE para encontrar las funciones por el otro. Si mañana creo una DLL y la copio en system32 no se va a cargar en todos los procesos innecesariamente, solo se cargara en los que la referencien de alguna manera.
Cita de: Eternal Idol en 16 Noviembre 2021, 15:15 PM
Si mañana creo una DLL
No dejes para mañana lo que puedes hacer hoy. :silbar:
Cita de: Eternal Idol en 16 Noviembre 2021, 15:15 PM
no se va a cargar en todos los procesos innecesariamente
Entonces debe haber algo como una "Lista de importaciones" ¿No? ¿Como se llama...?
Gracias por tu ayuda.
Cita de: marax en 16 Noviembre 2021, 18:56 PM
No dejes para mañana lo que puedes hacer hoy. :silbar:
El compañero Ídolo Eterno no se refería a que realmente mañana vaya a crear una DLL, sinó que sólo fue un ejemplo para poder expresar su explicación.
Saludos
Aca lo explican todo y mucho mas:
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
Cita de: Danielㅤ en 16 Noviembre 2021, 19:17 PM
El compañero Ídolo Eterno no se refería a que realmente mañana vaya a crear una DLL, sinó que sólo fue un ejemplo para poder expresar su explicación.
Saludos
Hombre Daniel, era broma :xD
Cita de: Eternal Idol en 16 Noviembre 2021, 19:29 PM
Aca lo explican todo y mucho mas:
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
(https://cdn.memegenerator.es/descargar/25245829)
Tocara usar Ctrl+F ::)
No se cuantas veces he entrado ahi en la ultima semana.
Muchas gracias por tu ayuda.
Buenas noches.
Cita de: marax en 16 Noviembre 2021, 19:37 PM
Hombre Daniel, era broma :xD
Ahhh jajaja bueno me gusta ese humor ;D
Saludos!