Autor
|
Tema: Una pequeña pregunta sobre .idata (Leído 7,358 veces)
|
Usuario887
Desconectado
Mensajes: 310
|
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?
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
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!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Usuario887
Desconectado
Mensajes: 310
|
todas las funciones deben ser resueltas antes de ejecutar el programa OK, eso era lo que queria saber. Gracias por tu respuesta. Un saludo.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Colaborador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Usuario887
Desconectado
Mensajes: 310
|
¿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
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Colaborador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Esta todo en el PE, el nombre de las DLLs y funciones importadas.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Usuario887
Desconectado
Mensajes: 310
|
¿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
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Colaborador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Usuario887
Desconectado
Mensajes: 310
|
Si mañana creo una DLL
No dejes para mañana lo que puedes hacer hoy. 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.
|
|
|
En línea
|
|
|
|
Danielㅤ
Desconectado
Mensajes: 1.842
🔵🔵🔵🔵🔵🔵🔵
|
No dejes para mañana lo que puedes hacer hoy. 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
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
una pequeña pregunta ´(O.o)`??
Programación C/C++
|
Danyel_Casvill
|
4
|
2,356
|
11 Noviembre 2010, 01:34 am
por Danyel_Casvill
|
|
|
Duda log ollydbg: Import Lookup Table outside .idata
Ingeniería Inversa
|
.:UND3R:.
|
2
|
3,022
|
17 Agosto 2011, 18:28 pm
por MCKSys Argentina
|
|
|
cisco idata 153
Electrónica
|
JYMSA
|
0
|
4,642
|
7 Diciembre 2012, 05:27 am
por JYMSA
|
|
|
[Pregunta]: Pregunta rápida y sencilla sobre el siguiente código.
Desarrollo Web
|
Leguim
|
4
|
3,719
|
14 Octubre 2020, 21:27 pm
por Leguim
|
|
|
Otra pequeña pregunta sobre python
Scripting
|
chuchafea
|
2
|
5,578
|
5 Abril 2023, 18:07 pm
por Danielㅤ
|
|