Автозапуск программ в Windows

Автозапуск программ в Windows В Компьютерной газете в № 10 (200) за 16 марта 1999 года я дебютировал со статьей "Взлом Windows через реестр". В статье речь шла о местах в системном реестре, в файлах инициализации, где можно прописать программу для автоматического запуска при загрузке Windows. С тех пор было выпущено несколько новых версий Windows, у новых версий появились свои особенности, да и объем моих знаний вырос. Пришло время восполнить недостающие пробелы.

Утилита системной конфигурации MSConfig.exe

Начиная с Windows версии 98, Microsoft поставляет утилиту "MSConfig.exe", предоставляющую удобный интерфейс для управления файлами, запускающимися при загрузке Windows. Она находится в каталоге установки Windows. Ее можно запустить из диалогового окна "Выполнить". В ней нет возможности добавлять новый элемент с именем приложения или документа для автозапуска, но можно отключать, не удаляя, любой пункт из находящихся в списках. Есть еще одна интересная возможность — проверка правильности пути, соответствующего элементу автозапуска, и удаление из списков элементов, пути к которым не верны. Возможности этого приложение достаточно убогие и годятся для пользователей системы, но никак не для администраторов. Далее в статье я, по необходимости, буду ссылаться на эту утилиту.

Автозапуск из файлов инициализации
Изложение мест автозапуска будет вестись в хронологическом порядке, начиная с первых версий Windows и устаревших технологий. Файлы инициализации достались в наследство от 16-битных версий Windows 3.x. Microsoft несколько раз декларировала, что она избавляется от устаревших файлов, но на самом деле они до сих пор обрабатываются при запуске.
В файле "Win.ini" в разделе "[windows]" есть два параметра, которые могут служить местом для автозапуска. Первый параметр это "load", второй — это "run". Содержимое по умолчанию для них — это пустая строка. Имена файлов в них не должны содержать пробелов, указание полного имени файла в двойных кавычках не допускается. В них можно перечислить несколько имен файлов через запятую. Обычно они используются для загрузки драйверов, но могут загружать "троянских коней" или "клавиатурных шпионов".
Еще один файл инициализации, который может быть использован для автоматического запуска программ, — это файл "System.ini". В этом файле в разделе "[boot]" есть параметр "shell", который хранит имя оболочки Windows. Значение по умолчанию этого параметра — "Explorer.exe". Значение "shell" может содержать список приложений для автоматического запуска как параметры командной строки "Explorer.exe". Приложение "Explorer.exe" обрабатывает командную строку и пытается запускать приложения или документы, перечисленные в командной строке. Требования к формату параметра "shell" такие же, как и у вышеупомянутых параметров файла "Win.ini". В последнее время этот параметр начал широко использоваться для запуска сетевых червей. Это делает локализацию трудно обнаруживаемой, т.к. администраторы забывают просматривать этот параметр как место для запуска деструктивных приложений.
Утилита "MSConfig.exe" позволяет просматривать состояние и редактировать содержимое этих трех параметров: "load", "run", "shell", находящихся в файлах инициализации.

Папки автозапуска
Первая папка, которая отрабатывается после завершения загрузки Windows, — это папка "Автозагрузка", которая может хранить список ярлыков (*.lnk) приложений или документов. Ее состояние можно увидеть, выйдя из меню "Пуск" в подменю "Программы". Это — папка, относящаяся к "Текущему пользователю".
Чтобы найти ее размещение, сначала надо найти в системном реестре ключ "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", хранящий размещение всех измененных папок, и отыскать там параметр "Startup" строкового типа. Если искомый параметр отсутствует, то ее размещение по умолчанию на жестком диске прописано в системном реестре в параметре "Startup" ключа "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders".
Ярлыки к приложениям, находящимся в папке "Автозагрузка", отображаются в программе для настройки системы "MSConfig.exe". Если отключить автоматический запуск какого-нибудь элемента через "MSConfig.exe", то в папке "Программы" (она же и подменю в меню "Пуск") будет создана папка с названием "Отключенные элементы запуска", куда "MSConfig.exe" и переместит отключенный элемент. Для того чтобы временно исключить ярлык из автоматической загрузки, я прибегаю к более простому способу: у необходимого ярлыка я выставлю атрибут "скрытый" и при следующей загрузке он пропускается.
Следующая папка — это "Общая" для всех пользователей папка "Автозагрузки" (Common Startup Folder), которая также отрабатывается после загрузки Windows в поисках ярлыков с документами или приложениями. Увидеть ее в подменю "Пуск" можно в Windows NT или 2000. В Windows 9.x, ME ее содержимое не отображается. Она должна хранить ярлыки общие для профилей всех пользователей. В документации Microsoft (MSDN) сказано, что эта папка создавалась для Windows. Однако ее содержимое отрабатывается, даже если Windows 95, 98, ME работают в однопользовательском режиме.
В системном реестре ее размещение на жестком диске прописано в строковом параметре "Common Startup" ключа "HKEY_LOCAL_MACHINE\SOFTWARE\Micro-soft\Windows\CurrentVersion\Explorer\Shell Folders", который хранит измененные пути папок. При отсутствии этого параметра следует посмотреть размещение этой папки по умолчанию в параметре "Common Startup" ключа "HKEY_LOCAL_MA-CHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders".
Список исполнимых файлов, находящихся в "Общей" (для профилей всех пользователей) папке "Автозагрузка" также показываются "MSConfig.exe". Если отключить автоматический запуск какого-нибудь элемента через "MSConfig.exe", то в той же папке, где находится папка "Общего запуска", будет создана папка с названием "Отключенные элементы запуска", куда утилитой "MSConfig.exe" будут перемещены отключенные элементы запуска.
Администраторам следует обращать внимание на содержимое этой папки как место для возможного запуска приложений.

Системный реестр: автозапуск, общий для всех версий Windows
В системном реестре Windows есть ветвь "SOFTWARE\Microsoft\Windows\CurrentVersion", содержащая несколько групп для автоматического запуска приложений. Все эти группы могут быть как в разделе HKEY_LOCAL_MACHINE, так и в разделе HKEY_CURRENT_USER. Изложение будет общим, и все может быть экстраполировано на оба этих раздела. Если Windows используется как многопользовательская среда, другими словами, это либо Windows версий NT/2000/XP, либо 95, 98, ME с задействованными профилями пользователей, то группы запуска следует искать также в разделе "HKEY_USERS\.Default". Это раздел общий для всех пользователей системы. Если Windows 95, 98, ME работают в однопользовательском режиме, то раздел "HKEY_USERS\.Default" идентичен разделу HKEY_CURRENT_USER.
Итак, я приведу полные пути к ключам: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "SOFTWARE\Microsoft\ Windows\CurrentVersion\RunOnce", "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx", "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup", "SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices", "SOFTWARE\Microsoft\ Windows\CurrentVersion\RunServicesOnce", которые могут содержать строковые параметры, с именами приложений или документов запускающиеся при старте системы. Раздел реестра "RunOnce" не поддерживается в Windows NT 3.5. Имена строковых параметров, содержащихся в этих ключах, могут быть произвольными.
Далее я приведу несколько правил, ориентируясь на которые можно лучше понять процесс и очередность запуска приложений, прописанных в тех или иных местах автозапуска:
1. Ключи, содержащиеся в разделе HKEY_LOCAL_MACHINE, отрабатываются раньше соответствующих ключей, находящихся в разделе HKEY_CURRENT_USER.
2. Содержимое ключей системного реестра "RunServices", "RunServicesOnce" обрабатывается раньше параметров ключей "Run", "RunOnce".
3. Запуск "RunServices" и "RunServicesOnce" происходит до выдачи окна регистрации пользователя, далее идет асинхронно с диалогом регистрации и может продолжаться и после успешно проведенной регистрации. Приложения, прописанные в параметры системного реестра, содержащиеся в ключах "RunServices" и "RunServicesOnce", запускаются асинхронно, и поэтому может возникнуть ситуация, когда они будут работать одновременно.
4. Запуск приложений или документов, как это следует из самого названия, прописанных в ключах "RunOnce" и "RunServicesOnce", происходит один раз, независимо от того, был он успешным или нет. Параметр, находящийся в ключе "RunOnce" или "RunServicesOnce", удаляется до запуска приложения, имя которого он содержит.
5. Параметры, содержащиеся в ключах "Run", "RunOnce", запускаются синхронно и в неопределенном порядке, но после того, как закончило загрузку содержимое "RunServices" и "RunServicesOnce".
Ключи системного реестра обрабатываются в следующем порядке. Первыми отрабатывается содержимое "RunServices" и "RunServicesOnce" раздела HKEY_LOCAL_MACHINE. Далее выдается окно регистрации пользователя в системе. После этого операционная система переходит к обработке ключей "RunOnce" и "Run" раздела HKEY_LO-CAL_MACHINE, далее "Run" раздела HKEY_CURRENT_USER. Следующими запускаются элементы, содержащиеся в папке "Автозагрузка". После этого наступает очередь параметров ключа "RunOnce" раздела HKEY_CURRENT_USER.
Списками параметров, автоматически запускающих приложения при старте Windows, находящихся в ключах "RunServices" и "Run", можно управлять с помощью приложения для настройки системы "MSConfig.exe". Если отключить какой-либо элемент из списка, то "MSConfig.exe" переместит этот элемента в ключ "RunServices-" или "Run-" соответственно.
Следует обратить внимание на ключ "Setup", который может содержаться в ключе "RunOnce" как в разделе HKEY_LOCAL_MACHINE, так и в разделе HKEY_CURRENT_USER. Этот ключ используется как мастером установки Windows, так и мастером "установки — удаления" программ. При отработке параметров, содержащихся в этом ключе, отображается диалоговое окно с индикатором прогресса. Имя параметра используется как имя пункта в диалоговом окне. Аналогично содержимому ключа "RunOnce", пункты ключа "RunOnce\Setup" удаляются и запускаются один раз.
Еще один ключ системного реестра, на который следует обратить внимание, — это "RunOnceEx". Приведу отличия запуска параметров, находящихся в "RunOnceEx" от запуска параметров, содержащихся в ключах системного реестра "RunOnce" и "Run".
Параметры, находящиеся в ключе "RunOnceEx", запускаться не будут. Для автоматической отработки необходимо создать в нем ключ реестра, и уже в нем должны быть параметрами с именами приложений. Ключи и параметры, находящиеся в ключе "RunOnceEx", сортируются в алфавитном порядке для того, чтобы принудительно придать им строго определенный порядок запуска. Другими словами, элемент, находящийся выше по алфавиту, будет запущен раньше, независимо от того, когда он был добавлен в ключ "RunOnceEx". Приложения или файлы сценариев должны или сами себя завершать, или не требовать отдельного вмешательства для завершения, пока не завершится один элемент запуска или остановится дальнейшая отработка списка, или загрузка Windows остановится в ожидании принудительного завершения запущенного приложения. Для приложений, запущенных из ключа "RunOnceEx", в отличие от ключей "RunOnce" и "Run", отдельные процессы не создаются.
Содержимое ключей "RunOnce", "RunOnceEx", "RunOnce\Setup" и "RunServicesOnce" приложением настройки системы "MSConfig.exe" не отображается.

Особенности автозапуска в Windows NT/2000/XP
В добавление к вышеперечисленным ключам, для Windows версий NT, 2000 и XP специфичен еще один ключ системного реестра — "Software\Microsoft\Windows NT\CurrentVersion\Windows\Run", который может находиться в разделах LO-CAL_MACHINE или HKEY_CURRENT_USER.
В ключе "Software\Microsoft\Windows NT\CurrentVersion\Windows" могут находиться два строковых параметра "Load" и "Run", которые могут хранить списки приложений для автоматического запуска.
Эти параметры аналогичны одноименным параметрам из файла инициализации "Win.ini". При установке Windows NT (2000) поверх Windows 95, 98 значения параметров из "Win.ini" раздела "[windows]" переносятся в соответствующие параметры ключа "Software\ Microsoft\Windows NT\CurrentVersion\Windows". Если в параметре указывается несколько файлов, то имена должны быть разделены пробелами. Поэтому в них невозможно прописать путь к файлу, содержащим пробелы, — двойные кавычки не принимаются. "Значение по умолчанию" для этих параметров — пробел. Программы, запущенные из параметра "Load", минимизируются при запуске.

Особенности автозапуска в Windows ME/2000/XP
У Windows версий ME, 2000 и XP появляется еще один список автозагрузки программ или документов, запускающихся после регистрации пользователя в системе, который может размещаться как в разделе HKEY_LOCAL_MACHINE, так и в разделе HKEY_CURRENT_USER. Он размещается в строковых параметрах ключа "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run". Имена параметров для этого ключа имеют особенность: они должны быть представлены в виде порядковых номеров, начиная с "1". Список, находящийся в разделе HKEY_LOCAL_MACHINE, будет отработан раньше списка раздела HKEY_CURRENT_USER.

Автозапуск при отработке Windows Logon
Отдельная группа Windows Logon для управления инициализацией при регистрации пользователя появляется в Windows NT и далее развивается Microsoft для Windows версий 2000 и XP. Параметры Winlogon находятся в системном реестре в ключе "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" раздела HKEY_LOCAL_MACHINE. Все описываемые в статье параметры, относящиеся к Winlogon, имеют строковый тип.

Параметр Shell

Параметр "Shell", отвечающий за программную оболочку, присутствует в ветви реестра "Winlogon" в версиях Windows NT, 2000 и XP.
Этот строковый параметр определяет список исполнимых файлов, обеспечивающих для операционной системы интерфейс пользователя и которые должны быть запущены вместе с программной оболочкой.
По умолчанию Windows запускает программы, перечисленные в параметре "Userinit", расположенном в ветви "Winlogon", включая и сам "Userinit.exe". Если же по какой-то причине "Winlogon" процесс не смог запустить программы, определенные в параметре "Userinit", тогда "Winlogon" переходит непосредственно к обработке исполнимых файлов, имена которых записаны в параметре "Shell".
Значение по умолчанию параметра "Shell" может варьироваться. Это — "taskman, progman, wowexec" для Windows NT и "Explorer.exe" для Windows 2000, XP.

Параметр System
Этот параметр присутствует в Windows версий NT, 2000 и XP. Он содержит список имен исполнимых файлов, запускаемых Winlogon в системном контексте во время инициализации системы. Этот список можно варьировать, редактируя значение этого параметра.
Значение по умолчанию этого параметра — "lsass.exe, spoolss.exe" для Windows NT, и "lsass.exe" для Windows 2000, XP. Интересно замечание Microsoft, приведенное в MSDN: "Этот параметр появляется, но не используется самой Windows 2000".

Параметр VmApplet
Параметр "VmApplet", запускающий приложение "Панели управления" для настройки конфигурации системы, специфичен для Windows версий 2000 и XP.
Он содержит список или один исполнимый файл, которые Winlogon-процесс запускает для того, чтобы пользователь мог скорректировать настройки виртуальной памяти, если на системном томе отсутствует страничный файл подкачки. В этом параметре не обязательно указывать расширения для имен файлов.
Значение по умолчанию этого параметра — "rundll32 shell32, Control_RunDLL "sysdm.cpl"". Не стоит без нужды и изменять значение этого параметра, потому что это может привести к изменению настроек виртуальной памяти в Windows 2000, XP.

Параметр Userinit
"Userinit" (инициализация пользователя) специфичен для версий Windows NT, 2000 и XP.
Значение этого параметра содержит исполнимые файлы, которые запускаются процессом WinLogon в контексте пользователя, при регистрации пользователя в системе.
По умолчанию Winlogon запускает "Userinit.exe", который ответственен за запуск программной оболочки и исполняет файлы сценариев для регистрации, переустанавливает сетевые соединения и затем запускает "Explorer.exe".
Значение по умолчанию параметра "Userinit": "userinit, nddeagnt.exe" для Windows NT, "userinit" для Windows 2000, XP. Приложение "nddeagnt.exe" необходимо для запуска NetDDE — сетевого динамического обмена данными.
Расширения в именах файлов, перечисленных в этом параметре, не обязательны.
Значение этого параметра можно изменять, добавляя или убирая программы из списка.
Если необходимо запустить приложение до загрузки интерфейса пользователя вместе с "проводником" Windows, то для этого можно заменить "Userinit.exe" на имя своей программы, не забыв включить в приложение код для запуска "Userinit.exe", или поступить еще проще, создав исполнимый файл для пакетной обработки с именем "userinit.bat", со списком программ для запуска и в одной из строк прописать собственно "Userinit.exe".

P.S. Информация, систематизированная в этой статье, была адресована в первую очередь администраторам Windows-систем, а не хакерам. Все сведения, приведенные в статье, содержатся в том или ином виде в официальной документации Microsoft.

Valient Newman aka Black Prince
www.geocities.com/werebad/



Компьютерная газета. Статья была опубликована в номере 29 за 2002 год в рубрике soft :: ос

©1997-2024 Компьютерная газета