文章全部以系统默认的状态为准。其中English代表英文操作系统,Chinese代表中文操作系统。文中如没加说明即为中文Windows 98操作系统。
一、Windows的自启动目录
1.默认路径
C:\windows\start menu\programs\startup(English)
C:\windows\start menu\programs\启动(Chinese)
这是最基本、最常用的Windows启动方式,主要用于启动一些应用软件的自启动项目,如Office的快捷菜单。一般用户希望启动时所要启动的文件也可以通过这里启动,只需把所需文件或其快捷方式放入文件夹中即可。
2.对应的注册表位置
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
Startup="%Directory%"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
Startup="%Directory%"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\User Shell Folders]
"Common Startup"="%Directory%"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Shell Folders]
"Common Startup"="%Directory%"
其中“%Directory%”为启动文件夹位置。
在开始菜单的“启动”文件夹是可更改的,如果用户更改了启动文件夹,则以上注册表的键值均会改变为相应的名称。
值得注意的是:开始菜单的“启动”文件夹中的内容虽然在默认状态下可以被用户查看。但通过改动还是可以达到相当隐蔽地启动的目的:
首先,“启动”文件夹中的快捷方式或其他文件的属性可以改变为“隐藏”。这样可以达到系统不启动被隐藏的文件,等到需要启动时又可以通过更改回文件属性而恢复启动的作用。
其次,“启动”文件夹只是一个普通的文件夹,由于系统监视了这个文件夹,所以变得有些特殊,但文件夹有的一些功能,这个文件夹也是有的。比如“启动”文件夹的名称是可以更改的,并且“启动”文件夹也可以设置属性。如果把属性设置为“隐藏”,则在系统中的“开始→程序”菜单中是看不到“启动”文件夹的(即使在“文件夹选项”中已经设定了“显示所有文件”)。而系统还会启动这个被隐藏的文件夹中的非隐藏文件。
敏感的人们也许已经发现问题。举一个例子:
如果想启动A木马的server端服务器,我们可以把原来的“启动”菜单的名称更改为“StartUp”(这里是随便改的,注册表相应的键值也会自动更改。)之后再创建一个名为“启动”的文件夹,把“StartUp”菜单中的文件全部复制(这里用复制,可以骗过用户的检查)到“启动”菜单中,然后把A木马的server程序放入“StartUp”文件夹中,最后把“StartUp”文件夹隐藏。大功告成!
从外表看来,用户的“开始→启动”目录还在,而且要启动的文件也在。但系统此时启动的文件不是名为“启动”的文件夹中的文件,而是名为“StartUp”的文件夹中的文件。由于“StartUp”文件夹被隐藏,从“开始→程序”中是无法看到真正的启动菜单“StartUp”,所以达到隐蔽启动的目的!
这个启动方式虽然隐蔽,但通过msconfig命令,在打开的“系统配置”对话框中的“启动”标签中查看得到。
二、系统配置文件启动
由于系统的配置文件对于大多数的用户来说都是相当陌生的,这就造成了这些启动方法相对来说都是相当隐蔽的,所以这里提到的一些方法常常会被用于做一些破坏性的操作,请读者注意。
1.Win.ini启动
启动位置(file.exe为要启动的文件名称):
[windows]
load=file.exe
run=file.exe
2.System.ini启动
启动位置(file.exe为要启动的文件名称):
默认为:
[boot]
Shell=Explorer.exe
可启动文件后为:
[boot]
Shell=Explorer.exe file.exe
上述的两种启动方式往往会被木马或一些恶作剧程序(如,妖之吻)利用而导致系统的不正常。由于一般用户很少会关心这两个文件,甚至有的用户根本不知道这些文件是做什么用的,所以隐蔽性很好。但用户可以使用msconfig命令,在打开的“系统配置”对话框中的“启动”标签中查看得到。
注意:与Win.ini文件不同的是,System.ini的启动只能启动一个指定文件,不要把Shell=Explorer.exe file.exe换为Shell=file.exe,这样会使Windows瘫痪!
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之前让系统执行一些命令,包括复制、删除、重命名等,以完成更新文件的目的。但在一般情况下我们在C:\Windows目录下是找不到这个文件的,原因就是Wininit.ini在每次被系统执行完它其中的命令时就会被系统自动删除,直到再次出现新的Wininit.ini文件之后再被删除。其文件格式为:
[rename]
file1=file2
上面的语句行中,file1=file2的意思是把file2文件复制为文件名为file1的文件,相当于覆盖file1文件,之后再把原来的file2文件删除。
这样启动时,Windows就实现了用file2更新file1的目的;如果file1不存在,实际结果是将file2复制并改名为file1;如果要删除文件,则可使用如下命令:
[rename]
nul=file2
这也就是说把file2变为空,即删除的意思。
以上文件名都必须包含完整路径。
注意:由于Wininit.ini处理的文件是在Windows启动以前处理的,所以不支持长文件名;以上的文件复制、删除、重命名等均是不提示用户的情况下执行的。有些病毒也会利用这个文件对系统进行破坏,所以用户如果发现系统无故出现:
Please wait while Setup updates your configuration files.
This may take a few minutes…
那么也许系统就有问题了。
4.Winstart.bat启动
这是一个系统自启动的批处理文件,主要作用是处理一些需要复制、删除的任务。比如有些软件会在安装或卸载完之后要求重新启动,就可以利用这个批处理复制和删除一些文件来达到完成任务的目的。如:
“@if exist C:\Windows\Temp\Proc.bat call C:\Windows\Temp\Proc.bat”
这里是执行Proc.bat文件的命令;
“call filename.exe > nul”
这里是去除任何在屏幕上的输出。
5.Autoexec.bat启动
Autoexec.bat应该是用户再熟悉不过的系统文件了。每次重新启动系统时在DOS下启动。恶意的程序往往会利用这个文件做一些辅助的措施。
不过,在Autoexec.bat文件中会包含有恶意代码。如format c: /y等;由于BAT恶意程序的存在,这个机会大大地增加了。比如最近很流行的SirCam蠕虫也就是利用了Autoexec.bat文件。
三、注册表启动
1.常规启动
在下面的注册表项中,\%path%\表示任意路径,file.exe表示需要运行的程序。
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
"Anything"="\%path%\file.exe"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
"Anything"="\%path%\file.exe"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
?"Anything"="\%path%\file.exe"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
?"Anything"="\%path%\file.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
????"Whatever"="c:\runfolder\program.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
????"Whatever"="c:\runfolder\program.exe"
注意:(1)解除这里相应的自启动项只需删除该键值即可,但注意不要删除如SystemTray、ScanRegistry等这样的系统键值。
(2)如果只想不启动而保留键值,只需在该键值加入rem即可。如:“rem C:\Windows\a.exe”。
(3)在注册表中的自启动项中没有这两项:[HKEY_LOCAL_MACHINE \Software\Microsoft\Windows\CurrentVersion\RunServices]、[HKEY_CURRENT_USER \Software\M