(2).“0001,000x”是部分名字。可以是数字和文字。
(3).“entry1,entryX”是指向一个要运行的程序文件的注册表串值。
键值的说明:
Flags是一个定位在RunOnceEx键用来激活/禁止的DWORD值,具体如下:
值功能功能定义
0x00000000默认所有功能被禁止
0x00000004检查壳状况打开壳的读写校验准备接受OLE命令
0x00000008无报错对话错误对话框不显示
0x00000010创建错误报告文件创建 C:WindowsRunOnceEx.err 文件如果有错误出现
0x00000020创建执行报告文件创建一个有命令状态的C:WindowsRunOnceEx.log文件
0x00000040无例外限制当注册DLL时不限制例外
0x00000080无状态对话当RunOnceEx运行时状态对话框不显示
由于涉及篇幅较多,具体做法请浏览微软网页:
http://support.microsoft.com/support/kb/articles/Q232/5/09.ASP
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_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironmentPath]的信息获得相对路径。
(3).如果还是没有文件系统则会获取[HKEY_CURRENT_USEREnvironmentPath]的信息获得相对路径。
其中:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironmentPath]和[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。
具体请参考:http://www.microsoft.com/technet/security/bulletin/fq00-052.asp
注意:
一定要确定根目录下的EXPLORER.EXE要能启动Windows目录下的EXPLORER.EXE,否则会导致Windows无法启动!
现在流行的病毒CodeRed就会在C:和D:目录下放置两个约8KB的EXPLORER.EXE的文件!
在Windows 2000 SP2中微软已经更改了这一方式。
(二).屏幕保护启动方式:
Windows的屏幕保护程序是一个.scr文件。这是一个PE格式的可执行文件。如果把屏幕保护程序.scr更名为.exe的文件,则该程序仍然可以正常启动。类似的.exe文件更名为.scr文件也是一样可以被运行!
.scr文件默认存在于C:Windows目录中,他的名字就是在“显示”属性中的“屏幕保护程序”中的名称。在C:Windows目录下的所有*.scr文件都会被Windows的“屏幕保护程序”显示,而文件路径本身保存在System.ini中的SCRNSAVE.EXE=的这条中。有意思的是在SCRNSAVE.EXE=这条中,其规定的路径也包含了目录名称。即如果我想安装一个.scr文件时,譬如安装路径为D:SCR1.scr,而D:SCR这个目录中还有2.scr,则在这个目录中的所有.scr(1.scr,2.scr)文件都会被显示在“屏幕保护程序”设置中。如果屏幕保护程序设为“(无)”,则SCRNSAVE.EXE=这条不存在。但如果SCRNSAVE.EXE=这条所指的文件或目录是错误的,则在“屏幕保护程序设置”中仍然会显示“(无)”。
屏幕保护程序的启动时间保存在注册表中的这个位置上:
HKEY_USERS.DEFAULTControl PaneldesktopScreenSaveTime

















