PE文件内容被分割为不同的区段(Section),每一区段中可能包含代码或数据。
.text 是在编译或汇编结束时产生的一种块,它的内容全是指令代码;
.rdata 是运行期只读数据;
.data 是初始化的数据块;
.idata 包含其它外来DLL的函数及数据信息,即导入表;
.rsrc 包含模块的全部资源,如图标、菜单、位图、对话框等。
#使用区段名只是方便人们使用,而对操作系统来说是无关紧要的,因此可将上面区段名任意更改而不会影响PE文件执行
输入表/导入表 import
地址为0x2A000
跟进找到原始地址0x28000
在010editor中找到相应
根据RVA算出偏移地址
RVA 0x2a15c - 0x2a000 = 0x15c
Raw 0x28000 + 0x15c = 0x2815c
RVA0x02a2dc
Raw0x282dc
定位到函数名称位置
再找FirstThunk:偏移为 Raw 地址的 +0x10
RVA0x02a2ac
RAW0x28000 + 0x2ac = 0x282ac
0x02a2dc 与前面的 RVA对应
导出表 export
找到export导出表rva地址 0x18f90
跟进对应相应的原始地址 0x5800
计算RVA起始地址 和 偏移量 0x17000 0x1f90(0x18f90-0x17000)
根据计算出的地址找到导出表的目录 0x5800 + 0x1f90 = 0x7790
可以根据下面的索引找到对应的项和值
name: 18fcc
base: 1
NumberOfFunctions: 2
NumberOfNames: 2
AddressOfFunctions: 18fb8
AddressOfNames: 18fc0
AddressOfNameOrdinals: 18fc8
AddressOfNameOrdinals - export rva (偏移量)
0x18fc8 - 0x18f90 =0x38
0x7790 + 0x38 = 0x77c8 为第一项的定位
00 + base = 1 ,再计算到 AddressOfFunctions 的偏移为 0x10
add的地址为 11253
往下顺位为 subtract 的导向
subtract 的地址为11082
验证结果
知识星球
原文始发于微信公众号(CatalyzeSec):PE结构(小甲鱼)学习笔记
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论