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行调用了新复制完成的程序。以使得新复制的程序能够自动运行,并且进行下一次的复制。同样的道理,现在非常多的软件都提供了自动更新的功能,它的原理基本也是这样,下载升级包,主程序调用升级程序,如果有必要,主程序会先退出,升级程序完成对主程序或者其他文件的复制更新,然后再重新调用主程序。由此可见,计算机的功能是没有好坏之分的。病毒能够运用的原理,普通程序当然也能够利用。水能载舟亦能覆舟就是这个道理。非常希望您为我提供批评和建议,您可以给我的邮箱Anature@163.com发送邮件。 |
|
来自: tianlanlan > 《网络安全》