• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            c++初學者

            專注技術開發

            VC程序修改注冊表開機啟動

            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+"\\getip.exe";//這里加上你要查找的執行文件名稱  
            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->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\<用戶名字>\「開始」菜單\程序\啟動,其中“<用戶名字>”是當前登錄的用戶帳戶名稱。

                 二、對所有用戶有效的啟動文件夾

                 這是尋找自動啟動程序的第二個重要位置,不管用戶用什么身份登錄系統,放入該文件夾的快捷方式總是自動啟動——這是它與用戶專有的啟動文件夾的區別所在。該文件夾一般在:\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鍵運行,但兩者都在處理“啟動”文件夾之前。

            有時候人們往往會為了一個程序的啟動而頭痛,因為一些用戶往往不知道那些文件是如何啟動的。所以經常會有些沒用的東西掛在系統上占用資源。有時候也會有人因為不知道如何啟動某個文件而頭痛。更有些特洛依木馬的作者因為不清楚系統的自啟動方式而使自己的木馬輕松被別人發現……   

              Windows的自啟動方式其實有許多方式。除了一些常見的啟動方式之外,還有一些非常隱蔽的可用來啟動文件的方式。本文總結如下,雖然不是全部,但我想應該會對大家有所幫助。文章全部以系統默認的狀態為準,以供研究。

              其中(English)代表英文操作系統,(Chinese)代表中文操作系統。本文沒加說明指的全為中文Windows98操作系統。   

              警告: 文中提及的一些操作可能會涉及到系統的穩定性。例如如果不正確地使用注冊表編輯器可以導致可能重新安裝系統這樣嚴重的問題。微軟也不能保證因不正常使用注冊表編輯器而造成的結果可以被解決。筆者不對使用后果負責,請根據自己的情況使用。   

              Windows的自啟動方式:

              一.自啟動目錄:   

              1.第一自啟動目錄:

              默認路徑位于:

              C:windowsstart menuprogramsstartup(English)

              C:windowsstart menuprograms啟動(Chinese)

              這是最基本、最常用的Windows啟動方式,主要用于啟動一些應用軟件的自啟動項目,如Office的快捷菜單。一般用戶希望啟動時所要啟動的文件也可以通過這里啟動,只需把所需文件或其快捷方式放入文件夾中即可。

            對應的注冊表位置:

              [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders]

              Startup=\"%Directory%\"

              [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders]

              Startup=\"%Directory%\"

              其中“%Directory%”為啟動文件夾位置。

              

              英文默認為:   C:windowsstart menuprogramsstartup

              中文默認為:   C:windowsstart menuprograms啟動   

              在開始菜單的“啟動”文件夾是可更改的,如果用戶更改了啟動文件夾,則以上注冊表的鍵值均會改變為相應的名稱。  

              值得注意的是:開始菜單的“啟動”文件夾中的內容雖然在默認的狀態下可以被用戶看得一清二楚。但通過改動還是可以達到相當隱蔽地啟動的目的的:   

              首先,“啟動”文件夾中的快捷方式或其他文件的屬性可以改變為“隱藏”。這樣可以達到系統不啟動被隱藏的文件,等到需要啟動的時候又可以通過更改回文件屬性而恢復啟動的作用。

            其次,其實“啟動”文件夾只是一個普通的文件夾,但是由于系統監視了這個文件夾,所以變得有些特殊,但文件夾有的功能該文件夾也是有的。譬如“啟動”文件夾的名稱是可以更改的,并且“啟動”文件夾也可以設置屬性。如果把屬性設置為“隱藏”,則在系統中的【開始】?【程序】菜單中是看不到“啟動”文件夾的(即使在“文件夾選項”中已經設定了“顯示所有文件”)。而系統還會啟動這個被隱藏的文件夾中的非隱藏文件。

              敏感的人們也許已經發現問題。舉一個例子:   

              如果我想啟動A木馬的server端服務器,我可以把原來的“啟動”菜單的名稱更改為“StartUp”(這里是隨便改的,注冊表相應的鍵值也會自動更改。)之后再創建一個名為“啟動”的文件夾,把“StartUp”菜單中的文件全部復制(這里用復制,可以騙過用戶的檢查)到“啟動”菜單中,然后把A木馬的server程序放入“StartUp”文件夾中,最后把“StartUp”文件夾隱藏。大功告成!

              

              從外表看來,用戶的【開始】?【啟動】目錄還在,而且要啟動的文件也在。但系統此時啟動的文件不是名為“啟動”的文件夾中的文件,而是名為“StartUp”的文件夾中的文件。如果木馬做的好的話,完全可以在每次啟動的時候把“StartUp”中的文件復制到“啟動”目錄中來達到實時更新啟動目錄的目的。由于“StartUp”文件夾被隱藏,從【開始】?【程序】中是無法看到真正的啟動菜單“StartUp”的,所以達到了隱蔽啟動的目的!

              這個啟動方式雖然比較隱蔽,但通過msconfig依舊可以在“啟動”頁中看出來。  

              2.第二自啟動目錄:

              是的,其實,Windows還有另外一個自啟動目錄,而且很明顯但卻經常被人們忽略的一個。

              該路徑位于:

              C:WINDOWSAll UsersStart MenuProgramsStartUp(English)

              C:WINDOWSAll UsersStart MenuPrograms啟動(Chinese)

              這個目錄的使用方法和第一自啟動目錄是完全一樣的。只要找到該目錄,將所需要啟動的文件拖放進去就可以達到啟動的目的。

              [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionexplorerUser Shell Folders]

              \"Common Startup\"=\"%Directory%\"

              [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionexplorerShell Folders]

              \"Common Startup\"=\"%Directory%\"

              

              值得注意的是:該目錄在開始菜單的“啟動”目錄中是完全不能被看見的。而伴隨著每次啟動,該目錄下的非隱藏文件也會隨之啟動! 另外,在Msconfig中可以看到在這個目錄下要啟動的文件。

            二.系統配置文件啟動:   

              由于系統的配置文件對于大多數的用戶來說都是相當陌生的;這就造成了這些啟動方法相對來說都是相當隱蔽的,所以這里提到的一些方法常常會被用于做一些破壞性的操作,請讀者注意。   

              1.WIN.INI啟動:

              啟動位置(file.exe為要啟動的文件名稱):

              [windows]

              load=file.exe

              run=file.exe

              注意:load=與run=的區別在于:通過load=運行文件,文件會在后臺運行(最小化);而通過run=來運行,則文件是在默認狀態下被運行的。   

              2.SYSTEM.INI啟動:

              啟動位置(file.exe為要啟動的文件名稱):

              默認為:

              [boot]

              Shell=Explorer.exe

              可啟動文件后為:

              [boot]

              Shell=Explorer.exe file.exe

              說明:

              筆者記得在諾頓先生(就是開發出Norton系列軟件的人)寫的一本書里面曾經說過,1、2這兩個文件的有無對系統沒有什么影響,但由于時間的關系,筆者沒有來得及試驗,有興趣者可以試一試。   

              不過有一點是可以肯定的,這樣的啟動方式往往會被木馬或一些惡作劇程序(如,妖之吻)利用而導致系統的不正常。由于一般用戶很少會對這兩個文件關心,甚至有的人不知道這些文件是做什么用的,所以隱蔽性很好。但由于其使用的越來越頻繁,這種啟動方式也被漸漸的察覺了。用戶可以使用msconfig這個命令實現檢查是否有什么程序被加載。具體的是在看是菜單中的“運行”中輸入msconfig回車,之后按照文字說明即可。   

              注意:

              1.  和WIN.INI文件不同的是,SYSTEM.INI的啟動只能啟動一個指定文件,不要把Shell=Explorer.exe file.exe換為Shell=file.exe,這樣會使Windows癱瘓!

              2.  這種啟動方式提前于注冊表啟動,所以,如果想限制注冊表中的文件的啟動,可是使用這種方法。

              3.WININIT.INI啟動:

              Wininit.ini這個文件也許很多人不知道,一般的操作中用戶也很少能直接和這個文件接觸。但如果你編寫過卸載程序的話,也許你會知道這個文件。

              WinInit即為Windows Setup Initialization Utility。翻譯成中文就是Windows安裝初始化工具。這么說也許不明白,如果看到如下提示信息:

              Please wait while Setup updates your configuration files.

              This may take a few minutes...

              大家也許就都知道了!這個就是Wininit.ini在起作用!   

              由于在Windows下,許多的可執行文件和驅動文件是被執行到內存中受到系統保護的。所以在Windows的正常狀態下更改這些文件就成了問題,因此出現了Wininit.ini這個文件來幫助系統做這件事情。它會在系統裝載Windows之前讓系統執行一些命令,包括復制,刪除,重命名等,以完成更新文件的目的。Wininit.ini文件存在于Windows目錄下,但在一般時候我們在C:Windows目錄下找不到這個文件,只能找到它的exe程序Wininit.exe。原因就是Wininit.ini在每次被系統執行完它其中的命令時就會被系統自動刪除,直到再次出現新的Wininit.ini文件……之后再被刪除。

            文件格式:

              [rename]

              file1=file2

              file1=file2的意思是把file2文件復制為文件名為file1的文件,相當于覆蓋file1文件。

              這樣啟動時,Windows就實現了用file2更新file1的目的;如果file1不存在,實際結果是將file2復制并改名為file1;如果要刪除文件,則可使用如下命令:

              [rename]

              nul=file2 

              這也就是說把file2變為空,即刪除的意思。

              以上文件名都必須包含完整路徑。

              注意:

              1.由于Wininit.ini文件處理的文件是在Windows啟動以前處理的,所以不支持長文件名。

              2.以上的文件復制、刪除、重命名等均是不提示用戶的情況下執行的。有些病毒也會利用這個文件對系統進行破壞,所以用戶如果發現系統無故出現:

              Please wait while Setup updates your configuration files.

              This may take a few minutes...

              那么也許系統就有問題了。

              3. 在Windows 95 Resource Kit中提到過Wininit.ini文件有三個可能的段,但只敘述了[rename]段的用法。

              4.WINSTART.BAT啟動:

              這是一個系統自啟動的批處理文件,主要作用是處理一些需要復制、刪除的任務。譬如有些軟件會在安裝或卸載完之后要求重新啟動,就可以利用這個復制和刪除一些文件來達到完成任務的目的。如:

              “@if exist C:WINDOWSTEMPPROC.BAT call C:WINDOWSTEMPPROC.BAT”

              這里是執行PROC.BAT文件的命令;

              “call filename.exe > nul”

              這里是去除任何在屏幕上的輸出。

              值得注意的是WinStart.BAT文件在某種意義上有和AUTOEXEC.BAT一樣的作用。如果巧妙安排完全可以達到修改系統的目的!

              5.AUTOEXEC.BAT啟動: 這個就沒的說了,應該是用戶再熟悉不過的系統文件之一了。每次重新啟動系統時在DOS下啟動。惡意的程序往往會利用這個文件做一些輔助的措施。  

              不過,在AUTOEXEC.BAT文件中會包含有惡意代碼。如format c: /y等;由于BAT惡意程序的存在,這個機會大大地增加了。譬如最近很流行的SirCam蠕蟲也利用了Autoexec.bat文件。

              說明: 4、5這兩個文件都是批處理文件,其作用往往不能完全寫出來,因為批處理的用處在DOS時代的應用太廣泛,它的功能相對來說也是比較強大。想利用這兩個文件,需要對DOS有一定的了解。

            posted on 2011-06-13 17:20 大海 閱讀(6078) 評論(0)  編輯 收藏 引用

            午夜精品久久久久久久| 精品999久久久久久中文字幕| 国产精品禁18久久久夂久| 亚洲午夜无码AV毛片久久| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久亚洲精品国产亚洲老地址| 一级做a爰片久久毛片16| 国产亚洲精品自在久久| 人妻无码αv中文字幕久久 | 亚洲AV无码成人网站久久精品大| 色综合久久久久综合99| 久久有码中文字幕| 日本国产精品久久| 少妇久久久久久被弄到高潮| 久久人人爽人人爽人人片AV东京热| 人人狠狠综合久久亚洲88| 久久精品国产一区二区三区日韩| 996久久国产精品线观看| 久久免费高清视频| 色综合色天天久久婷婷基地| 亚洲综合婷婷久久| 日本精品久久久久影院日本| 性做久久久久久久久浪潮| 久久99热这里只有精品66| 日日噜噜夜夜狠狠久久丁香五月| 中文字幕乱码久久午夜| 久久精品国产亚洲av高清漫画| 国产精品久久久久影视不卡| 99热热久久这里只有精品68| 亚洲欧洲久久av| 久久精品国产亚洲av日韩| 色综合久久久久网| 伊人久久无码精品中文字幕| 久久夜色精品国产噜噜麻豆 | 色天使久久综合网天天| 无遮挡粉嫩小泬久久久久久久 | 香蕉99久久国产综合精品宅男自 | 四虎影视久久久免费| 少妇被又大又粗又爽毛片久久黑人| 国产日韩久久免费影院| 久久性生大片免费观看性|