Bu1'Blog

如果能控制粗鄙的狂喜,就不会有深入骨髓的悲伤。

0%

Windows基础(三):注册表与自启动

本文简要介绍了Windows的注册表以及自启动管理。

注册表

注册表是控制计算机硬件和软件的一整套数据。如果对注册表熟练了解,完全可以通过注册表来控制计算机。对于普通用户来说,很难完全了解和彻底掌握注册表,我们只需对重要的注册表键进行控制即可:如自启动,系统设置,IE键,winlogon,文件关联,网络设置,高危键(映像劫持,安全模式,禁用注册表及硬盘等)。这些比较重要的键值经常被病毒进行利用。

Windows注册表是帮助Windows控制硬件、软件、用户环境和 Windows界面的一套数据文件,注册表包含在Windows目录下两个文件system.dat和user.dat里,还有它们的备份 system.da0和user.da0。通过Windows目录下的regedit.exe程序可以存取注册表数据库。在以前,在windows的更早版本(在Win95以前),这些功能是靠win.ini,system.ini和其他和应用程序有关联的.ini文件来实现的.

WINDOWS的注册表有五大根键,相当于一个硬盘被分成了五个分区。

根键名 简要说明
HKEY_CLASSES_ROOT 该主根键是从HKEY_LOCAL_MACHINE\software\classes映射复制的。它包含启动应用程序所需的全部信息,包括扩展名,应用程序与文档之间的关系,驱动程序名,DDEOLE信息,类ID编号和应用程序与文档的图标等。
HKEY_CURRENT_USER 该主根键包含本地工作站中存放的当前登录的用户信息:包括用户登录用户名和暂存的密码以及环境变量,桌面设置等配置信息。用户登录操作系统时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。
HKEY_LOCAL_MACHINE 该主根键存放本地计算机硬件数据与软件数据,此根键下的子关键字包括在SYSTEM.DAT中,用来提供HKEY_LOCAL_MACHINE所需的信息。该根键中的许多子键与System.ini文件中设置项类似。
HKEY_USERS 该主根键保存了存放在本地计算机口令列表中的所有用户标识和密码列表。每个用户的预配置信息都存储在HKEY_USERS根键中。HKEY_USERS是远程计算机中访问的根键之一。
HKEY_CURRENT_CONFIG 该主根键存放着定义当前用户桌面配置(如显示器等)的数据,最后使用的文档列表(MRU)和其他有关当前用户的操作系统中文版的安装的信息。

注册表数据的主要五种类型是

名称 类型说明
REG_SZ 字符串类型,文本字符串
REG_BINARY 二进制类型,不定长度的二进制值,以16进制形式显示
REG_DWORD 双字,32 位的二进制值,显示为 8 位的十六进制值
REG_MULTI_SZ 多字符串,有多个文本值的字符串,字符串间用 nul 分隔、结尾两个 nul
REG_EXPAND_SZ 可扩展字符串,包含环境变量的字符串

主要的时间格式:

  • FILETIME:64位值,代表间隔多少个单位为100纳秒的时间(从UTC1601年1月1日开始)
  • Unix Time:32位值,代表间隔多少秒(从UTC1970年1月1日开始)。
  • DOS Date/Time:两个16位值,详细记录了当地时间和年月日。

注册表的存储:

注册表在Windows NT操作系统中被分为多个文件存储,这些文件被称为Registry Hives,每一个文件被称为一个配置单元。定位到C:\Windows\System32\config可以看到这些文件。

image-20211022104321690

主要的配置单元有:

  • SYSTEM:对应的注册表分支为HKEY_LOCAL_MACHINE\SYSTEM,对应的存储文件是\Windows\System32\config\SYSTEM,其作用是存储计算机硬件和系统的信息。
  • NTUSER.DAT:对应的注册表分支是HKEY_CURRENT_USER,存储在用户目录下,与其他注册表文件是分开的,主要用于存储用户的配置信息。
  • SAM:分支是HKEY_LOCAL_MACHINE\SAM,存储在C:\Windows\System32\config\SAM文件中,保存了用户的密码信息。
  • SECURITY:对应的分支HKEY_LOCAL_MACHINE\SECURITY,存储在C:\Windows\System32\config\SECURITY文件中,保存了安全性设置信息。
  • SOFTWARE:分支是HKEY_LOCAL_MACHINE\SOFTWARE,文件存储在C:\Windows\System32\config\SOFTWARE中,保存安装软件的信息。

为了防止注册表出错和损坏,Registry hives还包括注册的事务日志文件和注册表的备份文件。事务日志文件名与注册表文件一致,且在同一个路径中,只是后缀不同。事务日志文件以.LOG为后缀,多个日志后缀会显示LOG1LOG2这样。(如果要查看这些日志文件,需要打开文件夹选项,取消勾选“隐藏受保护的操作系统文件”)

自启动

  1. 用户自启动路径

    1
    %HOMEPATH%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  2. 系统自启动路径

    1
    %programdata%\Microsoft\Windows\Start Menu\Programs\Startup #也可%AllUsersProfile%
  3. 系统配置文件WIN.INI启动(实际测试无效

    1
    2
    3
    [windows] 
    load=xxx.exe[这种方法文件会在后台运行]
    run=xxx.exe[这种方法文件会在默认状态下被运行]
  4. 系统配置文件SYSTEM.INI启动(实际测试无效

    1
    2
    [boot] 
    Shell=Explorer.exe xxx.exe
  5. 注册表启动

    自启动文件对应的注册表路径

    1
    2
    3
    4
    5
    6
    %HOMEPATH%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    对应的注册表位置:
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders]
    Startup=\”%Directory%\”
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User ShellFolders] Startup=\”%Directory%\”
    其中“%Directory%”为启动文件夹位置。

    RunServicesOnce注册键

    1
    2
    3
    4
    5
    RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。

    RunServicesOnce注册键的位置是:(实测不一定都有)
    HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\RunServicesOnce,
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。

    RunServices注册键

    1
    2
    3
    4
    5
    RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。

    RunServices的位置是:(实测不一定都有)
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\RunServices

    RunOnce注册键

    1
    2
    3
    4
    5
    6
    7
    安装程序通常用RunOnce键自动运行程序。

    它的位置在:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。

    ps:HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。

    Run键

    1
    2
    3
    4
    5
    6
    7
    Run是自动运行程序最常用的注册键。

    它的位置在:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。

    ps:HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前。

    其他键(未测试,仅供参考

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ 
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
    HKEY_LOCAL_MACHINE\System\ControlSet001\Session Manager\BootExecute
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\BootExecute
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\本地
    User\Software\Microsoft\Windows\CurrentVersion\Policies\ Explorer\Run
    HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\
    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce\
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup\
    HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Run\
    HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\RunOnce\
    HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\
    HKEY_CURRENT_USER\Control Panel\Desktop
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\run
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad\
    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run\
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run\
    HKLM\SOFTWARE\Classes\Protocols\Filter
    HKLM\SOFTWARE\Classes\Protocols\Handler
    HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
    HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
    HKLM\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved
    HKLM\Software\Classes\Folder\Shellex\ColumnHandlers
    HKCU\Software\Microsoft\Internet Explorer\UrlSearchHooks
    HKLM\Software\Microsoft\Internet Explorer\Toolbar
    HKLM\Software\Microsoft\Internet Explorer\Extensions
    HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute
    HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
    HKLM\System\CurrentControlSet\Control\Session Manager\KnownDlls
    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UIHost
    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
    HKCU\Control Panel\Desktop\Scrnsave.exe
    HKLM\System\CurrentControlSet\Services\WinSock\Parameters\Protocol_Catalog9
    HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors
    HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Authentication Packages
    HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Notification Packages
    HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages
  6. Autorun.inf的使用(微软已废除,仅做了解

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Autorun.inf的内容通常是: 
    [AUTORUN]
    OPEN=文件名.exe
    ICON=icon(图标文件).ico
    1.如一个木马,为xxx.exe.那么Autorun.inf则可以如下:
    OPEN=Windows\xxx.exe
    ICON=xxx.exe
    这时,每次双击C盘的时候就可以运行木马xxx.exe.
    2.如把 Autorun.inf放入C盘根目录里,则里面内容为:
    OPEN=D:\xxx.exe
    ICON=xxx.exe
    这时, 双击C盘则可以运行
    D盘的xxx.exe
  7. 通过注册服务来自启动

    1
    2
    3
    4
    5
    sc create 名字 binpath=需要执行的文件 type=own start=auto displayname=名字

    sc start 名字
    sc stop 名字
    sc delete 名字

    如果你的exe不符合服务的规范,启动有可能会失败。可以采用instsrv+srvany这两个工具配合使用,可以将任何的exe应用程序作为window服务运行。