Kernel32.dll 文件的导出表的分析

Kernel32.dll 文件的导出表的分析

一.实验目的

使用PEviews与OllyDbg分析Kernel32.dll。

二.实验原理准备

(1)PE/ELF文件格式

	1、PE/ELF都是可执行文件格式。(被装载器和链接器使用的可执行文件的规
	范格式,可执行,文件时二进制分析的输入。)
	2、典型代表:
	     Unix/Linux下:Executable and Linkable Format(ELF)格式。
	     Windows下,Portable Executable(PE)格式。

(2)动态链接库(DLL)

	(1)DLL的定义:动态链接库在程序外,是程序能够随时调用的程序库文件。
	多个进程可以同时共享一个DLL文件。
	(2)装载方式:显式链接与隐式链接。

(3)导入地址表(IAT:Import Address Table)

	1、PE文件使用的代码由其他DLL提供时,就需要装载这个DLL。而导入地址表,
	就是记录程序正在使用的DLL库中的函数实际地址。
	2、位置:NT头 --> IMAGE_OPTIONAL_HEADER --> DataDirectory[1]
	  --> IMAGE_IMPORT_DESCRIPTOR --> FirstThunk --> IAT

(4)映射原则

	1、RVA(Relative Virtual Address):进程空间中相对基地址的偏移
	2、RAW:外存中数据相对于文件头的偏移量
	3、RAW - RAW(section) = RVA - RAV(section)
三.实验步骤

step1: 查看 IMPORT Table 的 RVA
在这里插入图片描述
可以看到,IMAGE_IMPORT_DESCRIPTOR 数组的起始 RVA为:9FC98。

step2:查看RVA(section.rdata)与RAW(section.rdata)
在这里插入图片描述
其RVA(section.rdata) = 80000,RAW(section.rdata) = 65000。
首个IMAGE_IMPORT_DESCRIPTOR 结构的 RAW 为:
RAW = 9FC98 - 80000 + 65000 = 84C98。

step3:观察 IMPORT_Directory_Table 的 84C98 位置。
在这里插入图片描述
step4:可以看到,DLL 名称字符串 " api-ms-win-core-rtlsupport-1-2-0.dll " 的 Name RVA 为A18E8。其所在的 RAW = A18E8 - 80000 + 65000 = 868E8。
在这里插入图片描述
在这里插入图片描述
step5:我们再来观察一下 " api-ms-win-core-rtlsupport-1-2-0.dll " 的Import Name Table RVA = A0FE0在这里插入图片描述
所以,INT 结构数组的起始 RAW = A0FE0 - 80000 + 65000 = 85FE0。

在这里插入图片描述
故第一个 IMAGE_IMPORT_BY_NAME 结构的 RAW = A18AC -80000 +65000 = 868AC。
在这里插入图片描述
易见,从" api-ms-win-core-rtlsupport-1-2-0.dll " 导入的第一个函数 RtlCaptureStackBackTrace 在 api-ms-win-core-rtlsupport-1-2-0.dll 得到处地址表中的序号为 0001。

step6:让我们看一下, api-ms-win-core-rtlsupport-1-2-0.dll 的 IAT RVA 的值= 816D4。
在这里插入图片描述
则 IAT 结构数组起始 RAW = 816D4 - 80000 + 65000 = 666D4。
在这里插入图片描述
IAT 数组的第一个元素为 A18AC,当装载到内存时,我们使用 Olldbg 看一下:
在这里插入图片描述
可以发现,其值发生了改变。说明当被装载器装载到内存时,原来的地址会发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值