0
点赞
收藏
分享

微信扫一扫

逆向调试入门-PE结构-输入表输出表05/07


输入表


输入函数,表示被程序调用但是它的代码不在程序代码中的,而在dll中的函数。对于这些函数,磁盘上的可执行文件只是保留相关的函数信息,如函数名,dll文件名等。在程序运行前,程序是没有保存这些函数在内存中的地址。当程序运行起来时,windows加载器会把相关的dll装入内存,并且将输入函数的指令与函数真在内存中正的地址联系起来。输入表(导入表)就是用来保存这些函数的信息的。


结构体


typedef struct _IMAGE_IMPORT_DESCRIPTOR {
_ANONYMOUS_UNION union { //00h
DWORD Characteristics;
DWORD OriginalFirstThunk;
} DUMMYUNIONNAME;
DWORD TimeDateStamp; //04h
DWORD ForwarderChain; //08h
DWORD Name; //0Ch
DWORD FirstThunk; //10h
} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;


typedef struct _IMAGE_THUNK_DATA32 {
union {
DWORD ForwarderString;
DWORD Function;
DWORD Ordinal;
DWORD AddressOfData;
} u1;
} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;


逆向调试入门-PE结构-输入表输出表05/07_PE输出表


两个结构体的作用是一样的,都是为了方便寻找DLL的函数。


逆向调试入门-PE结构-输入表输出表05/07_PE输入表_02


IMT是文件在磁盘中的指向的位置

IAT是文件加载进内存后指向的位置


我们使用Stud_PE进行查看


逆向调试入门-PE结构-输入表输出表05/07_PE输入表_03


程序hello的作用紧紧是弹出一个对话框

由此我们判断使用了MessagesBox


逆向调试入门-PE结构-输入表输出表05/07_PE输出表_04


使用该工具打开程序副本


逆向调试入门-PE结构-输入表输出表05/07_PE输出表_05


在文件头部,可以查看出来了输入表的信息


逆向调试入门-PE结构-输入表输出表05/07_PE结构_06


我们打开“在16进制位编辑器中视图文件头树”


逆向调试入门-PE结构-输入表输出表05/07_PE结构_07


我们查看数据的目录


逆向调试入门-PE结构-输入表输出表05/07_PE结构_08


可以看到文件中的输入表位置


有两个数组,两个函数,因为是8个字节


逆向调试入门-PE结构-输入表输出表05/07_PE结构_09


在282acH中


下面我们使用OD进行实例分析


逆向调试入门-PE结构-输入表输出表05/07_PE结构_10


我们准备一个hello文件


逆向调试入门-PE结构-输入表输出表05/07_PE结构_11


该程序的功能只是弹出一个对话框。


逆向调试入门-PE结构-输入表输出表05/07_PE输出表_12


我们使用OD软件调试程序


逆向调试入门-PE结构-输入表输出表05/07_PE输出表_13


在call函数中发现问题


逆向调试入门-PE结构-输入表输出表05/07_PE输入表_14


发现了MessageBoxA


F7进入


逆向调试入门-PE结构-输入表输出表05/07_PE结构_15


在高地址位发现messageBoxtimeoutA


逆向调试入门-PE结构-输入表输出表05/07_PE输出表_16


那就可以知道,前面的一段都是这个函数的内容了。


导出表



逆向调试入门-PE结构-输入表输出表05/07_PE结构_17


导出表的结构较为简单。

举报

相关推荐

0 条评论