VC实现开机自启动


很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run 。
参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作)
//实用代码一
int  C***Dlg::CreateRun( void )
{
//添加以下代码
HKEY    RegKey;   
CString   sPath;   
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);   
sPath.ReleaseBuffer();   
int    nPos;   
nPos=sPath.ReverseFind( '\\' );   
sPath=sPath.Left(nPos);   
CString   lpszFile=sPath+ "<a target=" _blank ">\\getip.exe" ; //</a>这里加上你要查找的执行文件名称   
CFileFind   fFind;   
BOOL    bSuccess;   
bSuccess=fFind.FindFile(lpszFile);   
fFind.Close();   
if (bSuccess)   
{   
    CString   fullName;   
    fullName=lpszFile;   
    RegKey=NULL;   
    RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run" ,&RegKey);   
    RegSetValueEx(RegKey, "getip" ,0,REG_SZ, ( const    unsigned    char *)( LPCTSTR )fullName,fullName.GetLength()); //这里加上你需要在注册表中注册的内容   
    this -&gt;UpdateData(FALSE);   
}   
else   
{   
    //theApp.SetMainSkin();   
    ::AfxMessageBox( "没找到执行程序,自动运行失败" );   
    exit (0);   
}   
return  0;
}
//把上面的getip(共2处)替换成自己想启动程序的名字。
================================================
实用代码二:
//写入注册表,开机自启动 
HKEY  hKey; 
//找到系统的启动项 
LPCTSTR  lpRun =  "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
//打开启动项Key 
long  lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); 
if (lRet == ERROR_SUCCESS) 
     char  pFileName[MAX_PATH] = {0}; 
     //得到程序自身的全路径 
     DWORD  dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH); 
     //添加一个子Key,并设置值 // 下面的"getip"是应用程序名字(不加后缀.exe)
     lRet = RegSetValueEx(hKey,  "getip" , 0, REG_SZ, ( BYTE  *)pFileName, dwRet);
     //关闭注册表 
     RegCloseKey(hKey); 
     if (lRet != ERROR_SUCCESS) 
    
         AfxMessageBox( "系统参数错误,不能随系统启动" ); 
    
}
 
      一、当前用户专有的启动文件夹
      这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:\Documents and Settings\&lt;用户名字&gt;\「开始」菜单\程序\启动,其中“&lt;用户名字&gt;”是当前登录 的用户帐户名称。
      
      二、对所有用户有效的启动文件夹
      这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。 该文件夹一般在:\Documents and Settings\All Users\「开始」菜单\程序\启动。
      
       三、Load注册键
      介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。
      
      四、Userinit注册键
      位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT \CurrentVersion \Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个 userinit.exe,如图,但这个键允许指 定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。
     
      五、Explorer\Run注册键
      和 load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具 体位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion \Policies\Explorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Windows \CurrentVersion\Policies\Explorer\Run。
      
      六、RunServicesOnce注册键
      RunServicesOnce 注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注 册键的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion \RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows \CurrentVersion\RunServicesOnce。
      
      七、RunServices注册键
      RunServices 注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置 是:HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion \RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows \CurrentVersion\RunServices。
      
      八、RunOnce\Setup注册键
      RunOnce\Setup 指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USER\Software\Microsoft \Windows \CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft \Windows\CurrentVersion\RunOnce\Setup。
      
      九、RunOnce注册键
      安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows \CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft \Windows \CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机 在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动” 文件夹的内容之后运 行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows \CurrentVersion\RunOnceEx。
      
      十、Run注册键
      Run 是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER\Software\Microsoft \Windows \CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows \CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接 HKEY_LOCAL_MACHINE下面的Run键运 行,但两者都在处理“启动”文件夹之前。
有时候人们往往会为了一个程序的启动而头痛,因为一些用户往往不知道那些文件是如何启动的。所以经常会有些没用的东西挂在系统上占用资源。有时候也 会有人因为不知道如何启动某个文件而头痛。更有些特洛依木马的作者因为不清楚系统的自启动方式而使自己的木马轻松被别人发现……



HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run] 
[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServices] 
[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce] 
[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnce] 
[HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run] 
[HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce] 
[HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServices] 
以上只是默认运行的部分注册表位置,其实还可以在系统启动外客(shell explorer.exe)后添加病毒路径等方法,同样可以实现通过注册表开机自动运行。 
2.关联文件类型 
在注册表HKEY_CLASS_ROOT下可以更改文件类型的默认启动程序,比如更改EXE文件的启动程序为你写的病毒,那么每当运行exe程序时,病毒将替代程序运行 
例: 
到注册表HKEY_CLASS_ROOT\\exefile\\shell\\open\\command下,修改“默认”修改为c:\\windows\\svchost.exe \"%1\" %*,那么以后运行.exe文件时只会运行c:\\windows\\svchost.exe 
3.程序修改注册表的方法: 
(1)使用REG命令添加修改注册表: 
REG命令使用方法具体可以在命令提示符中输入REG /?和通过参阅Windows命令帮助查看 
主要格式: 
REG Operation [Parameter List] 
Operation   [ QUERY   | ADD     | DELETE   | COPY     | 
               SAVE     | LOAD   | UNLOAD   | RESTORE | 
               COMPARE | EXPORT | IMPORT ] 
例:向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为SVCHOST的键值,键值内容为C:\\Windows\\system\\SVCHOST.exe 
reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f 
调用reg命令的方法主要有两中,一种是使用C语言中的system函数,另一种是使用C语言中的spawn类函数(如函数spawnl)。具体system和spawnl使用方法请参见其它资料,这里仅举一例: 
例:用system函数通过reg命令向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为SVCHOST的键值,键值内容为C:\\Windows\\system\\SVCHOST.exe 
system(\"reg add [url=]\\\"HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\[/url]" /v SVCHOST /d C:\\\\Windows\\\\system\\\\SVCHOST.exe /f\"); 
评论与小结:使用REG命令添加注册表可以达到直接调用系统命令(工具)来修改注册表的目的,如果被杀毒软件拦截也只会显示修改操作的发出来自C:\\WINDOWS\\system32\\reg.exe,使病毒不容易被寻找到。但由于REG命令属于控制台命令,因此调用时有黑色的控制台出现,是病毒的征兆被感染用户发现,不利于病毒隐藏。 
(2)使用WindowsAPI添加修改注册表 
WindowsAPI为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数这些函数有:   
RegCloseKey 
RegConnectRegistry 
RegCreateKey 
RegCreateKeyEx 
RegDeleteKey 
RegDeleteVale     
RegEnumKey 
RegFlushKey 
RegGetKeySecurity(Windows9X不适用) 
RegLoadKey   
RegNotifyChangeKeyValue(Windows9X不适用) 
RegOpenKey 
RegOpenKeyEx 
RegQueryInfoKey 
RegQueryValue   
RegQueryValueEx 
RegReplaceKey 
RegRestoreKey(Windows9X不适用) 
RegSaveKey 
RegSetKeySecurity(Windows9X不适用) 
RegSetValue 
RegSetValueEx 
RegUnLoadKey   
等,函数的使用需要在32位C编译器下调用windows.h文件,同(1)中一样,具体函数的使用方法请参见其它资料,这里仅举一例. 
例:通过WindowsAPI向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为SVCHOST的键值,键值内容为C:\\Windows\\system\\SVCHOST.exe 
TRegistry* Registry;   
Registry=new TRegistry(); 
Registry->RootKey=HKEY_LOCAL_MACHINE; 
Registry->OpenKey(\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\",FALSE); 
Registry->WriteString(\"SVCHOST\",\"C:\\\\Windows\\\\system\\\\SVCHOST.exe\");WriteString() 
Registry->CloseKey(); 
评论与小结:使用WindowsAPI添加注册表可以达到直接无须调用系统命令(工具)就可以修改注册表的目的,但如果被杀毒软件拦截会显示修改操作来自的病毒体文件所在的路径,使病毒容易被寻找到。但由于WindowsAPI可以“悄悄”的完成修改,在前台没有任何显示,因此调用时如果未被拦截,很难被感染用户发觉,利于病毒隐藏。
(3)使用REGEDIT添加修改注册表 
REGEDIT就是注册表编辑器,但它其实有一个/s的参数,只要调用regedit /s 注册表文件,就可以在后台无提示的修改注册表。同样需要用spawnl函数调用它。 
例:通过spawnl函数调用regedit向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为wjview32的键值,键值内容为C:\\windows\\wjview32.com /s 
char *regadd={\"REGEDIT4\\n\\n[HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run]\\n\\\"wjview32\\\"=\\\"C:\\\\\\\\windows\\\\\\\\wjview32.com /s\\\"\"}; 
FILE *output; 
if((output=fopen(\"$$$$$\",\"w\"))!=NULL) 

fprintf(output,regadd); 
fclose(output); 
spawnl(1,\"c:\\\\windows\\\\regedit.exe\",\" /s $$$$$\",NULL);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值