恶意代码的亲密接触之病毒编程技术--1

恶意代码的亲密接触之病毒编程技术--1
  生活在网络时代,无论是作为一名程序员抑或是作为一名普通的电脑使用者,对病毒这个词都已经不再陌生。网络不仅仅是传播信息的快速通道,从另外一个角度来看,也是病毒得以传播和滋生的温床,有资料显示,未安装补丁的Windows操作系统连接至internet平均10-15分钟就会被蠕虫或病毒感染。各种类型的病毒,在人们通过网络查阅信息、交换文件、收听视频时正在悄悄地传播。这些病毒或蠕虫不仅在传播过程中消耗大量的带宽资源,而且会干扰系统功能的正常使用或造成数据丢失、甚至是硬件损坏,每个电脑用户几乎都有过系统被病毒感染而无法正常使用的经历,大部分企业用户也都有过因病毒发作致使业务系统不能正常运行的经历。病毒距离我们,其实并不遥远。

  然而,不只普通用户在面对各种夸大的报道和宣传后感觉到茫然和恐惧,随着计算机各个领域的细分和专业化,就连一些职业的程序员对病毒技术也缺乏深入的了解。病毒,不过是精心设计的一段程序,是编程技巧和优化技术的集中体现,是挑战技术极限、无所不用其极的一种编程技术。其实病毒技术中的优化和各种精巧的构造,也完全可以在一些特殊的情况下使用,使得某些编程工作得以简化;从另外一个角度来看,只有充分了解病毒技术,才能更好地研究应对之策,知己知彼,方能百战不殆。

  病毒不是某个系统下的专属品,事实上现在各种流行的操作系统:从最初的Unix 系统到其各种变体如Linux、Solaris、AIX、OS2 等,从Windows 到CE、Sybian等嵌入式系统,甚至是在某些专业化的大型机系统上,都无一例外地出现了病毒,各种平台下病毒的基本原理类似的,但是针对不同系统的特性,实现可能区别很大,原因在于作为一种无所不用其极的技术,势必利用各种系统相关的功能或弱点以取得各种特权和资源。正如生物的多样性一样,病毒种类繁多:包括源代码病毒、宏病毒、脚本病毒以及与各种系统可执行文件系统相关的病毒等。本文将以使用最为广泛的Windows操作系统下的PE病毒为例,说明病毒技术的原理以及实现技术,驱散笼罩在病毒技术上的迷雾。
  
  病毒、蠕虫、恶意代码

  传统意义上的病毒是具有类似生物病毒特征的特殊代码或程序,具有两个最基本的特点:自我复制和自动传播。

  蠕虫,广义上一般被认为是病毒的子类,同样具有自我复制和传播的特性,但鉴于蠕虫通常利用系统漏洞而非感染文件系统进行传播的特殊性,通常将其单独作为一类。一般认为区分蠕虫和传统病毒的分类标准是看其是否依赖于宿主程序进行感染和传播,如果必须依附于宿主程序才能进行感染和传播的才是病毒。不过定义不是绝对的,当今病毒和蠕虫技术的融合愈益深入,界限愈益模糊。很多病毒采用了很多的蠕虫传播技术,蠕虫也不仅仅通过系统漏洞传播,同时也通过感染文件系统进行传播。此外还有有相当一部分程序虽然不具备自我复制和自我传播的特征,但却执行了未经用户许可的代码、做了未经用户许可的事情,比如特洛伊木马等间谍软件、浏览器恶意脚本、一些广告软件等,显然无法将其定义为传统的病毒或蠕虫,他们和蠕虫、病毒一样,同属于一个更大的范畴——恶意代码。本文重点阐述传统病毒经常使用的技术。
  
  病毒简史

  谈病毒技术,无法回避病毒产生的历史。早在1949年在冯·诺伊曼的一篇论文《复杂自动装置的理论及组织的行为》中,即预见了可自我繁殖程序出现的可能。而现在众所公认的病毒的萌牙于AT&T(贝尔实验室)几个年轻的天才程序员编制的磁芯大战(CoreWar)游戏程序,已经具备了病毒的一些特征。随后相关的实验和研究在一些学者和天才的程序员中开始展开,正是这些创造了计算机系统的天才们,制造了计算机病毒。

  很难考证第一个真正的病毒出现在何时何地,但在20 世纪80 年代,随着个人计算机的普及,病毒已经开始流行了,早期的计算机病毒是和当时的文件交换方式和操作系统特点联系在一起的,那个时候发行软件或交换文件主要通过软盘进行,系统是基于文本界面的Unix 或DOS,网络尚未普及,因此这一时期的病毒大都是引导区病毒和文件型病毒,前者通过替换系统引导区代码在系统启动时获取执行权,后者通过修改可执行文件嵌入代码以在可执行文件执行时获取控制权,更多病毒的则是二者的结合。

  IBM-PC 的流行和MS DOS系统的普及使得DOS病毒在这一阶段逐渐占据了统治地位。80年代后期因特网开始进入人们的视野,这时也出现了第一个因特网蠕虫——莫里斯蠕虫,借助于系统漏洞通过网络进行快速传播。90 年代随着电脑及网络的进一步普及,病毒技术也有了很大的进步,这在很大程度上也是由于病毒受社会的关注程度以及反病毒软件的进步,进一步刺激了病毒制作者群体的创造欲望,多态和变形技术开始出现,以对抗杀毒软件的特征码扫描。DOS操作系统病毒的绝对数量出现了爆炸性增长,但90年代后期随着Windows的出现,DOS病毒和引导区病毒逐渐走向消亡,Windows 病毒随之则开始大量涌现,随着微软Office 软件的普及宏病毒出现了,各种脚本病毒也日益增多。因特网的普及在给人们带来便利的同时也加快了病毒传播的速度和范围,靠Emai传播的蠕虫开始增多,时至今日仍然是蠕虫的重要传播途径。从2000 年至今,在进入21世纪的头几年里,Windows下PE病毒技术已经日益纯熟、数量日益增多,但病毒排行榜的首位已经让位给利用各种系统漏洞进行传播的蠕虫了,安全研究的深入、各种安全漏洞的大量披露给蠕虫作者提供了很好的素材,特洛依木马等恶意软件数量呈现几何级数的增长,病毒作者的关注点重新从Windows 桌面系统转向Unix 系统、手机等嵌入移动设备上。安全研究也愈益受到社会的关注,病毒和反病毒的战争仍在继续,在可预见的将来,仍将继续。

  不过,Windows PE文件病毒仍然占有非常大的比重。Windows 平台和PE 文件格式Windows 平台是当今最为流行的桌面系统,在服务器
市场上,也占有相当的份额。其可执行文件(普通的用户程序、共享库以及NT系统的驱动文件)采用的是PE(Portable Executebale)文件格式。病毒要完成各种操作,在Windows 系统上一般都是通过调用系统提供的API进行的,以保证在各种Windows版本上都能运行,因此读者应对基本的API比较熟悉。病毒要实现对宿主程序的感染,就不可避免地要修改PE文件,因此要求读者对PE文件格式有一定的了解,PE文件格式是一种复杂的文件格式,本文并不准备详细讲述PE文件格式,仅作在必要处简单的介绍,如必要可进一步参阅相关资料。PE文件结构和头部部分主要域的格式如下图1所示。


图1:PE 文件结构及部分主要域的定义

  由图1 可见,PE文件是由文件头、节表、包含各种代码和数据的节构成。文件头中定义了PE文件的引入函数表、引出函数表、节数目、文件版本、文件大小、所属子系统等相关的重要信息。节表则定义了实际数据节的大小、对齐、内存到文件如何进行映射等信息。后面的各个节则包含了实际的可执行代码或数据。(见图1)

本文来自CSDN博客http://blog.csdn.net/p123456789p/archive/2009/03/19/4005207.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值