以前总是听说病毒的特征是1.隐藏2.自我复制3.传播等等。
当时听起来很牛x但是事实并不是很难。
下面是一段我写的简略的程序自我复制代码(c#)
private void button1复制文件_Click(object sender, EventArgs e)
{
string _file = Application.ExecutablePath; //当前程序的完整文件名
string _path = Path.GetDirectoryName(_file);//当前程序的所在的目录名
string _name = Path.GetFileName(_file);//当前程序的文件名
string target_path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
target_path += "\\test";//要复制到得目录 桌面上的test文件夹中(桌面必须先建立此文件夹)
Directory.CreateDirectory(target_path); //在桌面创建test文件夹
int i = 100;
while (i > 0)
{
FileStream fs = new FileStream(_file, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
//读取程序的原字节内容
try
{
FileStream nfs = new FileStream(target_path + "//0" + Convert.ToString(i) + ".exe", FileMode.Create, FileAccess.Write);
nfs.Write(buffer, 0, buffer.Length);
i--;//复制次程序一百次
}
catch
{
MessageBox.Show("程序出错");
Close();
}
}
}
private void button2遍历文件夹_Click(object sender, EventArgs e)
{
string str = "";
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
str = folderBrowserDialog1.SelectedPath;
}
//获取根目录的文件夹
string[] folders = Directory.GetDirectories(str);
//用于记录文件夹个数
count += folders.Length;
//想遍历文件夹的函数中传递上级文件夹
foreach (string path in folders)
{
traversal(path);//呼叫遍历程式
}
MessageBox.Show("你所指定的目录中共有文件夹数为:"+Convert.ToString(count));//显示某磁盘文件夹总数
}
private void traversal(string path)//遍历程序
{
//从获取的文件夹中获取文件夹对象
string[] folders = { };
if (path.Contains("System") == false)
folders = Directory.GetDirectories(path);
//文件夹计数器等于已有的文件夹数量加新遍历出来的文件夹数量
count += folders.Length + 1;
//循环遍历每个文件夹
foreach (string _path in folders)
{
traversal(_path);//递归遍历
}
}