科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件病毒及流氓软件自我复制的简单实现

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

病毒和流氓软件总是让人气愤!那么,计算机程序怎么实现自我复制呢。

作者:Anature 来源:天极开发 2007年11月11日

关键字:

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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章