Перейти к контенту ↓


Стартап для 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

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

Также после регистрации пользователя в системе происходит запуск программ, ярлыки к которым помещены в папку «Авто­загрузка» меню «Пуск». Следует учитывать, что для текущего пользователя реальное местоположение на диске этой папки с ярлыками может быть изменено с помощью программы типа Tweak UI [2] либо вручную путём изменения значения параметра 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 [3], или Opt Out [4], или SpyBot — Search & Destroy [5], призванными находить и удалять из системы эти модули. Такие программы обычно абсолютно бесплатны и имеют в своих постоянно обновляемых базах данных информацию о десятках известных шпионско-рекламных модулях и даже троянских вирусах. Учтите только, что некоторые программы не работают без таких «пауков» (тот же ReGet) — в этом случае можно либо заблокировать баннеры персональным фаейрволлом, например, AtGuard [6] или Norton Internet Security [7], либо найти альтер­нативную программу аналогичного назначения, но уже без мерзо­пакостной нагрузки.

Всеми обожаемый браузер от повсеместно любимой корпорации 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 [8] или BHOCaptor [9]), которые выдадут всю информацию об установленных модулях BHO и помогут деактивировать подозрительные модули.

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

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




Темы