RE-Dll-export-table

本文最后更新于:2023年6月19日 晚上

#

首先查看 EXPORT Table 的 RVA 是 0x00092250
image.png
通过 winhex 验证
image.png正确
由于 0x92250 在 rdata 节中,所以
image.png
首个 IMAGE_EXPORT_DESCRIPTOR 结构的 RAW=0x92250-0x80000+0x65000=0x77250
通过 winhex 跳转到这里
image.png
1.Name 成员解析
  首先解析导出表重要的成员
Nmae: 在导出表一行位置处. 存储 0x096116,这是一个 RVA,所以我们要进行 RAW 转换.
0x96116-0x80000+0x65000=0x7b116
image.png跳转过来,可见这个成员保存的就是自己 DLL 的名称.
2.Base 成员解析.   导出函数起始序号
  导出函数的序号起始位置. 你 DLL 导出的函数.如果给序号了.那么就从这个序号开始. 
3.NumberOfFunctions  以及  NumberOfNmaes   函数导出总个数.以及函数以名字导出的个数
这个两个成员很简单. 一个就是所有函数导出的个数.一个就是以名字进行导出的个数.  DLL 是可以以序号导出的.
image.png可以看出来都为 643 个
4.函数地址表
image.png
这里同样存的都是 RVA,需要经过计算得到 RAW
函数地址表 RAW == 0x77278
函数名称表 RAW == 0x78b84
函数序号表 RAW == 0x7a490
根据 ppt 知道,函数地址表指向一个偏移. 这个偏移存放了函数所有导出个数的函数的地址.
image.png
例如所有导出函数有 2 个. 那么函数地址表中就有 2 项. 每一个占 4 个字节. 存放的是函数入口地址 RVA.
例如第一项 RVA 偏移为 0x0162A0 + ImageBase 就是函数地址.
image.png
然后查看 getcurrentThreadId
image.png
它是第 21f 个函数,计算偏移后的地址为 542*4+0x77278=0x77af0
winhex 跳过去看
image.png
里面存放着函数的 RVA 偏移为 0x011a60,和 peview 中一致
若计算具体的函数地址,则为 0x011a60+0x6b800000=0x6b811a60
通过 IDA 进行查看,同样验证结果
image.png
动态加载
右键
image.png
image.png
image.png

参考资料

用到的工具


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!