zoukankan      html  css  js  c++  java
  • windows程序自启动的几种方法(三)系统配置文件

    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文件。
  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/bingxuefly/p/1086411.html
Copyright © 2011-2022 走看看