Настройка и оптимизация операционных систем
Главная -> Система

Эффективная очистка реестра

Напечатать страницу


Автор Якоб Хейдельберг (Jakob H. Heidelberg)

В этой статье мы продемонстрируем, как создать сценарий для очистки или для модификации реестра для всех пользовательских профилей на определенном компьютере, например, чтобы удалить вирус. Мы также увидим, как этот подход можно использовать совместно со сценариями запуска компьютера (startup script) внутри компьютерного объекта политики группы (Group Policy Object) для модификации всех пользовательских профилей в домене, на сайте или в организационной единице OU. Да мы в действительности можем изменять настройки реестра с помощью сценариев запуска компьютера (startup script)…

В некоторых случаях вам понадобиться удалить, добавить или изменить некоторые части реестра для всех пользователей на компьютере одновременно. В большинстве случаев мы предпочитаем использовать объект политики группы Group Policy Object (GPO) для пользователей, чтобы удалить или добавить определенное значение, но когда дело касается удаления значений, то мы должны использовать сценарии (к несчастью, вы можете сказать). Также, иногда нам необходимо выполнить задачу по очистке единым процессом, не дожидаясь пока все пользователя зайдут на компьютер. В этой статье мы расскажем, как это сделать простым способом.

Мы узнаем, как делать изменение реестра с помощью очень эффективного сценария и объединив его с GPO на уровне компьютера (включение или выключение), вместо использования GPO для пользовательского объекта (вход или выход).

Почему я должен это делать?

Итак, почему же это является очень умным подходом? Может быть, вы хотите делать очистку всю ночь, когда вы можете убедиться, что изменено определенное значение (удалено, добавлено или изменено) следующим утром!

В других случаях у пользователя может быть недостаточно прав для выполнения задач по очистке или модификации. Ключ реестра (registry key), который вы хотите изменить, может быть защищен особыми правами, в результате чего может быть невозможным использование GPO пользователя (т.к. он запускается в контексте пользователя). Самая замечательная вещь заключается в том. Что сценарии, выполняющиеся при запуске компьютера (startup script) запускаются от имени учетной записи System, поэтому помните об это, это может пригодиться во многих ситуациях!

Предупреждение! Код, представленный в этой статье, написан только для тестирования – используйте его в промышленной среде на свой собственный страх и риск. Приведенный код немного упрощен для облегчения чтения и восприятия. Пожалуйста, проверяйте функциональность этого сценария в тестовой среде до того, как использовать его в промышленной среде. Вы можете добавить дополнительную обработку ошибок, журнализацию и дополнительную функциональность на свое собственное усмотрение!

Я не говорю, что код не работает, просто хочу убедиться, что вы понимаете всю опасность запуска его в промышленной среде.

Фон

Перед тем, как мы начнем углубленное изучение кода, хочу немного рассказать о реестре, чтобы все стало совсем понятно.

Очень часто люди думают, что часть реестра HKEY_USERS – это место, где вы можете увидеть все локальные профили (local profile) на данном компьютере. Однако, это не так. В разделе HKEY_USERS представлен список профилей, которые в текущий момент загружены на машине, или так сказать, профили, которые активны в памяти. Как только пользователь заходит на компьютер, новая запись будет видна в этой части реестра.

часть реестра HKEY_USERS
Рисунок 1

Как показано на рисунке 1 вы увидите, что загружено несколько профилей даже несмотря на то, что в консоли загружен один пользователь. Когда пользователь выходит, хайв или улей реестра (Registry Hive) выгружается и больше не виден в разделе HKEY_USERS. Ниже приведено краткое объяснение загруженных хайвов:

".DEFAULT" – профиль пользователя по умолчанию – это не то, что могут видеть все пользователи (как общий профиль (Public) или профиль все пользователи (All Users)) а также это не профиль реестра, который копируется для всех новых профилей пользователей на компьютере (это заблуждения). Это стандартный профиль, который загружен даже тогда, когда никто не вошел на компьютер – поэтому он также называется загрузочный профиль (startup profile – загружается еще до того момента, как вы заходите на компьютер). Изменив значения этого профиля вы можете менять такие настройки, как заставка на экране для входа (Ctrl+Alt+Delete), начальное значение кнопок Num/Caps Lock.

"S-1-5-18" – это "System" Security Identifier (SID)

"S-1-5-19" - это "LocalService" SID

"S-1-5-20" – это "NetworkService" SID

Профиль или идентификатор безопасности (SID), начинающийся на "S-1-5-21-" и оканчивающийся на "-500" – это SID встроенной учетной записи администратора (Administrator account). Реальные и активные профили пользователей – это все другие записи в разделе реестра HKEY_USERS. В примерах сценариев, включенных в эту статью, вышеуказанные профили не трогаются – задействуются только профили обычных пользователей – вы можете это легко изменить, добавив несколько строк в коде.

Загрузить мой улей (Hive)…

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

1 – вручную загрузить хайв или улей в Regedit

2 – создать сценарий, который загружает хайв динамически.

Давайте рассмотрим первый вариант. Если вы откроете Regedit (Start &rt; Run &rt; Regedit) и найдете раздел HKEY_USERS (вы должны щелкнуть или выделить его), затем перейдете к меню File (Файл), то вы сможете выбрать "Load Hive…" (смотри Рисунок 2)

Загрузить мой улей (Hive)
Рисунок 2

После этого появится окно, в котором необходимо указать путь к файлу NTUSER.DAT (смотри Рисунок 3)

путь к файлу NTUSER.DAT
Рисунок 3

Файл NTUSER.DAT располагается в папке с профилем пользователя. Выше вы можете увидеть файл NTUSER.DAT для пользователя 'test2'. Это файл расположен прямо в папке "C:\Documents and Settings\test2\" – в операционной системе Windows Vista профили пользователей (user profile) обычно хранятся в папке "C:\Users\".

Если вы не нашли файл NTUSER.DAT, как изображено на рисунке 3, то вы должны перейти Tools &rt; Folder и выбрать настройку "Show hidden files and folders" (отображать скрытые папки и файлы).

После того, как мы загрузили улей на время, мы должны дать ему название – выберите его сами. На рисунке 4 и в примере сценария мы используем название: 'TmpLoadHive'.

TmpLoadHive
Рисунок 4

Нажмите на кнопку OK и иерархия улея будет видна, как изображено на рисунке 5.

иерархия улея
Рисунок 5

На рисунке 5 мы раскрыли улей под названием 'TmpLoadHive', чтобы показать структуру улея пользователя – она будет выглядеть точно также для любого другого пользовательского реестра. Она идентично тому, чтоб будет иметь пользователь в разделе реестра HKEY_CURRENT_USER (HKCU) после входа на компьютер.

После этого не забудьте выгрузить пользовательский улей (user hive), выделив улей 'TmpLoadHive' и перейдя в меню File &rt; "Unload Hive…" (выгрузить улей), как показано на рисунке 6.

Важно! Если вы не выгрузите хайвы, то вы не сможете снова загрузить этот улей до перезагрузки, т.к. вы не можете загрузить уже загруженный улей (это также подходит для вошедших пользователей, включая быстрое переключение пользователей).

выгрузите хайвы,
Рисунок 6

Эта процедура может быть очень раздражающей, если ее необходимо повторить для всех профилей пользователей (user profile) на всех компьютерах во всех ваших доменах, не так ли? К счастью у нас есть еще один метода поиска с помощью нашего старого друга REG.EXE.

Спасение старого друга

Команда REG.EXE имеет два очень полезных параметра: LOAD и UNLOAD. Они делают тоже самое, что мы делали вручную выше. Нам лишь необходимо указать временное название улея и полный путь к файлу NTUSER.DAT, который мы хотим загрузить в память.

Вам нужен пример сценария? Хорошо, чтобы задать фон для пользовательского профиля по умолчанию (Default User profile), мы можем выполнить следующий код:

REG.EXE LOAD HKU\DefU "C:\Documents and Settings\Default User\ntuser.dat"
REG.EXE ADD "HKU\DefU\Control Panel\Desktop" /v Wallpaper /d "C:\Windows\Wallpaper.bmp" /f
REG.EXE UNLOAD HKU\DefU

Код, приведенный выше, сначала загрузит (LOAD) улей для пользовательского профиля по умолчанию (Default User profile) во временный улей под названием "DefU" в разделе "HKEY_USERS" базы данных реестра. Затем он установит значение реестра для фона в профиле (Default User profile), который является профилем, который автоматически копируется при создании пользователей (в момент первого входа). Наконец, он выгрузит (UNLOAD) временный улей.

Как я могу найти файлы Ntuser.dat с помощью сценария?

Если мы хотим загрузить улеи всех пользователей на данном компьютере, то мы должны найти все профили пользователей на этом компьютере самым простым способом. Конечно, мы можем просто просматривать в коде все папки внутри "Documents and Settings" - или "Users" на компьютерах с операционными системами Vista/Windows Server 2008 – но есть лучший способ, который к тому же более точный.

В следующем ключе реестра:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\XXX\ProfileImagePath

вы можете найти правильный путь к профилю для всех локальных пользователей. XXX – это SID пользователя, поэтому просмотрев все эти ключи реестра мы сможем получить пути ко всем локальным файлам NTUSER.DAT.

Я написал функцию на языке VB Script, которая отображает все папки с профилями пользователей на данном компьютере (в одну строку, разделенные символом "|") – для локальной или удаленной машины. Функция исключает профили для учетных записей Systemprofile, LocalService, NetworkService и Local Administrator – в большинстве случаев они не нуждаются в очистке, но предложение ElseIf можно в случае необходимости легко убрать. Функция называется "GetUserProfileDirsFromRegistry" и ее можно найти здесь.

А как насчет временных (Roaming) профилей, вы можете спросить? Хорошо, все что нам нужно – это файлы NTUSER.DAT, поэтому как насчет того, если вы измените временные профили и напишите сценарий, который просматривает временные профили..

Удалить это значение или ключ …

Итак, мы знаем, как загрузить (или смонтировать) пользовательский улей (user hive) с помощью сценария, теперь нам нужно изменить что-либо в улее. Это можно сделать сотней способов, я выбираю для этого две функции – обе из них удаляют содержимое внутри загруженного улея реестра (registry hive). Ниже приводится объяснение:

После вирусной атаки вам может понадобиться очистить ключ 'Run':

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

для всех локальных пользователей. Некоторые вредоносные программы (malware created) создают запись, от которой вам необходимо избавиться– для этих целей я написал подпрограмму DeleteSingleValueFromTmpLoadHive. Эта программа удаляет одно значение из реестра.

Вы также можете удалить целый ключ из реестра (registry key), включая дочерние ключи и значения. "HKEY_CURRENT_USER \Software\Windowsecurity.com", для этих целей я использую подпрограмму DeleteKeyAndSubsFromTmpLoadHive.

Золотая комбинация

После объединения всего изученного нами, и запустив сценарий, написанный на языке VBS, мы получаем сценарий, который выполняет следующие задачи:

  1. Находит все папки с профилями на локальном компьютере благодаря чтению значений реестра, о которых мы говорили выше
  2. Игнорирует все встроенные системные профили (OS profile), включая учетную запись локального администратора
  3. Загружает улей реестра (registry hive) из файла NTUSER.DAT, расположенного внутри папки с профилем
  4. Удаляет ключ реестра, включая все дочерние ключи и значения для каждого подмонтированного профиля пользователя (user profile) *
  5. Удаляет отдельное значение реестра для каждого подмонтированного профиля пользователя (user profile) **

* "

** "

Сценарий не выдает окно подтверждения после выполнения, и все ошибки, возникшие в ходе выполнения, подавляются (с помощью предложения 'On Error Resume Next'). В случае необходимости такое поведение сценария можно исправить. Т.к. эта статья посвящена не написанию кода, то я не могу слишком сильно углубляться в его описание, но если вы немного знакомы с написанием сценариев, то вы прекрасно поймете, что там происходит.

Полный пример кода вы можете увидеть и загрузить здесь! Он был проверен на компьютерах с операционными системами Microsoft Windows XP, Microsoft Windows Server 2003 и Microsoft Windows Vista.

SYSTEM здесь!

Таким образом мы можем изменить реестр на одном компьютере, на локальном компьютере, с которого мы запустили сценарий, или если быть более точными, для всех пользователей на нем. Однако, существует одно большое ограничение: обычно, пользователи (к счастью) не являются локальными администраторами, поэтому они не смогут изменить реестр для других пользователей! Это значит, что локальный администратор должен вручную выполнить сценарий на всех компьютерах в домене, либо сделать что-то более эффективное: использовать политику группы Group Policy на уровне компьютера и настроить сценарий, выполняющийся при запуске компьютера (computer startup script). Чтобы узнать больше о сценариях, запускающихся при запуске компьютера, загляните в раздел внешних ссылок.

Прелесть сценариев, запускающихся при запуске компьютера (computer startup script) заключается в том, что все они запускаются в контексте локальной системы (Local System), очень мощной учетной записи (от имени которой вы можете сделать практически все), и все они могут быть запущены на тысяче компьютеров за несколько минут, заменив GPO на уровене домена Active Directory, сайта или организационной единице Organizational Unit (OU)!

Пожалуйста, обратите внимание, что первая загрузка GPO на новом компьютере может окончиться неудачей, в этом случае вам необходимо перезагрузить компьютер (и, может быть, выполнить команду GPUPDATE /FORCE). Также, сценарию необходимо время на выполнение – обе из этих проблем могут возникнуть во время загрузки системы.

Если вы обладаете функциональность Wake-On-LAN (разбудить по сети или WOL) в сети, то вы можете загрузить компьютеры в ночное время, выполнить необходимую работу по очистке компьютеров, а затем снова их выключить. Таким образом, благодаря совместной работе WOL и политики группы Group Policy, мы выполним очень эффективную работу за короткий промежуток времени – или любую другую работу: Вы ограничены лишь своим воображением!

Заключение

Мы узнали, как объединить сценарии, которые запускаются при запуске компьютера (startup script) с политикой группы Group Policy, для выполнения работы по очистке реестра очень эффективным способом. Теперь мы можем обновлять профили пользователей (user profile) даже если они в настоящее время не находятся на своем компьютере.

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

Источник: winsecurity.ru

Похожие публикации
Комментарии (0)

Комментариев нет.

Для того, чтобы оставить свой комментарий вам необходимо войти или зарегистрироваться на сайте.





Консультация специалиста

Консультант по Windows Если у вас есть вопрос по Windows или работе с ПК, вы можете задать его нашему консультанту.

Бесплатно и без регистрации!

Задать вопрос

Работа в нашей коменда
Опрос
Какая ОС вам больше нравится?





Результаты опросов
Разработка
  • Разработка сайта: Роман Чернышов