Recordar que IAT es Import Addres Table que es una tabla encargada de contener las direcciones de las APIS para darnos de alguna u otra manera "portabilidad" en nuestras aplicaciones, esto funciona a través de IID (Image import descriptor) localizada en la tabla IT Import tables, que se inicializa antes de llegar al Entry point. Esta tabla contiene el nombre de las APIS y sus librerías y para determinar las direcciones que serán escribidas en la IAT se utiliza GetProcAddress
Para ver la IT debemos tener un visualizador de la cabecera PE como lo es por ejemplo el depurador OllyDBG (en la ventana DUMP, clic derecho->especial->header)
nos localizamos en en el address de la cabezera (por lo general 400000, si no sabemos nos vamos a memory, ahí OllyDBG nos mostrará desde que dirección comienza la cabecera) buscamos el address de IT en mi caso:
00400160 14420000 DD 00004214 ; Import Table address = 4214
le sumamos la ImageBase que para mi es 400000 y nos da 404214 si nos dirigimos ahí encontraremos las IID que son 6 DWORD en donde las más importantes son la el penúltimo DWORD(5) y el último DWORD (6)
en mi caso el quinto es: 00404224 2C 40 00 00 ,@..
por lo que si le sumo la ImagenBase y nos dirigimos ahí (40402C), obtendremos la dirección ya resuelta (esto se debe a que detenido en el EP ya se han resuelto la dirección) pero si hacemos clic derecho y colocamos view executable file, veremos los datos que tiene en el disco rígido (sin inicializar el ejecutable) en mi caso es:
0000402C 08 44 00 00 D..
por lo que si le sumamos nuevamente la ImageBase nos dará 404408 y esto nos lleva a la string MessageBoxA por lo que el 5 valor (DWORD) de la IID ubicada en la IT corresponde a un puntero a la string de la API MessageBoxA y este obtiene su valor a través de GetProcAddress, una vez obtenida lo sobre escribe, por eso el por qué de que cuando ya estamos detenidos en el EP la IID está ya completa.
en cuanto al quinto valor apunta indirectamente a la string con el nombre de la .dll de la API a la cual se quiere obtener la dirección.
En resumen tenemos
IT esta se subdivide en IID que son conjuntos de 6 DWORD en donde el último y penúltimo subconjunto son importantes:
5-> apunta a la string de la API
6-> apunta a la librería (.dll)
esta se encarga de obtener las direcciones de las APIS de las máquinas y las sobre escribe en la IAT esta es en donde el programa por lo general solicita las direcciones de las APIS, digo general por que existe la posibilidad de que el programa sea alterado y utilice otras direcciones o que la IAT sea un intermediario (packers), pero en resumen la idea es la misma.
Espero que se te haya aclarado un poco todo, saludos
Para ver la IT debemos tener un visualizador de la cabecera PE como lo es por ejemplo el depurador OllyDBG (en la ventana DUMP, clic derecho->especial->header)
nos localizamos en en el address de la cabezera (por lo general 400000, si no sabemos nos vamos a memory, ahí OllyDBG nos mostrará desde que dirección comienza la cabecera) buscamos el address de IT en mi caso:
00400160 14420000 DD 00004214 ; Import Table address = 4214
le sumamos la ImageBase que para mi es 400000 y nos da 404214 si nos dirigimos ahí encontraremos las IID que son 6 DWORD en donde las más importantes son la el penúltimo DWORD(5) y el último DWORD (6)
en mi caso el quinto es: 00404224 2C 40 00 00 ,@..
por lo que si le sumo la ImagenBase y nos dirigimos ahí (40402C), obtendremos la dirección ya resuelta (esto se debe a que detenido en el EP ya se han resuelto la dirección) pero si hacemos clic derecho y colocamos view executable file, veremos los datos que tiene en el disco rígido (sin inicializar el ejecutable) en mi caso es:
0000402C 08 44 00 00 D..
por lo que si le sumamos nuevamente la ImageBase nos dará 404408 y esto nos lleva a la string MessageBoxA por lo que el 5 valor (DWORD) de la IID ubicada en la IT corresponde a un puntero a la string de la API MessageBoxA y este obtiene su valor a través de GetProcAddress, una vez obtenida lo sobre escribe, por eso el por qué de que cuando ya estamos detenidos en el EP la IID está ya completa.
en cuanto al quinto valor apunta indirectamente a la string con el nombre de la .dll de la API a la cual se quiere obtener la dirección.
En resumen tenemos
IT esta se subdivide en IID que son conjuntos de 6 DWORD en donde el último y penúltimo subconjunto son importantes:
5-> apunta a la string de la API
6-> apunta a la librería (.dll)
esta se encarga de obtener las direcciones de las APIS de las máquinas y las sobre escribe en la IAT esta es en donde el programa por lo general solicita las direcciones de las APIS, digo general por que existe la posibilidad de que el programa sea alterado y utilice otras direcciones o que la IAT sea un intermediario (packers), pero en resumen la idea es la misma.
Espero que se te haya aclarado un poco todo, saludos