WEB开发网
开发学院网络安全黑客技术 PE文件格式(2) 阅读

PE文件格式(2)

 2007-01-14 20:15:04 来源:WEB开发网   
核心提示: 如果想从DLL"knurr"查找输入函数"foo"的信息,首先数据目录内找到IMAGE_DIRECTORY_ENTRY_IMPORT项,得到RVA,在rawsectiondata找到那个地址,PE文件格式(2)(10),现在我们有了一个数组IMAGE

如果想从DLL"knurr"查找输入函数"foo"的信息,首先数据目录内找到IMAGE_DIRECTORY_ENTRY_IMPORT项,得到RVA,在rawsectiondata找到那个地址,现在我们有了一个数组IMAGE_IMPORT_DESCRIPTORs.通过检查由NAME指向的的字符串,得到与DLL"knurr"有关的数组成员。当你发现了正确的IMAGE_IMPORT_DESCRIPTOR,沿着它的OriginalFirstThunk得到一个指针指向一个IMAGE_THUNK_DATAs数组;检查每个RVAs找到"foo".

为什么有两个指针列表指向IMAGE_IMPORT_BY_NAMEs?因为运行时,程序不需要输入函数名,需要的是地址,这里是地址表再次出现的地方,加载器在每个涉及的DLL输出目录内查找输入符号,使用DLL入口点的线性地址替换掉FirstThunk列表内的IMAGE_THUNK_DATA元素。记住带有标号"__imp__symbol的地址列表、被数据目录项

IMAGE_DIRECTORY_ENTRY_IAT指向的输入地址表,也确切地被'FirstThunk'指向.(假如输入来自几个不同的DLL,输入地址表由所有DLL的'FirstThunk'数组构成,目录项IMAGE_DIRECTORY_ENTRY_IAT可能丢失,输入依然工作的很好。'OriginalFirstThunk'数组保持不变,可以通过它查找输入名的的原始列表。

现在输入已经用正确线性地址打了补丁,如下所示:

  OriginalFirstThunk   FirstThunk
      |          |
      |          |
      |          |
      V          V
      0-->  func1    0--> exportedfunc1
      1-->  func2    1--> exportedfunc2
      2-->  func3    2--> exportedfunc3
      3-->  foo     3--> exportedfoo
      4-->  mumpitz   4--> exportedmumpitz
      5-->  knuff    5--> exportedknuff
      6-->0      0<--6

这是最简单情况的基本结构,下面学习输入目录。

上一页  5 6 7 8 9 10 

Tags:PE 文件 格式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接