2.系统配置文件启动:
由于系统的配置文件对于大多数的用户来说都是相当陌生的;这就造成了这些启动方法相对来说都是相当隐蔽的,所以这里提到的一些方法常常会被用于做一些破坏性的操作,请读者注意。
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:\WINDOWS\TEMP\PROC.BAT call C:\WINDOWS\TEMP\PROC.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有一定的了解。.
3.注册表启动:
注册表中的启动应该是被使用最频繁的启动方式,但这样的方式也有一些隐蔽性较高的方法,大致有三种。
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.如果需要运行.dll文件,则需要特殊的命令行。
如:
Rundll32.exe C:\WINDOWS\FILE.DLL,Rundll32
2.解除这里相应的自启动项只需删除该键值即可,但注意不要删除如SystemTray、ScanRegistry等这样的系统键值。
3.如果只想不启动而保留键值,只需在该键值加入rem即可。如:
“rem C:\Windows\a.exe”
4.在注册表中的自启动项中没有这项:
[HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\RunServices]
5.Run和RunServices的区别在于:Run中的程序是在每次系统启动时被启动,RunServices则是会在每次登录系统时被启动。
关于:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx]
有特殊的语法:
例如,运行notepad.exe
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
"Title"="My Setup Title"
"Flag"=dword:00000002
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001
"RunMyApp"="||notepad.exe"
语法为:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
Flags = 0x0000000
Title = "Status Dialog Box Title"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\Depend
0001 = "xxx1"
000X = "xxxx"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001
Entry1 = "MyApp1.exe"
EntryX = "MyApp2.exe"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\000x
...
注意:
1.“xxx1,xxxx”是一个动态链接库(DLL)或.OCX文件名(如My.ocx或My.dll)。
2.“0001,000x”是部分名字。可以是数字和文字。
3.“entry1,entryX”是指向一个要运行的程序文件的注册表串值。
键值的说明:
Flags是一个定位在RunOnceEx键用来激活/禁止的DWORD值,具体如下:
值 功能 功能定义
0x00000000 默认 所有功能被禁止
0x00000004 检查壳状况 打开壳的读写校验准备接受OLE命令
0x00000008 无报错对话 错误对话框不显示
0x00000010 创建错误报告文件 创建 C:\Windows\RunOnceEx.err 文件如果有错误出现
0x00000020 创建执行报告文件 创建一个有命令状态的C:\Windows\RunOnceEx.log文件
0x00000040 无例外限制 当注册DLL时不限制例外
0x00000080 无状态对话 当RunOnceEx运行时状态对话框不显示
由于涉及篇幅较多,具体做法请浏览微软网页:
http://support.microsoft.com/support/kb/articles/Q232/5/09.ASP
2.特殊启动1:
在注册表中除了上述的普通的启动方式以外,还可以利用一些特殊的方式达到启动的目的:
[HKEY_CLASSES_ROOT\exefile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\comfile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\batfile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\htafile\shell\open\command] @="%1" %*
[HKEY_CLASSES_ROOT\piffile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\open\command] @="%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\shell\open\command] @= "%1" %*
[HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\open\command] @="%1" %*
其实从注册表的路径上也许就隐约可以看出,这些都是一些经常被执行的可执行文件的键值。往往有些木马是可以更改这些键值从而达到加载的目的:
如果我把“”%1”%*”改为“file.exe”%1”%*”则文件file.exe就会在每次执行某一个类型的文件(要看改的是哪一个文件类型)的时候被执行!
当然,可以被更改的不一定只是可执行文件,譬如冰河就利用了TXT文件的键值:
[HKEY_CLASSES_ROOT\txtfile\shell\open\command]实现木马的一种启动方式。
3.特殊启动2:
在注册表中:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\
的位置上有这样的地址。该地址是系统启动VxD驱动文件放置的地址,就像PrettyPark这个蠕虫一样,可以建立一个主键之后把VxD文件添加到注册表中在这里。
注意:不可以直接把一个EXE文件改名为VxD文件,需要另外进行编程,生成的VxD文件。