qq空间相册查看器_Windows 网络编程:PE查看器

本文介绍了如何编写一个简单的PE查看器,主要涉及打开文件、创建内存映射、判断PE文件、解析节表等步骤。通过CreateFileMapping()和MapViewOfFile()函数实现内存映射,然后检查文件是否为有效的PE格式,并枚举节表。提供了相关代码片段展示实现过程。
摘要由CSDN通过智能技术生成

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587


df9cdbe9114c8054e22255deb302bc40.png

微信公众号:计算机与网络安全

ID:Computer-network

写PE查看器并不是件复杂的事情,只要按照PE结构一步一步地解析就可以了。下面简单地解析其中几个字段内容,显示一下节表的信息。写的PE查看器如图1所示。

fe1d556c3d429bd1606155286339d10b.png

图1  PE查看器解析记事本程序

PE查看器的界面就按照如图1所示的那样来设置,不过这个可以按照个人的偏好进行设置。编写该PE查看器的步骤为打开文件并创建文件内存映像,判断文件是否为PE文件并获得PE格式相关结构体的指针,解析基本的PE字段,枚举节表,最后关闭文件。我们需要在类中添加几个成员变量及成员函数,添加的内容如图2所示。

31375d2697fcce4b9beeb0d7e68a01b4.png

图2  在类中添加的成员变量及成员函数

按照前面所说的顺序,依次实现添加的各个成员函数。

72a59604713fb47bace5afa26a601348.png

这个函数的主要功能是打开文件并创建内存文件映像。通常对文件进行连续读写时直接使用ReadFile()和WriteFile()两个函数,当不连续操作文件时,每次在ReadFile()或者WriteFile()后就要使用SetFilePointer()来调整文件指针的位置,这样的操作较为繁琐。内存文件映像的作用是把整个文件映射入进程的虚拟空间中,这样操作文件就像操作内存变量或数据一样的方便。

创建内存文件映像所使用的函数有两个,分别是CreateFileMapping()和MapViewOfFile()。下面分别介绍这两个函数,CreateFileMapping()函数的定义如下:

65db3d9ba41aa44c2b1200dae985cfc2.png

参数说明如下。

(1)hFile:该参数是CreateFile()函数返回的句柄。

(2)lpAttributes:是安全属性,该值通常是NULL。

(3)flProtect:创建文件映射后的属性,通常设置为可读可写PAGE_READWRITE,如果需要按照装载可执行文件那样把文件映射入内存的话,那么需要使用SEC_IMAGE;

最后3个参数在这里为0。如果创建的映射需要在多进程中共享数据的话,那么最后一个参数设定为一个字符串,以便通过该名称找到该块共享内存。

该函数的返回值为一个内存映射的句柄。

432d6970920924881b9165c4705aa4c5.png

参数说明如下。

(1)hFileMappingObject:该参数为CreateFileMapping()返回的句柄。

(2)dwDesiredAccess:想获得的访问权限,通常情况下也是可读可写FILE_MAP_READ、FILE_MAP_WRITE。

最后3个参数一般给0值就可以了。

按照编程的规矩,打开要关闭,申请要释放。那么对于CreateFileMapping()的关闭需要使用CloseHandle()函数,对于MapViewOfFile()来说,要使用UnmapViewOfFile,该函数的定义如下:

50c8a078d7bb599f76cac9749e1170e6.png

该函数的参数就是MapViewOfFile()函数的返回值。

接着说PE查看器,文件已经打开,那么就要判断文件是否为有效的PE文件了,如果是有效的PE文件,那么就把解析PE格式的相关结构体的指针也得到。代码如下:

182c532d1a398cd9857eb4ae81493d46.png

这段代码应该非常容易理解,继续看解析PE格式的部分吧。

afb0d15824d74171bf2419de5343de0b.png

对于PE格式的基础信息来说,就是简单地获取结构体的成员变量,没有过多复杂的内容。获取导入表、导出表就要比获取基础信息要复杂了。接下来进行节表的枚举,代码如下:

39ccd548193cc6d707f1c51ea49f09a4.png

最后的动作就是释放动作了,因为很简单,这里就不给出代码了。整个PE查看器就算是写完了。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值