当前位置:网站首页>逆向调试入门-PE结构-输入表输出表05/07

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

2022-07-01 12:42:00 51CTO


输入表


输入函数,表示被程序调用但是它的代码不在程序代码中的,而在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;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.


      
      
typedef struct _IMAGE_THUNK_DATA32 {
union {
DWORD ForwarderString;
DWORD Function;
DWORD Ordinal;
DWORD AddressOfData;
} u1;
} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.


逆向调试入门-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


导出表的结构较为简单。

原网站

版权声明
本文为[51CTO]所创,转载请带上原文链接,感谢
https://blog.51cto.com/apple0/5433088