Título: Confundiendo IAT, IT y la localizacion? Publicado por: x64core en 27 Marzo 2012, 10:09 am Buenas a todos bueno veran estoy estudiando mas sobre la estructure PE en los programas hechos con MASM32
y bueno me e fijado que siempre que uso APIs en la sección de codigo me genera unos JMPs a las APIs, y me puse a averiguar del porque. y por ejemplo este sencillo codigo ( lo muestro de una vez el dessensamblado): Código: 00401000 >/$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL hasta ahora supongo que seria la Import table que se rellena con las direcciones pero ahora viendo con analizador PE ( es mismo programa) la import table esta en la direccion: Código: Virtual Address Size se supone que estaria en la direccion tal pero... no. no se supondria que el call saltaria a la import table? tambien quiza estoy confundiendo con la IAT pero ya me e leido algunos conceptos creo que estoy confundido no :| o falta algo por explicar :P tambien me e fijado que depurando algunos codigo de programas cuando hacen algun call a una API no salta a una tabla que vendria siendo la IT sino salta de una sola vez a la API sin pasar a un JMP antes, el JMP deberia ser siempre no :| bueno gracias y perdon y fue larga pero no encontre una forma más corta para darme a entender lo hice lo mas corto posible. Título: Re: Confundiendo IAT, IT y la localizacion? Publicado por: Eternal Idol en 27 Marzo 2012, 11:06 am !dh modulo en WinDbg.
Ejemplo: 0:000> !dh kernel32 File Type: DLL FILE HEADER VALUES 14C machine (i386) 4 number of sections 4E211318 time date stamp Sat Jul 16 06:27:04 2011 0 file pointer to symbol table 0 number of symbols E0 size of optional header 2102 characteristics Executable 32 bit word machine DLL OPTIONAL HEADER VALUES 10B magic # 9.00 linker version D0000 size of code 30000 size of initialized data 0 size of uninitialized data 132A3 address of entry point 10000 base of code ----- new ----- 75000000 image base 10000 section alignment 10000 file alignment 3 subsystem (Windows CUI) 6.01 operating system version 6.01 image version 6.01 subsystem version 110000 size of image 10000 size of headers 1164FD checksum 00040000 size of stack reserve 00001000 size of stack commit 00100000 size of heap reserve 00001000 size of heap commit 140 DLL characteristics Dynamic base NX compatible BF9F8 [ A8FF] address [size] of Export Directory CA2F8 [ 1F4] address [size] of Import Directory F0000 [ 528] address [size] of Resource Directory 0 [ 0] address [size] of Exception Directory 0 [ 0] address [size] of Security Directory 100000 [ AD58] address [size] of Base Relocation Directory D0108 [ 38] address [size] of Debug Directory 0 [ 0] address [size] of Description Directory 0 [ 0] address [size] of Special Directory 0 [ 0] address [size] of Thread Storage Directory 830F8 [ 40] address [size] of Load Configuration Directory 0 [ 0] address [size] of Bound Import Directory 10000 [ DF0] address [size] of Import Address Table Directory 0 [ 0] address [size] of Delay Import Directory 0 [ 0] address [size] of COR20 Header Directory 0 [ 0] address [size] of Reserved Directory dps kernel32+10000 Título: Re: Confundiendo IAT, IT y la localizacion? Publicado por: x64core en 27 Marzo 2012, 11:57 am jeje ;-)
que buena informacion la que me mostro. Eternal porque no puedo cargar el exe? primero intente con el notepad... carge el notepad luego !dh notepad.exe y me mostro la informacion, luego intente cargar mi exe de MASM y no me mostraba ni errores ni nada simplemente no mostraba nada :| PD. tambie no entiendo porque MASM genera un "pre"-JMP pudiendo hacer el call a la IAT directamente :P comparando el compilador de VC con MASM no se porque lo hace :P Título: Re: Confundiendo IAT, IT y la localizacion? Publicado por: Eternal Idol en 27 Marzo 2012, 12:08 pm Usa lm para enumerar los modulos y fijate cual es el de tu programa ...
Título: Re: Confundiendo IAT, IT y la localizacion? Publicado por: Иōҳ en 27 Marzo 2012, 16:33 pm <http://ricardonarvaja.info/WEB/CURSO NUEVO/TEORIAS NUMERADAS/201-300>
254-IMPORT TABLES A MANO (parte 2).rar 253-IMPORT TABLES A MANO (parte 1).rar 256-IMPORT TABLES A MANO (parte 4).rar 255-IMPORT TABLES A MANO (parte 3).rar Saludos, Nox. Título: Re: Confundiendo IAT, IT y la localizacion? Publicado por: Arkangel_0x7C5 en 28 Marzo 2012, 02:33 am jeje ;-) que buena informacion la que me mostro. Eternal porque no puedo cargar el exe? primero intente con el notepad... carge el notepad luego !dh notepad.exe y me mostro la informacion, luego intente cargar mi exe de MASM y no me mostraba ni errores ni nada simplemente no mostraba nada :| PD. tambie no entiendo porque MASM genera un "pre"-JMP pudiendo hacer el call a la IAT directamente :P comparando el compilador de VC con MASM no se porque lo hace :P Lo del jmp puede ser para las reubicaciones, que a la hora de reubicar, no es lo mismo hacerlo en un jmp que en 20 call Saludos Título: Re: Confundiendo IAT, IT y la localizacion? Publicado por: MCKSys Argentina en 30 Marzo 2012, 22:15 pm La IT y la IAT en principio son la misma tabla (en realidad, arrays). El tema es que cuando el loader carga el EXE, cambia los valores de una para que macheen con las direcciones donde estan realmente cargadas las funciones importadas (por el tema de las relocaciones de las DLLs). Por eso ves JMPs a la tabla de saltos.
Para ver el tema a fondo, te recomiendo los PE tutorials de Iczelion, en especial el de Import Table: http://win32assembly.online.fr/pe-tut6.html Saludos! PD: tambien esta el tema de Bound Import, pero el tute lo explica mejor que yo... :) |