C/C++ 您当前所在位置:首页 > C/C++ > 导出表的结构分析

导出表的结构分析

陈成 陈成 2020-08-11 20:43:43 C/C++ 120人已围观

简介 学PE结构,这个导出表很重要结构之一,也是相比之前解析PE的时候要难一些。为什么要难一些,因为这个表结构比较复杂,我们不但要解析它,还要对它做操作,做完操作还要能正常使用才行。

简单说明

我们要知道一个EXE文件是PE文件,一个DLL也是PE文件,一个程序运行可能会使用很多的DLL,也就是会使用DLL里面的函数,但对EXE来说它不知道DLL里面有多少函数,有哪些函数,这种情况要怎么办?所以这个时候DLL文件会提供一份清单,这份清单里面就记录了我这个DLL文件里有些什么函数,函数名叫什么,函数地址是什么,而导出表,就相当于这份清单。也就是说,想要提供函数给别的程序用,就要有这份清单。一般情况下,exe是没有这份清单的,注意这里是一般情况,并不是100%。

定位导出表

可选PE头里面最后一个属性是一个数组,保存了16个数据目录结构,每一个结构都指向了一个地方,有各自的用途,而数组里面的第一个对应的就是导出表在哪里,是导出表在哪里,它不是导出表。这个结构有两个属性,一个是VirtualAddress,一个是size。size没什么用,修改了还是一样运行,而这个VirtualAddress则是一个RVA(相对虚拟地址),指向了真正的导出表在哪里。如果要定位文件中导出表在哪里,则一定要将这个RVA转FOA。

导出表结构解析

通过RVA转FOA后指向的地方就是一个_IMAGE_EXPORT_DIRECTORY结构

typedef struct _IMAGE_EXPORT_DIRECTORY {

    DWORD   Characteristics;                //未使用

    DWORD   TimeDateStamp;             //时间戳

    WORD    MajorVersion;                   //未使用

    WORD    MinorVersion;                  //未使用

    DWORD   Name;                             //该导出表文件名字符串

    DWORD   Base;                               //导出函数的起始序号

    DWORD   NumberOfFunctions;     //所有导出函数的个数 

    DWORD   NumberOfNames;         //以函数名字导出的函数个数

    DWORD   AddressOfFunctions;     // RVA,导出函数地址表

    DWORD   AddressOfNames;         // RVA,导出函数名称表

    DWORD   AddressOfNameOrdinals;  // RVA,导出函数序号表

} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

上面标红的属性是要记住的,其他4个基本可以不用管,下面对红色属性解释。

AddressOfFunctions属性:这个属性的值又是一个RVA,它指向了一个表,叫导出函数地址表,它保存这个DLL或EXE提供的所有函数的地址,宽度为4字节。

NumberOfFunctions属性:所有导出函数的个数,这个值并不一定准确,因为根据序号导出的时候,它的计算方式是最大序号减去最小序号再加1后就是这个属性的结果。

AddressOfNames属性:这个属性也指向一张表,存的值也是RVA,这张表宽度为4字节,而这张表的值指向的地方才是函数的名字。

NumberOfNames属性:根据函数名称导出的函数的个数

AddressOfNameOrdinals属性:这个属性指向了一张表,指向的这张表宽度为2字节。

Base属性:Base就是导出的时候最小的导出序号,也就是说导出序号表里的值加上Base就等于导出的时候的那个导出序号。

根据函数名字查找

在AddressOfNames表里遍历,将值转为FOA后与函数名字比较,找到后根据下标去AddressOfNameOrdinals表中根据对应的下标取值,取到序号表对应的值后再将这个值当成AddressOfFunctions的下标,值就是这个函数的地址。

根据序号查找

根据序号找要简单一些,直接拿序号减去Base的值,得到结果,去函数地址表直接拿这个结果当下标就是这个序号的地址。

上一篇: 关闭网站响应头中PHP版本信息

下一篇: 没有了

文章评论

发送

站点信息

  • 上线时间:2020年05月30日
  • 网站程序:自建框架
  • 博客模板:今夕何夕
  • 文章统计43篇文章
  • 评论统计0条评论
  • 留言统计0条留言
  • 统计数据:百度统计