Windows自启动方式大全(下)
(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 PaneldesktopScreenSaveTimeOut
时间单位为秒,不过虽然是秒,可启动时间却为分,即从60秒开始记录,如果记录时间小于60秒,则自动定为1分钟。
屏幕保护是否设置密码的键值为:
HKEY_USERS.DEFAULTControl PaneldesktopScreenSaveUsePassword
有密码则值为1没有密码则值为0。
由此可见,如果有人把自己所作的.exe程序更名为.scr的程序,并使程序能够在SYSTEM.INI中添加“SCANSAVE.EXE=/%Path%”f/ile.scr”(/%Path%/file.scr为所需要设置的文件的路径和文件名,如C:Program filestrojan.scr),修改注册表中的HKEY_USERS.DEFAULTControl PaneldesktopScreenSaveTimeOut,定时间为60,则系统只要闲置一分钟该文件就会被启动!
另外一个简单的破坏方式就是可以随机产生屏幕保护密码并写入相应文件的相应位置,定时间为1分钟,则系统只要闲置一分钟则会被被锁!(由于涉及问题并非自启动问题,所以不加以讨论。)
注意:由于SCANSAVE.EXE=这里还会定义.scr文件的路径,所以最好不要把要启动的文件放置在.scr文件较多的一些目录,否则容易引起怀疑。(Windows目录除外) (三).依附启动:
这类启动方式已经有几分类似病毒了。这种方法是利用病毒的传染机制把要启动的EXE文件附着在另外的一个和多个EXE文件上,从而达到启动这个EXE文件就可以启动要启动的文件的目的。记得1999年YAI这个木马流行的时候,它就使用了依附一个EXE文件而达到启动的目的,但是由于BUGS和方式问题该木马的破坏作用却体现在了它“病毒”的一面。
使用这种启动方法一定要注意不能破坏EXE文件(否则会很容易被发现),而且最好把木马定位在固定的一个或者几个EXE文件上。如:IEXPLORE.EXE(IE的EXE文件),RNAPP.EXE(拨号网络的EXE文件)等等。
注意:这种方法的使用比较危险,技术上也需要相当功底,而且和病毒的距离很近,慎用。
(四).计划任务启动方式:
Windows的计划任务是Windows的一个预置实现某些操作而使用的一个功能。但是如果利用这个功能也是能够实现自启动的目的的!由于很多电脑都会自动加载“计划任务”所以隐蔽性相对不错。
在Windows默认的情况下,计划任务是一个个保存在C:WindowsTasks目录下的.job文件。.job文件里包括了启动方式、文件路径等一系列的信息。编制出或者使软件自己可以写出.job文件,则是关键。之后在相关地方写入标记启动即可。
由于时间关系,这个方法没有来得及试验,读者可以自己试验一下。
(五).AutoRun.inf启动方式:
Autorun.inf这个标识也许大家都见过。是的,这个最常出现在光盘中,用于光盘自启动。每次把光盘放入光驱中的时候,系统会通过这个文件来决定是否自动启动光盘。但是有没有想过,这个文件也可以用来自启动一些文件!
Autorun.inf的内容通常是:
[AUTORUN]
OPEN=file.exe
ICON=icon.ico
OPEN中是插入光盘或者双击光盘盘符就会运行的可执行文件的名称。
ICON中是该光驱驱动器的图标文件。该文件可以是其他文件。如:
[AUTORUN]
OPEN=file.exe
ICON=icon.exe,2
其中icon.exe是一个有图标文件的可执行文件,“,2”则是该文件中的第3个图标。(“,0”是第一个图标,无数字则默认为第一个图标)。
最关键的是该Autorun.inf文件是可以被用在硬盘的驱动器上的。也就是说,如果把光盘上的所有文件及目录原封不动的复制到某一硬盘的根目录下,则双击盘符会出现自动运行文件!
如果是木马的话,打一个比方:一个木马如果执行后被命名为aaa.exe放置在C:Windows目录下。那么该木马可以生成一个autorun.inf
文件于C:下,内容如下: [AUTORUN]
OPEN=Windowsaaa.exe
ICON=aaa.exe
这样的话,盘符图标为aaa.exe的第一个图标文件。则在每次双击C盘的时候都会执行aaa.exe文件了。但要注意的是,aaa.exe文件
最好能够打开C盘目录。(比较容易伪装)
注意:
(1).autorun.inf的属性被改为隐藏后仍可以正常使用。
(2).autorun.inf中的路径对相对路径和绝对路径都是可以实现的。也就是说,如果autorun.inf被放在1盘符下,也可以2盘符上的文件!如:
如果把autorun.inf文件放在C盘根目录下,内容为
[AUTORUN]
OPEN=D:CCCbbb.exe
ICON=bbb.exe
则这时如果双击C盘则可以执行D盘CCC目录上的bbb.exe文件!
(3).如果没有OPEN项目,则系统不执行任何文件,而去执行下一个命令。
(4).如果没有ICON项目,则该盘符的图标为原Windows盘符图标,但如果有ICON项却设置错误,或者所设置的文件没有图标,则系统会显示为默认的空白图标。
(5).自动启动相关:
a.代启动:
这种启动方式其实只是一个方法的问题。即可以用启动一个正常文件来启动另一个文件,SubSeven就用过启动Windos.exe从而启动SubSeven的Sever文件的方法。
b.Start启动:
在“运行“中或“MS-DOS”方式中输入start回车,则会显示
Runs a Windows program or an MS-DOS program.
START [options] program [arg...]
START [options] document.ext
/m[inimized] Run the new program minimized (in the background).
/max[imized] Run the new program maximized (in the foreground).
/r[estored]Run the new program restored (in the foreground). [default]
/w[ait]Does not return until the other program exits.
如果要启动的程序配合这个命令,则可以更加隐蔽,如:
start/m file.exe
但似乎有些有启动画面的软件(如金山词霸)对这条命令并没有反映。
c.控制面板启动:
这是利用控制面板程序可以被类似DLL执行,从而达到启动目的。
在控制面板中,.cpl文件是控制面板的原文件。默认的这些文件都会被放置在/%WINDOWS%/SYSTEM/目录下的,如desk.cpl是桌面属性、inetcpl.cpl是Internet选项之类。但这些.cpl文件全都是PE格式文件,也就是说如果用户把一个可执行的类似DLL的.cpl文件放入%Windows%System中,则在控制面板中可看到其图标,并可执行!
由于.cpl文件的特殊性,需要使用rundll32.exe来启动该文件。rundll32.exe是Windows用来调用动态连接库函数时所使用的文件,在运行中输入: rundll32 shell32.dll,Control_RunDLL /%path%/desk.cpl,,X
其中shell32.dll为被调用的DLL文件,意思为调用shell32.dll中的Control_RunDLL来打开desk.cpl文件;/%path%/为.cpl文件的路径,默认为C:WindowsSystem;最后的X为desk.cpl文件的页数:从0开始,0为第一页(如“显示属性”的“背景”),1为第二页(如“桌面属性”的“屏幕保护程序”),依此类推。
但如果照上面的方法做,则该文件会在控制面板中被显示。有两种方法可以不让其显示:
(1).不要把自己的.cpl文件放在C:WINDOWSSYSTEM中。因为默认的情况下Windows会加载的所有.cpl文件。如果想让其显示则打开C:WINDOWS下的Control.ini文件,在[MMCPL]中写入类似:
file.cpl=D:pathfile.cpl
的命令,从而达到显示的目的。
(2).当你看到Control.ini文件的时候一定可以看到在[MMCPL]上面的[don‘t load]。是的,如果把你的文件以file.cpl=no的格式写入到这里面,那么文件就不被加载了。反之恢复。
d.其他:
注册表中:
HKEY_USERS.DEFAULTSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced
的“HideFileExt”这个键值是确定Windows是不是显示扩展名的值,如果其值为1就隐藏扩展名,为0则不隐藏。
EXE文件中:
如SirCam蠕虫一样,*.EXE文件的扩展名可以改名称为.BAT、.COM、.PIF、.SCR等,并且运行效果一样,反过来不一定。但.EXE文件并不能更名为.LNK文件,这也许也是SirCam的一个BUG。
最后:
Windows的自启动方式有很多样式。这是Windows系统的一部分。一个隐蔽而又很少有人知道的自启动方式是远程监控软件成为一个优秀的软件的必要的条件。对于普通用户来说,了解这些信息也是非常必要的。笔者试图全面的介绍这些可以启动的方法和想法。文中提到的一些自启动方法有的很普通,有的则很少有人知道,有些方式甚至有可能是第一次被写出来。其中的许多方式笔者加入了自己的想法,使一些方式虽然普通但却很隐蔽。
其中所提的自启动方式全部在Windows98或提到的相应的系统中默认测试通过。对Windows ME和Windows2000只有部分适用。通过对不同平台的自启动方式测试,也可以发现Windows系统还是朝着越来越完善的方向发展。所以在未来的某个WINDOWS版本中,笔者不能保证这些能被使用。但总会有一些可以利用的地方。如果这篇涂鸦能给各位读者带来一些启发,那么笔者将会感到非常高兴!
由于时间仓促再加上笔者所学有限,文中错误之处一定不少,望读者海涵。
关于Windows的自启动方式的探讨可以与我联系,我的E-mail是snaix@yeah.net。
本文转载请注明作者及出处。若用于商业,请与作者联系。
主要参考资料:
http://www.tlsecurity.net/auto.html
http://support.microsoft.com/support/kb/articles/Q232/5/09.ASP
Syntax for the RunOnceEx Registry Key
SUMMARY
MORE INFORMATION
RunOnceEx Sample to Run Notepad
Sample Syntax
Notes
Definition of Values and Subkeys
Wininit.ini与病毒(名称为笔者所加)
http://www.microsoft.com/technet/security/bulletin/fq00-052.asp