如何查看EXE或DLL文件的导入函数及导入DLL
来源:互联网 发布:男生双肩背包知乎 编辑:程序博客网 时间:2024/06/09 22:15
关于PE头的分析,写得好的要数Matt Pietrek的文章了。我今天写的主题就是学习这篇文章的一点体会,希望对大家在分析PE文件有所帮助,同时加深自己对PE头的理解。
PE头的总体结构如下:
图1、PE头总体结构
在各个字段前面的数字代表在此结构体内的相对位移。
好了,下面让我们来看看具体分析过程:
1、用UltraEdit打开一个EXE文件(DLL文件也一样,只不过是起始地址不一样而已)。
2、找到如图一所示的字段“Signature”,对于PE文件,它的值是"PE",如图二.
图二、 一个EXE文件前面的字节情况
3、从"PE"这个字符所在位置往下数120个字节。在图二中"PE"所在位置是d0h + 8;然后往下数120个字节就是图三了。
图三:IMAGE_IMPORT_DESCRIPTOR的RVA
我们由上图得到 IMAGE_IMPORT_DESCRIPTOR 的RVA = 0x0003c000(Intel是Little Endian.即从后向前读)
IMAGE_IMPORT_DESCRIPTOR 结构体描述如下:
4、打开windbg。噢,还没有,那赶快一下个吧.点这里下载。具体使用自己学吧,我也只会一点。
5、打开windgb.FILE->Open Executalbe(或Ctrl+E),选择我们刚才用UE分析的那个EXE文件。
6、View->Memory(或Alt+5),输入刚才那个地址,但要加上应用程序被加载的地址。(一般WIN32下面的应用程序的Base Address 是0x400000。所以最后输入的地址是:0x0043c000.如图四。然后我们根据上面关于IMAGE_IMPORT_DESCRIPTOR 的结构体说明可知,Characteristics = 0x3c028,FirstThunk = 0x3c2a0。
图四:得到IMAGE_IMPORT_DESCRIPTOR结构体内的每一个成员的RVA
7、一步一步靠近。。。。。
8、因为第一项(前4个字节)是结构体内有关导入函数名的RVA = 0x0003c028
9、我们再一次在那个"Virtual"后的那Edit栏内输入0x0043c028(不知怎么来的,晕)
10、那我们就会看到如下的情况,图五。
图五:函数导入的RVA = 0x0003c4a2
11、最后一在Virtual后的那个Edit栏内输入0x043c4a2.会看到最后的美景。
注:
RVA:Relative virtual Address(相对地址)Virtual不译了。
有点估计大家有所不明白,就是第3步中,为什么就偏移120个字节,而不是其他的。关于这个数字是这样算出来的。首先,4 + 20 + 96,这些是 IMAGE_DATA_DIRECTORY 这个类型数组前的偏移字节数,而再加8字节,是因为DataDirectory数组第一项是Export Symbols的RVA,第二项才是 Import Symbols,而数组的每一项是8字节,由此而来。
edit by ytfrdfiw 03-25-08 :
上面的那段关于Export symbols的解释可能不是太清楚,应该这样说: 这个数组名为 DataDirectory 的数组目前是16个类型为IMAGE_DATA_DIRECTORY 的元素,但第索引为1的元素(即DataDirectory[1]的元素)是我们要函数Import symbols,这些元素的函数为什么是这样,估计要问MS了。。所有各项为:
IMAGE_DIRECTORY_ENTRY_EXPORT (0)输出符号目录用于DLL
IMAGE_DIRECTORY_ENTRY_IMPORT (1)输入符号目录
IMAGE_DIRECTORY_ENTRY_RESOURCE (2)资源目录
IMAGE_DIRECTORY_ENTRY_EXCEPTION (3)异常目录
IMAGE_DIRECTORY_ENTRY_SECURITY (4)安全目录
IMAGE_DIRECTORY_ENTRY_BASERELOC (5)重定位表
IMAGE_DIRECTORY_ENTRY_DEBUG (6)调试目录
IMAGE_DIRECTORY_ENTRY_COPYRIGHT (7)描述版权串
IMAGE_DIRECTORY_ENTRY_GLOBALPTR (8)机器值
IMAGE_DIRECTORY_ENTRY_TLS (9)Thread local storage目录
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG (10)Load configuration 目录
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (11)Bound import directory目录
IMAGE_DIRECTORY_ENTRY_IAT (12)Import Address Table输入地址表目录
参考文章:
PE文件格式,qduwg翻译 看雪学院整理
Matt Pietrek,March 1994,Peering inside the PE: A tour of the Win32 Portable Executable File Format
然希望对你有所帮助,也希望你能提出意见,谢谢!
- 如何查看EXE或DLL文件的导入函数及导入DLL
- 如何查看exe或dll的依赖库dll
- dll文件导出导入函数
- 如何查看exe或dll调用了什么dll
- dll导入和导出变量或函数
- .Dll,.exe文件查看
- 如何生成DLL文件并导出函数及如何在C++或C#中调用DLL中导出的函数
- 如何看DLL文件里需要那些导入函数和dll等,导出了什么
- VS2010设置目标文件(.dll/.exe)和导入库文件(.lib)的输出路径
- 导入vc的dll
- 使用vs自带的dumpbin工具来查看dll、lib、或EXE文件
- 如何查看DLL文件的导出函数声明
- 如何查看dll文件
- depend查看DLL/exe函数名工具(说明及注意事项) .
- 应用程序调用dll组件,及dll组件之间的关系,dll中类及函数的导入导出;dll的导出方式和链接方式分析(一)
- VS2010 导入应用程序 exe 调试 DLL
- 查看调用DLL的程序及Kill DLL文件
- 在VFP中如何调用VB编写的.DLL或.EXE文件
- WEB页面传值解决
- C之诡谲(转载自CSDN)
- 基于D3D的Ray Trace
- 学习笔记
- pku1781
- 如何查看EXE或DLL文件的导入函数及导入DLL
- IKE学习笔记(IKE第二阶段)
- 用myeclipse在struts中配置mysql和sqlserver的datasource
- 男孩重实用,女孩爱浪漫
- Java tostring()方法
- 致一位我暗恋很久的女生
- myEclipse开发过程中的一些问题
- 挫折?鞭策!
- ServletContext简述