Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Usuario887 en 15 Noviembre 2021, 17:31 pm



Título: Una pequeña pregunta sobre .idata
Publicado por: Usuario887 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?


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: MCKSys Argentina 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!


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Usuario887 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.


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Eternal Idol 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.


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Usuario887 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


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Eternal Idol en 15 Noviembre 2021, 23:03 pm
Esta todo en el PE, el nombre de las DLLs y funciones importadas.


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Usuario887 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


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Eternal Idol 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.


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Usuario887 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.


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Danielㅤ 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


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: 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


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Usuario887 en 16 Noviembre 2021, 19:37 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

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.


Título: Re: Una pequeña pregunta sobre .idata
Publicado por: Danielㅤ en 16 Noviembre 2021, 20:42 pm
Hombre Daniel, era broma  :xD


Ahhh jajaja bueno me gusta ese humor  ;D


Saludos!