elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Una pequeña pregunta sobre .idata
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Una pequeña pregunta sobre .idata  (Leído 963 veces)
marax


Desconectado Desconectado

Mensajes: 310


BURN MF BURN


Ver Perfil
Una pequeña pregunta sobre .idata
« 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?


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.016


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Una pequeña pregunta sobre .idata
« Respuesta #1 en: 15 Noviembre 2021, 18:08 pm »

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."

marax


Desconectado Desconectado

Mensajes: 310


BURN MF BURN


Ver Perfil
Re: Una pequeña pregunta sobre .idata
« Respuesta #2 en: 15 Noviembre 2021, 18:56 pm »

Citar
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
Colaborador
***
Desconectado Desconectado

Mensajes: 5.852


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Una pequeña pregunta sobre .idata
« Respuesta #3 en: 15 Noviembre 2021, 19:54 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.
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
marax


Desconectado Desconectado

Mensajes: 310


BURN MF BURN


Ver Perfil
Re: Una pequeña pregunta sobre .idata
« Respuesta #4 en: 15 Noviembre 2021, 21:52 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
En línea

Eternal Idol
Colaborador
***
Desconectado Desconectado

Mensajes: 5.852


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Una pequeña pregunta sobre .idata
« Respuesta #5 en: 15 Noviembre 2021, 23:03 pm »

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
marax


Desconectado Desconectado

Mensajes: 310


BURN MF BURN


Ver Perfil
Re: Una pequeña pregunta sobre .idata
« Respuesta #6 en: 16 Noviembre 2021, 14:58 pm »

¿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
Colaborador
***
Desconectado Desconectado

Mensajes: 5.852


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Una pequeña pregunta sobre .idata
« Respuesta #7 en: 16 Noviembre 2021, 15:15 pm »

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
marax


Desconectado Desconectado

Mensajes: 310


BURN MF BURN


Ver Perfil
Re: Una pequeña pregunta sobre .idata
« Respuesta #8 en: 16 Noviembre 2021, 18:56 pm »

Si mañana creo una DLL

No dejes para mañana lo que puedes hacer hoy.  :silbar:

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ㅤ


Conectado Conectado

Mensajes: 902


🔵🔵🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Una pequeña pregunta sobre .idata
« Respuesta #9 en: 16 Noviembre 2021, 19:17 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
En línea

¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
una pequeña pregunta ´(O.o)`??
Programación C/C++
Danyel_Casvill 4 1,384 Último mensaje 11 Noviembre 2010, 01:34 am
por Danyel_Casvill
Duda log ollydbg: Import Lookup Table outside .idata
Ingeniería Inversa
.:UND3R:. 2 2,001 Último mensaje 17 Agosto 2011, 18:28 pm
por MCKSys Argentina
cisco idata 153
Electrónica
JYMSA 0 3,555 Último mensaje 7 Diciembre 2012, 05:27 am
por JYMSA
Pequeña duda sobre GCC
Programación C/C++
snake_linux 3 999 Último mensaje 3 Septiembre 2015, 12:23 pm
por snake_linux
[Pregunta]: Pregunta rápida y sencilla sobre el siguiente código.
Desarrollo Web
Leguim 4 1,181 Último mensaje 14 Octubre 2020, 21:27 pm
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines