免责声明: 文章仅用于技术分享,切勿非法测试,由于传播、利用本公众号朱厌安全团队所提供的信息而造成的后果以及损失,均由使用者本人承担,本公众号朱厌安全团队以及作者不为此承担任何责任!如有侵权烦请告知,我们会立即删除并致歉!
PE文件结构(Portable Executable)
0x01 什么是PE文件结构?
使链接生成的EXE文件能在不同的CPU工作指令下工作,比如COM,PIF,SCR,EXE等,这些文件的格式大部分都继承自PE。其中,EXE是最常见的PE文件,动态链接库(也就是大部分以DLL扩展名的文件)也是PE文件。说了这么多其实PE文件就是一种在磁盘上的文件中组织可执行代码的方法,这样Windows 操作系统组件Loader就可以从磁盘上读取它,并将其作为一个进程加载到内存中执行。
接下来咱们就看看PE文件的结构图,确实对于任何人来说这张图片里的内容,都给人一种劝退的感觉,不过咱们目前只需要掌握我们能用到的内容,后面如果用的到的话,咱们就继续在说。
看到这么复杂的结构图先不要气馁,咱们先把上述这结构抽象成一本书,
其中 data部分包含书中的内容,metadata部分包含了一些书的信息例如标题,作者姓名,出版商,日期等等。
这样我们就可以类比PE的文件结构,其中Header就相当于中上述的metadata部分,他包含了DOS头,PE头,OPTIONAL头,数据目录,节表,
Sections部分其实就是上述的data部分,它包含了PE文件的主要内容,比如可行的代码,加载的一些库文件,被可执行代码的访问的一些变量。接下来咱们就重点关注咱们的Section部分,因为这个部分与我们后面存放的Shellcode息息相关。
0x02 PE SECTIONS
为了更方便看清我们PE文件的结构,这里我就直接使用了PE-Bear详细去看一下这个sections部分
这里我们可以非常直观的看到section header出现的一些细节,下面就通俗易懂的解释一下这些节主要存放的是什么。
-
.text 这个节包含了可执行的代码.
-
.rdata 这个节主要是保存常量数据的节,对应C语言中的常数和常量字符串
-
.data 保存数据的节。这个对应C语言中已初始化的全局变量的数据
-
.pdata 保存的是函数表,它主要用于异常处理,特别是在程序执行期间发生异常时,这些函数表可用于定位和处理异常
-
.rsrc 保存的是应用程序的资源数据,这些资源包括图标、位图、字符串、菜单、对话框、版本信息等等。
-
.reloc 存储着可执行文件的重定位信息,用于在程序装载时将程序加载到内存的指定位置,以便程序能够正确地执行
从开发恶意软件的角度,我们接下来去重点关注 .text,.data和. rsrc这三个节。
原文始发于微信公众号(朱厌安全团队):恶意软件开发(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论