RE-Dll-export-table
本文最后更新于:2023年6月19日 晚上
#
首先查看 EXPORT Table 的 RVA 是 0x00092250
通过 winhex 验证正确
由于 0x92250 在 rdata 节中,所以
首个 IMAGE_EXPORT_DESCRIPTOR 结构的 RAW=0x92250-0x80000+0x65000=0x77250
通过 winhex 跳转到这里
1.Name 成员解析
首先解析导出表重要的成员
Nmae: 在导出表一行位置处. 存储 0x096116,这是一个 RVA,所以我们要进行 RAW 转换.
0x96116-0x80000+0x65000=0x7b116跳转过来,可见这个成员保存的就是自己 DLL 的名称.
2.Base 成员解析. 导出函数起始序号
导出函数的序号起始位置. 你 DLL 导出的函数.如果给序号了.那么就从这个序号开始.
3.NumberOfFunctions 以及 NumberOfNmaes 函数导出总个数.以及函数以名字导出的个数
这个两个成员很简单. 一个就是所有函数导出的个数.一个就是以名字进行导出的个数. DLL 是可以以序号导出的.可以看出来都为 643 个
4.函数地址表
这里同样存的都是 RVA,需要经过计算得到 RAW
函数地址表 RAW == 0x77278
函数名称表 RAW == 0x78b84
函数序号表 RAW == 0x7a490
根据 ppt 知道,函数地址表指向一个偏移. 这个偏移存放了函数所有导出个数的函数的地址.
例如所有导出函数有 2 个. 那么函数地址表中就有 2 项. 每一个占 4 个字节. 存放的是函数入口地址 RVA.
例如第一项 RVA 偏移为 0x0162A0 + ImageBase 就是函数地址.
然后查看 getcurrentThreadId
它是第 21f 个函数,计算偏移后的地址为 542*4+0x77278=0x77af0
winhex 跳过去看
里面存放着函数的 RVA 偏移为 0x011a60,和 peview 中一致
若计算具体的函数地址,则为 0x011a60+0x6b800000=0x6b811a60
通过 IDA 进行查看,同样验证结果
动态加载
右键
参考资料
- PE 知识复习之 PE 的导出表
- 【逆向】PE 结构分析和关于 PE 的一些问题及解决 https://www.shangmayuan.com/a/3289bd534203495c996382ae.html
- EAT 表 https://www.shuzhiduo.com/A/x9J2YK1gz6/
- 【逆向】【PE 入门】使用 PEView 分析 PE 文件 https://blog.csdn.net/qq_43633973/article/details/102378477
- 《逆向学习日记》 No.1 手动计算 RvaToRaw 来查看函数导入表与导出表 https://www.dazhuanlan.com/2020/01/02/5e0dc9725d3e9/
- 基址重定位表 https://blog.csdn.net/SKI_12/article/details/80636568 https://zhuanlan.kanxue.com/article-10619.htm
- PE 结构体中导出表/导入表解析——初阶 - 看雪学院的文章 - 知乎 https://zhuanlan.zhihu.com/p/33348352
用到的工具
- pe_tree https://github.com/blackberry/pe_tree
- winhex
- peview
- IDA PRO
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!