Windows系统自启动.docx
《Windows系统自启动.docx》由会员分享,可在线阅读,更多相关《Windows系统自启动.docx(15页珍藏版)》请在冰豆网上搜索。
Windows系统自启动
Windows系统自启动
2009-02-2512:
51:
21作者:
admin来源:
浏览次数:
328网友评论0条
前言:
有时候人们往往会为了一个程序的启动而头痛,因为一些用户往往不知道那些文件是如何启动的。
所以经常会有些没用的东西挂在系统上占用资源。
有时候也会有人因为不知道如何启动某个文件而头痛。
更有些特洛依木马的作者因为不清楚系统的自启动方式而使自己的木马轻松被别人发现……
Windows的自启动方式其实有许多方式。
除了一些常见的启动方式之外,还有一些非常隐蔽的可用来启动文件的方式。
本文总结如下,虽然不是全部,但我想应该会对大家有所帮助。
文章全部以系统默认的状态为准,以供研究。
其中(English)代表英文操作系统,(Chinese)代表中文操作系统。
本文没加说明指的全为中文Windows98操作系统。
警告:
文中提及的一些操作可能会涉及到系统的稳定性。
例如如果不正确地使用注册表编辑器可以导致可能重新安装系统这样严重的问题。
微软也不能保证因不正常使用注册表编辑器而造成的结果可以被解决。
笔者不对使用后果负责,请根据自己的情况使用。
Windows的自启动方式:
一、自启动目录:
1.第一自启动目录:
默认路径位于:
C:
windowsstartmenuprogramsstartup(English)
C:
windowsstartmenuprograms启动(Chinese)
这是最基本、最常用的Windows启动方式,主要用于启动一些应用软件的自启动项目,如Office的快捷菜单。
一般用户希望启动时所要启动的文件也可以通过这里启动,只需把所需文件或其快捷方式放入文件夹中即可。
对应的注册表位置:
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShellFolders]
Startup=\"%Directory%\"
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUserShellFolders]
Startup=\"%Directory%\"
其中“%Directory%”为启动文件夹位置。
英文默认为:
C:
windowsstartmenuprogramsstartup
中文默认为:
C:
windowsstartmenuprograms启动
在开始菜单的“启动”文件夹是可更改的,如果用户更改了启动文件夹,则以上注册表的键值均会改变为相应的名称。
值得注意的是:
开始菜单的“启动”文件夹中的内容虽然在默认的状态下可以被用户看得一清二楚。
但通过改动还是可以达到相当隐蔽地启动的目的的:
首先,“启动”文件夹中的快捷方式或其他文件的属性可以改变为“隐藏”。
这样可以达到系统不启动被隐藏的文件,等到需要启动的时候又可以通过更改回文件属性而恢复启动的作用。
其次,其实“启动”文件夹只是一个普通的文件夹,但是由于系统监视了这个文件夹,所以变得有些特殊,但文件夹有的功能该文件夹也是有的。
譬如“启动”文件夹的名称是可以更改的,并且“启动”文件夹也可以设置属性。
如果把属性设置为“隐藏”,则在系统中的【开始】【程序】菜单中是看不到“启动”文件夹的(即使在“文件夹选项”中已经设定了“显示所有文件”)。
而系统还会启动这个被隐藏的文件夹中的非隐藏文件。
敏感的人们也许已经发现问题。
举一个例子:
如果我想启动A木马的server端服务器,我可以把原来的“启动”菜单的名称更改为“StartUp”(这里是随便改的,注册表相应的键值也会自动更改。
)之后再创建一个名为“启动”的文件夹,把“StartUp”菜单中的文件全部复制(这里用复制,可以骗过用户的检查)到“启动”菜单中,然后把A木马的server程序放入“StartUp”文件夹中,最后把“StartUp”文件夹隐藏。
大功告成!
从外表看来,用户的【开始】【启动】目录还在,而且要启动的文件也在。
但系统此时启动的文件不是名为“启动”的文件夹中的文件,而是名为“StartUp”的文件夹中的文件。
如果木马做的好的话,完全可以在每次启动的时候把“StartUp”中的文件复制到“启动”目录中来达到实时更新启动目录的目的。
由于“StartUp”文件夹被隐藏,从【开始】【程序】中是无法看到真正的启动菜单“StartUp”的,所以达到了隐蔽启动的目的!
这个启动方式虽然比较隐蔽,但通过msconfig依旧可以在“启动”页中看出来。
2.第二自启动目录:
是的,其实,Windows还有另外一个自启动目录,而且很明显但却经常被人们忽略的一个。
该路径位于:
C:
WINDOWSAllUsersStartMenuProgramsStartUp(English)
C:
WINDOWSAllUsersStartMenuPrograms启动(Chinese)
这个目录的使用方法和第一自启动目录是完全一样的。
只要找到该目录,将所需要启动的文件拖放进去就可以达到启动的目的。
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionexplorerUserShellFolders]
\"CommonStartup\"=\"%Directory%\"
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionexplorerShellFolders]
\"CommonStartup\"=\"%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.exefile.exe
说明:
笔者记得在诺顿先生(就是开发出Norton系列软件的人)写的一本书里面曾经说过,1、2这两个文件的有无对系统没有什么影响,但由于时间的关系,笔者没有来得及试验,有兴趣者可以试一试。
不过有一点是可以肯定的,这样的启动方式往往会被木马或一些恶作剧程序(如,妖之吻)利用而导致系统的不正常。
由于一般用户很少会对这两个文件关心,甚至有的人不知道这些文件是做什么用的,所以隐蔽性很好。
但由于其使用的越来越频繁,这种启动方式也被渐渐的察觉了。
用户可以使用msconfig这个命令实现检查是否有什么程序被加载。
具体的是在看是菜单中的“运行”中输入msconfig回车,之后按照文字说明即可。
注意:
1.和WIN.INI文件不同的是,SYSTEM.INI的启动只能启动一个指定文件,不要把Shell=Explorer.exefile.exe换为Shell=file.exe,这样会使Windows瘫痪!
2.这种启动方式提前于注册表启动,所以,如果想限制注册表中的文件的启动,可是使用这种方法。
3.WININIT.INI启动:
Wininit.ini这个文件也许很多人不知道,一般的操作中用户也很少能直接和这个文件接触您正在看的Windows系统教程是:
Windows系统自启动方式大全。
。
但如果你编写过卸载程序的话,也许你会知道这个文件。
WinInit即为WindowsSetupInitializationUtility。
翻译成中文就是Windows安装初始化工具。
这么说也许不明白,如果看到如下提示信息:
PleasewaitwhileSetupupdatesyourconfigurationfiles.
Thismaytakeafewminutes...
大家也许就都知道了!
这个就是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.以上的文件复制、删除、重命名等均是不提示用户的情况下执行的。
有些病毒也会利用这个文件对系统进行破坏,所以用户如果发现系统无故出现:
PleasewaitwhileSetupupdatesyourconfigurationfiles.
Thismaytakeafewminutes...
那么也许系统就有问题了。
3.在Windows95ResourceKit中提到过Wininit.ini文件有三个可能的段,但只叙述了[rename]段的用法。
4.WINSTART.BAT启动:
这是一个系统自启动的批处理文件,主要作用是处理一些需要复制、删除的任务。
譬如有些软件会在安装或卸载完之后要求重新启动,就可以利用这个复制和删除一些文件来达到完成任务的目的。
如:
“@ifexistC:
WINDOWSTEMPPROC.BATcallC:
WINDOWSTEMPPROC.BAT”
这里是执行PROC.BAT文件的命令;
“callfile
三、注册表启动:
注册表中的启动应该是被使用最频繁的启动方式,但这样的方式也有一些隐蔽性较高的方法,大致有三种。
1.常规启动:
其中%path%为任意路径,file.exe为要运行的程序。
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServices]
\"Anything\"=\"%path%file.exe\"
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesOnce]
\"Anything\"=\"%path%file.exe\"
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun]
\"Anything\"=\"%path%file.exe\"
[HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce]
\"Anything\"=\"%path%file.exe\"
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun]
\"Whatever\"=\"c:
runfolderprogram.exe\"
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce]
\"Whatever\"=\"c:
runfolderprogram.exe\"
注意:
(1).如果需要运行.dll文件,则需要特殊的命令行。
如:
Rundll32.exeC:
WINDOWSFILE.DLL,Rundll32
(2).解除这里相应的自启动项只需删除该键值即可,但注意不要删除如SystemTray、ScanRegistry等这样的系统键值。
(3).如果只想不启动而保留键值,只需在该键值加入rem即可。
如:
“remC:
Windowsa.exe”
(4).在注册表中的自启动项中没有这项:
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices]
(5).Run和RunServices的区别在于:
Run中的程序是在每次系统启动时被启动,RunServices则是会在每次登录系统时被启动。
关于:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx]
有特殊的语法:
例如,运行notepad.exe
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx
\"Title\"=\"MySetupTitle\"
\"Flag\"=dword:
00000002
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx001
\"RunMyApp\"=\"||notepad.exe\"
语法为:
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx
Flags=0x0000000
Title=\"StatusDialogBoxTitle\"
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceExDepend
0001=\"xxx1\"
000X=\"xxxx\"
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx001
Entry1=\"MyApp1.exe\"
EntryX=\"MyApp2.exe\"
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceEx00x
...
注意:
(1).“xxx1,xxxx”是一个动态链接库(DLL)或.OCX文件名(如My.ocx或My.dll)。
(2).“0001,000x”是部分名字。
可以是数字和文字。
(3).“entry1,entryX”是指向一个要运行的程序文件的注册表串值。
键值的说明:
Flags是一个定位在RunOnceEx键用来激活/禁止的DWORD值,具体如下:
值功能功能定义
0x00000000默认所有功能被禁止
0x00000004检查壳状况打开壳的读写校验准备接受OLE命令
0x00000008无报错对话错误对话框不显示
您正在看的Windows系统教程是:
Windows系统自启动方式大全。
0x00000010创建错误报告文件创建C:
WindowsRunOnceEx.err文件如果有错误出现
0x00000020创建执行报告文件创建一个有命令状态的C:
WindowsRunOnceEx.log文件
0x00000040无例外限制当注册DLL时不限制例外
0x00000080无状态对话当RunOnceEx运行时状态对话框不显示
由于涉及篇幅较多,具体做法请浏览微软网页:
2.特殊启动1:
在注册表中除了上述的普通的启动方式以外,还可以利用一些特殊的方式达到启动的目的:
[HKEY_CLASSES_ROOTexefileshellopencommand]@=\"%1\"%*
[HKEY_CLASSES_ROOTcomfileshellopencommand]@=\"%1\"%*
[HKEY_CLASSES_ROOTbatfileshellopencommand]@=\"%1\"%*
[HKEY_CLASSES_ROOThtafileshellopencommand]@=\"%1\"%*
[HKEY_CLASSES_ROOTpiffileshellopencommand]@=\"%1\"%*
[HKEY_LOCAL_MACHINESoftwareCLASSESbatfileshellopencommand]@=\"%1\"%*
[HKEY_LOCAL_MACHINESoftwareCLASSEScomfileshellopencommand]@=\"%1\"%*
[HKEY_LOCAL_MACHINESoftwareCLASSESexefileshellopencommand]@=\"%1\"%*
[HKEY_LOCAL_MACHINESoftwareCLASSEShtafileshellopencommand]@=\"%1\"%*
[HKEY_LOCAL_MACHINESoftwareCLASSESpiffileshellopencommand]@=\"%1\"%*
其实从注册表的路径上也许就隐约可以看出,这些都是一些经常被执行的可执行文件的键值。
往往有些木马是可以更改这些键值从而达到加载的目的:
如果我把“”%1”%*”改为“file.exe”%1”%*”则文件file.exe就会在每次执行某一个类型的文件(要看改的是哪一个文件类型)的时候被执行!
当然,可以被更改的不一定只是可执行文件,譬如冰河就利用了TXT文件的键值:
[HKEY_CLASSES_ROOTtxtfileshellopencommand]实现木马的一种启动方式。
3.特殊启动2:
在注册表中:
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxD
的位置上有这样的地址。
该地址是系统启动VxD驱动文件放置的地址,就像PrettyPark这个蠕虫一样,可以建立一个主键之后把VxD文件添加到注册表中在这里。
注意:
不可以直接把一个EXE文件改名为VxD文件,需要另外进行编程,生成的VxD文件。
4.其他启动方式:
(一).C:
Explorer.exe启动方式:
这是一种特殊的启动方式,很少有人知道。
在Win9X下,由于SYSTEM.INI只指定了Windows的外壳文件EXPLORER.EXE的名称,而并没有指定绝对路径,所以Win9X会搜索EXPLORER.EXE文件。
搜索顺序如下:
(1).搜索当前目录。
(2).如果没有搜索到EXPLORER.EXE则系统会获取
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerEnvironmentPath]的信息获得相对路径。
(3).如果还是没有文件系统则会获取[HKEY_CURRENT_USEREnvironmentPath]的信息获得相对路径。
其中:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSessionManagerEnvironmentPath]和[HKEY_CURRENT_USEREnvironmentPath]所保存的相对路径的键值为:
“%SystemRoot%System32;%SystemRoot%”和空。
所以,由于当系统启动时,“当前目录”肯定是%SystemDrive%(系统驱动器),这样系统搜索EXPLORER.EXE的顺序应该是:
(1).%SystemDrive%(例如C:
)
(2).%SystemRoot%System32(例如C:
WINNTSYSTEM32)
(3).%SystemRoot%(例如C:
WINNT)
此时,如果把一个名为EXPLORER.EXE的文件放到系统根目录下,这样在每次启动的时候系统就会自动先启动根目录下的EXPLORER.EXE而不启动Windows目录下的EXPLORER.EXE了。
在WinNT系列下,WindowsNT/Windows2000更加注意了EXPLORER.EXE的文件名放置的位置,把系统启动时要使用的外壳文件(EXPLORER.EXE)的名称放到了:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWinlogonShell]
这个位置。
作为默认这个位置是不存在的,默认为是Explorer.exe。
具体请参考:
注意:
一定要确定根目录下的EXPLORER.EXE要能启动Windows目录下的EXPLORER.EXE,否则会导致Windows无法启动!
现在流行的病毒CodeRed就会在C:
和D:
目录下放置两个约8KB的EXPLORER.EXE的文件!
在Windows2000SP2中微软已经更改了这一方式。
(二).屏幕保护启动方式:
Windows的屏幕保护程序是一个.scr文件。
这是一个PE格式的可执行文件。
如果把屏幕保护程序.scr更名为.exe的文件,则该程序仍然可以正常启动。
类似的.exe文件更名为.scr文件也是一样可以被运行!
.scr文件默认存在于C:
Windows目录中,他的名字就是在“显示”属性中的“屏幕保护程序”中的名称。
在C:
Windows目录下的所有*.scr文件都会被Windows的“屏幕保护程序”显示,而文件路径本身保存在System.ini中的SCRNSAVE.EXE=的这条中。
有意思的是在SCRNSAVE.EXE=