Стартап для Windows. Секретные приёмы автозагрузки

В своих статьях вы часто пишете про программы из автозагрузки Windows. Не могли бы вы поподробнее рассказать о том, каким образом осуществляется эта самая автозагрузка? Я пару раз сталкивался с ситуацией, когда никак не мог выявить, каким образом загружается та или иная программа или вирус — поиск в разделах RUN реестра не давал результата. Может, имеются ещё какие-то «секретные» приёмы автозагрузки? Такая информация многих спасла бы от FORMAT C:

Да, в Windows различных версий имеется несколько способов автоматического запуска определённой программы или открытия документа во время загрузки операционной системы. Это обусловлено разными причинами: требованиями совместимости с приложениями для DOS и для Windows 3.11, наличием в системе нескольких зарегистрированных пользователей с индивидуальными настройками, необходимостью разграничения пользовательских привилегий, необходимостью обеспечения определённого порядка запуска приложений при инсталляции программ и так далее. В последних версиях Windows, а конкретнее — в Windows 98, 98SE, Me и XP имеется довольно неплохая утилита для управления программами из автозагрузки — MSCONFIG.EXE. В более старых системах — Windows 95 и Windows 2000 тоже вполне допускается использовать эту программу, скопировав её, соответственно, из Windows 98 и Windows XP — реализации MSCONFIG для систем 9x и NT заметно различаются. Правда, вся прелесть этой программы заключается, пожалуй, только в том, что она уже есть в составе Windows, и что она предельно проста — практически не даёт пользователю возможности привести ОС в неработоспособное состояние.

На вкладке «Автозагрузка» («StartUp») утилиты MSCONFIG.EXE можно увидеть текущий список автоматически загружаемых программ и, сняв тот или иной флажок, отключить автозагрузку какой-либо из них. При этом, что немаловажно, отключённый элемент не удаляется из списка, и его можно в любой момент снова вернуть в автозагрузку. Отключаемый элемент списка лишь перемещается в необрабатываемый системой раздел реестра «RunServices-» или «Run-», либо в папку «Отключенные элементы автозапуска» меню «Пуск» в соответствии с тем, каким способом изначально проводилась его автозагрузка. Также на вкладке «Автозагрузка» программы MSCONFIG.EXE имеется кнопка «CleanUp», при нажатии на которую производится проверка путей к файлам автоматически загружаемых программ, и в случае, если обнаруживается неверный путь, ошибочная запись удаляется из списка. К сожалению, эта программа не только не позволяет добавить в автозагрузку какую-то новую программу, но и сам список автоматически загружаемых программ в ней может быть не полон. Дело в том, что она не учитывает некоторые довольно важные способы автозагрузки — в частности, содержимое подразделов реестра «RunOnce», «RunOnceEx», «RunOnce\Setup» и «RunServicesOnce» в этой программе не отображается. Чуть больше возможностей дают аналогичные утилиты от сторонних производителей, например, достаточно известная программа Starter [1], которая позволяет не только просмотреть почти все способы автозагрузки, но обладает ещё целым рядом полезных функций. Например, с помощью утилиты Starter вы легко отредактируете любую запись в реестре, относящуюся к автоматически загружаемым программам, удалите, временно отключите или добавите в автозагрузку любое новое приложение или документ. Также эта программа позволяет делать резервную копию автозагрузочных разделов реестра в виде текстового файла, документа HTML или стандартного REG-файла и, естественно, восстанавливать их из неё. Любую замеченную в автозагрузке программу можно запустить непосредственно из интерфейса Starter, просмотреть свойства исполнимого файла этой программы и открыть её папку на диске. Кроме того, с помощью Starter можно просмотреть и список запущенных процессов, задать любому из них нужный приоритет или принудительно выгрузить его из памяти. Словом, возможностей даже у далеко не идеального, на мой взгляд, Starter гораздо больше, чем у MSCONFIG (впрочем, MSCONFIG — более универсальная программа, призванная решать и другие задачи настройки системы), а пользоваться ей заметно удобнее, что, конечно, не исключает наличия и более продвинутых утилит мониторинга автозагрузки. Поэтому я советую при активной работе с автозагрузкой пользоваться именно такими, более мощными программами. Однако, в тех случаях, когда даже с их помощью не удаётся выявить способ загрузки какой-либо программы, или необходимо определить причину сбоя, следует вручную проконтролировать все возможные пути автоматической загрузки программ. Эти пути в Windows 9x и в Windows NT немного различаются.

Автозагрузка в Windows 9x

Самый первый способ автоматической загрузки программы в Windows 9x — использование рудиментарного файла AUTOEXEC.BAT. Разумеется, таким образом можно запустить только приложение для DOS или какой-то пакетный BAT-файл. В Windows Me обработка этого файла уже не производится, а потому в этой системе этот способ не работает. Сразу оговорюсь, что такие используемые вирусами способы автозагрузки как, например, внедрение чужеродного исполняемого кода в обычную программу (например, в COMMAND.COM, WIN.COM или даже в драйвер мыши) или подмена файла легитимной программы файлом вируса мы рассматривать не будем, оставив это на откуп антивирусным программам — в особо тяжёлых случаях можно просто снять жёсткий диск с проблемной машины и, подключив его к заведомо «чистому» в плане вирусов ПК, просканировать его с помощью парочки качественных антивирусных сканеров. Хотя, пожалуй, в контексте вирусологии стоит упомянуть о системном файле WININIT.EXE — эта программа тоже запускается в самой начальной стадии загрузки системы, в том случае, если в папке Windows присутствует файл WININIT.INI, инструкции из которого она и призвана выполнить. В принципе, возможна не только подмена самого файла WININIT.EXE файлом вируса, но и создание деструктивных инструкций в файле WININIT.INI, результатом которых окажется, например, полное удаление папки My Documents сразу после загрузки компьютера. Так что имейте это в виду.

Далее по ходу загрузки операционной системы автоматически исполняется ещё один недокументированный командный файл — WINSTART.BAT, если он имеется в директории Windows. Из него, так же как и из AUTOEXEC.BAT, можно загрузить некоторые резидентные DOS-программы или выполнить последовательность команд (в «Миллениуме» этот файл также не обрабатывается). Не забывайте ещё, что при перезагрузке системы Windows 95/98 в режим эмуляции MS-DOS (с помощью меню «Выключить компьютер») используется пакетный файл DOSSTART.BAT, в котором может быть задан запуск любой DOS-программы или любого другого BAT-файла.

Затем при загрузке операционной системы доходит очередь до обработки ещё одного конфигурационного файла — SYSTEM.INI. Напрямую с его помощью можно запустить только одну программу, а именно — оболочку Windows. Изначально такой оболочкой является Проводник EXPLORER.EXE, что вы и можете наблюдать, если посмотрите значение параметра SHELL в разделе [BOOT], однако ничто не мешает указать дополнительные программы как аргументы командной строки самого файла EXPLORER.EXE — Проводник сам при запуске загрузит эти программы или документы. Впрочем, вполне возможна и замена самой оболочки EXPLORER.EXE на любой другой файл, собственно, именно для этого и предназначен этот параметр. Кстати, если поместить в корневой каталог системного диска какой-либо файл с именем EXPLORER.EXE, то система запустит именно его, решив, что это и есть оболочка.

Далее в процессе загрузки Windows появляется ещё одна возможность запуска программ — доставшийся от Windows 3.11 файл WIN.INI содержит в разделе [windows] специальные параметры «load» и «run», которые могут использоваться для задания автозапуска (для обеспечения совместимости эти параметры по-прежнему обрабатываются даже самыми последними на сегодняшний день версиями ОС). По умолчанию значением этих параметров должна являться пустая строка.

Поскольку файлы SYSTEM.INI и WIN.INI — наследие Windows 3.11, то, если вы вдруг захотите использовать эти параметры, не забывайте, что указывать путь к исполнимому файлу (или имя файла) в их значении следует в стандарте MS-DOS, без пробелов и длинных имён. Если требуется поместить в автозагрузку сразу несколько программ, то допускается перечисление через запятую имён файлов этих программ. Поскольку этот путь загрузки обычными пользователями уже изрядно подзабыт, его нередко используют доморощенные создатели троянских вирусов.

Наконец, во время загрузки операционной системы начинает обрабатываться системный реестр, в котором существует целый ряд разделов, обеспечивающих загрузку приложений в определённом порядке и в контексте определённого пользователя. Подразделы реестра, отвечающие за автозапуск, носят следующие имена: Run, RunOnce, RunOnceEx, RunServices, RunServicesOnce. Располагаться они могут в следующих разделах реестра, в зависимости от того, в каком контексте производится автозапуск:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
HKEY_USERS\.DEFAULT\SOFTWARE\Microsoft\Windows\CurrentVersion\
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\

В том случае, если в Windows 9x зарегистрирован только один пользователь, то содержание раздела HKEY_USERS\.DEFAULT дублирует раздел HKEY_CURRENT_USER, в Windows 2000/XP содержимое этих двух корневых разделов не идентично. Полный путь к этим параметрам может выглядеть, например, таким образом:

HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Windows\CurrentVersion\Run

То есть, для того, чтобы просмотреть автозагрузку, в каждом из корневых разделов реестра следует открыть ветвь SOFTWARE\Microsoft\Windows\CurrentVersion и найти вышеперечисленные подразделы RUN* (можно, например, воспользоваться встроенным механизмом поиска редактора реестра). Каждый из этих подразделов может содержать довольно длинный перечень строковых параметров (порядок запуска приложений, расположенных в одном подразделе, обычно соответствует расположению по алфавиту имён этих параметров), значением которых являются пути к программам, которые и надо загрузить на старте Windows. Эти пути могут содержать длинные имена и пробелы.

Первыми при загрузке системы обрабатываются параметры RUN* из раздела HKEY_LOCAL_MACHINE, причём ключи «RunServices» и «RunServicesOnce» обрабатываются раньше, чем «Run» и «RunOnce». Программы из подразделов «RunServices» и «RunServicesOnce» запускаются ещё до входа пользователя в систему в так называемом асинхронном режиме, независимо от запуска других программ и от процесса регистрации пользователя в системе. Подразделы «RunServicesOnce» и «RunOnce» служат для однократного запуска программ, и их содержимое очищается непосредственно перед самой загрузкой программ, указанных в этих разделах (раздел реестра «RunOnce» не поддерживается в Windows NT 3.5).

Специальные разделы «RunOnceEx» отличаются от разделов «RunOnce» и «Run». Эти разделы несколько запутанным способом позволяют запускать программы в заранее определённом порядке, последовательно. Напрямую параметры, расположенные в разделе «RunOnceEx», не запускаются. Внутри раздела «RunOnceEx» для автоматически запускаемых с его помощью программ создаётся дополнительный подраздел, в котором уже и указываются параметры с именами приложений и путями к исполнимым файлам. При этом, подразделы внутри «RunOnceEx» обрабатываются системой в алфавитном порядке, что и позволяет задать порядок запуска приложений или групп приложений, что может быть крайне важно при инсталляции некоторых программ. При обработке такого списка программ система (формат записи этих параметров несколько отличается, например: "program"="||program.exe" или "print_test_page"="msprint2.dll|RUNDLL_PrintTestPage|") будет ожидать завершения работы каждого элемента списка и только после этого произведёт запуск следующего, стоящего в очереди.

Кроме того, в подразделе реестра «RunOnce» может содержаться специальный раздел «Setup», используемый при установке компонентов Windows либо некоторых прикладных программ. Параметры внутри этого раздела обрабатываются системой так же, как и обычные параметры раздела «RunOnce» — то есть происходит однократный запуск указанных в них программ, однако в ходе этого запуска отображается индикатор (в его диалоговом окне указано имя соответствующего параметра из раздела «Setup») с прогресс-баром, то есть показывается, на сколько процентов завершено копирование файлов устанавливаемой программы.

После обработки раздела HKEY_LOCAL_MACHINE приходит черёд аналогичной обработки общего для всех пользователей многопользовательских конфигураций раздела HKEY_USERS\.DEFAULT, а после регистрации пользователя в системе — раздела HKEY_CURRENT_USER.

В последних версиях Windows — Me, 2000 и XP появились новые разделы для автозагрузки программ:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

Особенность этих разделов заключается в том, что имена параметров, прописанных в них, должны быть представлены в виде порядковых номеров, начиная с единицы.

Также после регистрации пользователя в системе происходит запуск программ, ярлыки к которым помещены в папку «Автозагрузка» меню «Пуск». Следует учитывать, что для текущего пользователя реальное местоположение на диске этой папки с ярлыками может быть изменено с помощью программы типа TweakUI либо вручную путём изменения значения параметра «Startup» в разделе реестра

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

По умолчанию же ярлыки автозапуска текущего пользователя располагаются в папке \WINDOWS\Start Menu\Programs\StartUp для Windows 9x, либо \Documents and Settings\ИМЯ ПОЛЬЗОВАТЕЛЯ\Start Menu\Programs\Startup для Windows XP (путь этот также задан в реестре — параметр «Startup» раздела HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders).

Кроме этой папки ярлыки автоматически запускаемых программ могут располагаться и в папке, общей для всех пользователей многопользовательской конфигурации. В Windows XP это папка \Documents and Settings\All Users\Start Menu\Programs\Startup, а в Windows 9x — \WINDOWS\All Users\Start Menu\Programs\StartUp (путь к этой папке тоже может быть изменен в реестре — параметр «Common Startup» раздела HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders). Эти папки обрабатываются даже в однопользовательских конфигурациях, а параметры «Startup» и «Common Startup» в ряде случаев могут находиться и в других разделах реестра, поэтому при поиске способа запуска какой-либо программы необходимо произвести поиск этих параметров по всему реестру.

Специфика Windows NT/2000/XP

В операционных системах серии Windows NT способы автозапуска программ в целом почти идентичны системам Windows 9x, однако имеется ряд разделов в реестре, специфичных только для Windows NT. Кроме того, в этих ОС отсутствует возможность запуска программ с помощью файлов AUTOEXEC.BAT (при запуске DOS-приложения, правда, происходит автоматическая обработка файла %SystemRoot%\SYSTEM32\AUTOEXEC.NT, если в настройках свойств этой DOS-программы не указан другой файл), WINSTART.BAT, DOSSTART.BAT. Итак, в Windows NT могут иметь место дополнительные параметры автозапуска в разделах реестра:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\Run

Также в разделе

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows

или в

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows

могут присутствовать строковые параметры «Load» (программы, запуск которых в нём прописан, загружаются минимизированными) и «Run», в которые при установке Windows NT поверх Windows 9x переносится соответствующий список программ автозапуска из аналогичных параметров файла WIN.INI. К этим параметрам реестра применимы те же правила написания, что и к соответствующим параметрам WIN.INI. Если же наследования этого списка из предыдущей ОС не происходит, то по умолчанию значением этих параметров является пробел.

В разделе

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

также содержится ряд строковых параметров, отвечающих за автозапуск различных приложений при входе пользователя в систему:

  • «Userinit» — определяет список программ, запускаемых процессом WinLogon в контексте пользователя, при его регистрации в системе. По умолчанию это «USERINIT.EXE, NDDEAGNT.EXE» для Windows NT и «USERINIT.EXE» для Windows 2000/XP.
  • «Shell» — задаёт оболочку (вернее — список программ, формирующих пользовательский интерфейс) Windows (по умолчанию — «TASKMAN, PROGMAN, WOWEXEC» для Windows NT и «EXPLORER.EXE» для Windows 2000, XP).
  • «System» — определяет список программ, запускаемых процессом WinLogon в контексте системы во время её инициализации. По умолчанию — «LSASS.EXE, SPOOLSS.EXE» для Windows NT, и пустая строка либо «LSASS.EXE» для Windows 2000/XP.
  • «VmApplet» — определяет список программ или программу, запускаемую процессом WinLogon для оперативной настройки параметров виртуальной памяти — по умолчанию его значение «rundll32 shell32, Control_RunDLL "sysdm.cpl"».

Надо обратить внимание, что в разделе

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\AppInit_DLLs

могут быть указаны DLL-файлы, которые, являясь, по сути, исполнимыми модулями, будут запускаться при загрузке, не отображаясь при этом в диспетчере задач.

Помимо этого предусмотрена возможность автоматического запуска сторонних программ вместе с запуском командного процессора CMD.EXE — эти программы задаются в специальных разделах реестра

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Неявные способы автозагрузки

К сожалению, операционные системы семейства Windows и их внутреннее устройство довольно сложны для рядового пользователя — к копанию в реестре расположен далеко не каждый. Тем более что помимо вышеперечисленных способов автозапуска программ на старте системы существует ещё и такой вариант, как запуск исполнимого модуля одной программы при загрузке другого, вполне легитимного приложения. Подобный симбиоз (или, скорее — что-то типа паразитирования) можно наблюдать при использовании утилит класса ad-ware, то есть таких программ, в которых вы расплачиваетесь с их авторами не живыми деньгами, а своими нервными клетками, попорченными из-за просмотра рекламных баннеров внутри интерфейса самой программы. За примером таких программ далеко ходить не надо — это и ReGet, и ICQ, и Opera. Закачкой этих баннеров обычно занимается отдельный исполнимый модуль, запускаемый вместе с основной программой-маткой. Подобных модулей-баннерососов создано уже довольно много и отловить их вручную слишком сложно даже для опытного пользователя, а потому всегда полезно периодически сканировать систему не только антивирусным сканером, но программами типа Ad-Aware [2], или Opt Out [3], или SpyBot — Search & Destroy [4], призванными находить и удалять из системы эти модули. Такие программы обычно абсолютно бесплатны и имеют в своих постоянно обновляемых базах данных информацию о десятках известных шпионско-рекламных модулях и даже троянских вирусах. Учтите только, что некоторые программы не работают без таких «пауков» (тот же ReGet) — в этом случае можно либо заблокировать баннеры персональным фаейрволлом, например, AtGuard или Norton Internet Security, либо найти альтернативную программу аналогичного назначения, но уже без мерзопакостной нагрузки.

Всеми обожаемый браузер от повсеместно любимой корпорации Microsoft также имеет малоизвестную, но достаточно коварную возможность вместе со своим запуском загружать посторонние модули, так называемые Browser Helper Objects (BHO) — небольшие программы, не имеющие пользовательского интерфейса и автоматически запускаемые вместе с Internet Explorer. Эти самые BHO могут быть как действительно ценными дополнениями (например, модуль, который прописывает в систему программа FlashGet), так и зловредными троянскими вирусами или шпионскими модулями, а потому при проверке автозагрузки нелишним будет проконтролировать и список установленных в системе BHO. Список этот можно увидеть в разделе реестра

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\explorer\Browser Helper Objects

Подозрительные или явно зловредные BHO можно удалить из этого списка (желательно предварительно сделать резервную копию реестра) — это их полностью дезактивирует. Например, если в этом разделе вы обнаружите подраздел

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\explorer\Browser Helper Objects\ {A5366673-E8CA-11D3-9CD9-0090271D075B}

то произведите поиск во всём реестре найденного идентификатора BHO — {A5366673-E8CA-11D3-9CD9-0090271D075B}– обнаружите его упоминание также и в разделе

HKEY_CLASSES_ROOT\CLSID \{A5366673-E8CA-11D3-9CD9-0090271D075B}

Просмотрите всё содержимое найденного раздела, чтобы определить, к какой программе относится этот BHO — в данном случае вы найдёте такую запись:

HKEY_CLASSES_ROOT\CLSID\{A5366673-E8CA-11D3-9CD9-0090271D075B}\InprocServer32
@="C:\PROGRAM FILES\FLASHGET\JCCATCH.DLL"

из которой можно сделать вывод, что обнаруженный BHO создан программой FlashGet и никакой угрозы не представляет. Если же обнаружится упоминание DLL-библиотеки непонятного происхождения (например, в свойствах этого файла нет никаких данных о его разработчике), то попробуйте удалить в реестре все упоминания данного BHO — скорее всего, именно он и является причиной неприятностей. Удобнее же всего для поиска и идентификации установленных BHO использовать специально для этого предназначенные программы, такие как BHODemon [5] или BHOCaptor [6]), которые выдадут всю информацию об установленных модулях BHO и помогут деактивировать подозрительные модули.

Конечно, существуют и другие способы загрузить программный код без ведома пользователя, например, с помощью плагина какой-либо программы, хотя бы того же Internet Explorer. Файлы подключаемых модулей-плагинов IE находятся в папке \PROGRAM FILES\INTERNET EXPLORER\PLUGINS — по свойствам каждого файла можно выяснить его предназначение. Не исключено также, что зловредная программа пропишет себя в системе как системный драйвер или сервис, одним словом — борьба с вирусами или другими, запускающимися без ведома пользователя программами весьма и весьма непроста. А самый лучший способ помочь самому себе в этой борьбе — постоянный мониторинг состояния файлов на диске, реестра и конфигурационных файлов с помощью хорошего деинсталлятора. Только так вы получите реальную картину того, что пишется на диск и в реестр при установке новых программ или при посещении находящихся на отшибе Всемирной Сети веб-сайтов. Догадайтесь с трёх раз, какой деинсталлятор я использую? Конечно Ashampoo Uninstaller [7] — мои постоянные упоминания этой программы, вероятно, уже изрядно всем надоели, но ничего лучшего лично для себя я пока не подобрал, тем более, что результаты её работы меня более чем устраивают.

Вот, собственно говоря, и всё, что мне известно на сегодня (или, вернее — что вспомнил :)) про способы автозагрузки приложений и документов в операционных системах семейства Windows. С некоторой натяжкой, правда, к автозапуску можно отнести ещё и возможность использования файла AUTORUN.INF в корневой директории жёсткого диска (если он там обнаружится — смело удаляйте), но этому файлу уже была посвящена довольно большая статья в нашем журнале. В особо же тяжёлых случаях я советую также попробовать определить имя исполнимого файла непонятно каким образом запущенного процесса с помощью программы типа TaskInfo [8]), а затем произвести поиск этого файла на диске и его упоминания в системном реестре.




Темы