• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > Windows PE 文件感染技术的研究

Windows PE 文件感染技术的研究

录入:edatop.com    点击:

  0.引言

  随着计算机和互联网技术的快速发展,计算机正走进社会的各个领域,走进千家万户,计算机系统已经能够实现生活、管理、办公的自动化,成为人类社会不可或缺的一部分。 然而,计算机系统并不安全,其不安的因素有计算机系统自身的、自然不可抗拒的,也有人为的。计算机病毒就是其中最不安全的因素之一。

  Windows PE 病毒是所有病毒中数量极多、破坏性极大、技巧性最强的一类病毒。 本文介绍了 PE 文件的结构,研究了各种 PE 文件的感染方式,并对 PE 文件的主要感染技术的实现方法进行了分析。

  1. Windows PE文件的格式

  目前主流的操作系统是 Windows 操作系统, 病毒要在 Windows操作系统上进行传播和破坏,其病毒文件也必须遵循 PE 文件的格式结构。目前流行的计算机病毒以蠕虫、木马等类型病毒为主,这一类的病毒文件也大都是 PE 格式的文件。

  1.1 PE 文件简介

  PE 是 Portable Executable 的所写,即可移植、可执行。 它是 Win32可执行文件的标准格式。 它的一些特性继承自 UNIX 的 Coff(Commonobject file format)文件格式。 Portable Executable 就意味着此文件是跨Win32 平台的,即使 Windows 运行在非 Intel 的 CPU 上, PE 装载器都能识别和使用该文件格式。 因而,研究学习 PE 文件格式,除了有助于了解病毒的传染原理之外, 还给我们提供了洞悉 Windows 结构的良机。

  1.2 PE 文件的结构

  PE 文件以一个简单的 DOS MZ header 开始。 有了它,一旦程序在DOS 下执行时,就能被 DOS 识别出这是否是有效的执行体。 紧随 MZHeader 之后的是 DOS Stub (DOS 插桩程序), 实际上就是一个在 DOS环境下简单调用 INT 21h 中断,并显示“This program can not be run in DOS mode” 或者 “This program must be run under Win32” 之类信息的小程序。 紧接着 DOS Stub 的是 PE Header,PE Header 是 PE 文件结构体IMAGE_NI_HEADERS(NT 映像头)的简称,它存放了 PE 整个文件信息分布的重要字段。紧接着 NT 映像头之后的是节表。 节表实际上是一个结构体数组,其中每个结构体包含了该节的具体信息(每个结构体占用 28H 个字节)。 该成员的数目由映像文件头(IMAGE_FILE_HEADER)结构体中NumberOfSection 域决定。在节表中第 2 项 VirtualSize 、 第 3 项 VirtualAddress、 第 4 项SizeOfRawData、第 5 项 PointerToRawData、第 10 项Characteristics 是病毒传染时经常利用的的。

  2. PE文件的主要感染技术

  2.1 后缀式感染

  后缀式感染是 DOS 以及 Windows 下文件型病毒最常用的感染方式,也是非常流行的一种感染方式。这种感染方式是比较简单的,只要把病毒体缀在宿主文件最后,再修改程序入口,进行对齐就行了。实际上这种方式的实现也是最简单易行的,却非常适合对病毒进行复杂的加密变形!后缀式感染技术有两种形式。 一种是在被感染文件中新加一个节,将病毒代码加入到这个节里面,然后修改入口点指向这个节,在病毒执行完成后再回到原来的入口点。这种方式的缺点是不一定总能成功,很可能没有地方加入一个新节。 另一种简单而有效的方式是把病毒体直接缀在最后一个节的后面, 然后再修改那个节的相关属性,并注意对 Image 和 File 的对齐就行了。

  2.2 捆绑式感染

  这种方式木马比较常用。 就是用病毒自身替代宿主文件,而把宿主作为数据存储在病毒体内。 这种方式有明显的不足,就是宿主增大太多,启动速度太慢。著名的病毒 Nimda 就是运用的捆绑式感染技术。捆绑式感染技术的实现主要问题在于如何将被感染文件 “捆绑”到病毒自身中。 一般说来有以下几种方式:

  2.2.1 附在病毒最后的空字节中。 由于 windows PE 装载器不会检查 PE 文件中没有表示出的数据,所以一般不会出错。 这种方式经常被木马用来保存配置信息。

  2.2.2 将被感染文件放到病毒的资源中。 这需要病毒自身在编译的时候加入备用的数据资源。

  2.3 伴侣式感染

  这种方式是 DOS 下的病毒和 Windows 下的木马的常用技术。 就是用病毒自身替代宿主,把宿主改个文件名,病毒启动后再启动宿主。这个和捆绑式感染技术有相似之处,不足之处也基本一样。 相较捆绑式感染, 其不足之处还在于病毒文件被复制到别的机器以后,就没有了宿主文件,无法执行正常功能了,这样就很容易被用户发现。所以这种方式比较适合感染安装在“Program Files”里的一般不会被拷贝的应用程序,而不是感染普通独立的可执行文件。

  2.4 散落式感染

  散落式感染就是把病毒体切成小块分散插入到宿主的空隙中,病毒执行时再把他们组合起来。 PE 文件由于结构关系,天生就有很多空隙,适合一个小病毒存在。 而 DOS 可执行文件则没有什么节的感念,也没有什么天然空隙,似乎看起来不可能插入。其实不然,由于编译器的缘故,文件里很可能有一些用于保存数据连续的 0,这些空间只在运行时才有用,和程序的初始化没关系。所以,病毒可以统计这些连续的 0。如发现这样的空间足够大,就可以把病毒块放在里面,运行时,将病毒块取出,然后重新把那块内存清零就可以了。这种感染方式还可以实现衍生。 例如,病毒可以不利用宿主已有的空隙,而是在宿主代码里硬生生的挖洞填入病毒代码。 这样的好处是可以把病毒分解成很小的碎片,这样就不容易被发现,而缺点是实现有些复杂,效果未必利用已有空隙好。 这种感染方式的明显不足之处就是宿主增大太多,启动速度太慢。

  2.5 DLL 链式感染

  DLL 链式感染是指用 DLL 编程技术将病毒编译为一个 DLL 文件,然后在宿主体内加以一个导入此 DLL 的 Import 项 这样在宿主启动时,系统会自动装载病毒。 这种方法的好处是明显的,就是宿主启动比较迅速,因为病毒和普通 DLL 没什么区别。 如果用户删除病毒文件,那么被感染的文件就执行不了了。其不足之处在于,如果.idata 节没有加入 Import 项目的足够空间,感染就不能成功;而且,一旦宿主被拷贝到别的机器,那么宿主就无法运行了。

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:基于ARM平台的可信计算软件栈的实现及应用
下一篇:单片机实现洗浴服务机器人的控制系统设计

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图