- Иллюстрированный самоучитель по Microsoft Windows 2003
- Пример 5. Снижение вероятности инсталляции «троянских коней».
- Системный реестр
- Каково назначение основных разделов реестра Windows
- Вступление
- Типы данных в реестре
- HKEY_LOCAL_MACHINE (HKLM)
- HKLM\Hardware
- HKLM\SAM
- HKLM\Security
- HKLM\Software
- HKLM\System\CurrentControlSet
- HKEY_USERS (HKU)
- HKEY_CURRENT_CONFIG (HKCC)
- HKEY_CURRENT_USER (HKCU)
- HKEY_CLASSES_ROOT (HKCR)
Иллюстрированный самоучитель по Microsoft Windows 2003
Пример 5. Снижение вероятности инсталляции «троянских коней».
Большинство вирусов, «червей» и «троянских коней» регистрируют свою информацию в системном реестре с тем, чтобы автоматически стартовать при загрузке операционной системы. Список излюбленных ключей, которые чаще всего используются в этих целях, приведен ниже:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
- HKEY__LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
- HKEYJJSERS\DEFAULT\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
- HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
Поэтому, если вы подозреваете такого рода атаку на свой компьютер, эти ключи реестра необходимо проверить в первую очередь. Более того, список таких ключей реестра постоянно пополняется. За последнее время, помимо традиционного списка ключей, приведенного выше, в него были включены и следующие ключи реестра:
- HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths
- HKLM\Software\Microsoft\Windows\CurrentVersion\Controls Folder
- HKLM\Software\Microsoft\Windows\CurrentVersion\DeleteFiles
- HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer
- HKLM\Software\Microsoft\Windows\CurrentVersion\Extensions
- HKLM\Software\Microsoft\Windows\CurrentVersion\ExtShellViews
- HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- НКM\Software\Microsoft\Windows\CurrentVersion\ModuleUsage
- HKLM\Software\Microsoft\Windows\CurrentVersion\RenameFiles
- HKLM\Software\Microsoft\Windows\CurrentVersion\Setup
- HKLM\Software\Microsoft\Windows\CurrentVersion\SharedDLLs
- HKLM\Software\Microsoft\Windows\CurrentVersion\Shell Extensions
- HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Compatibility
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Drivers
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\drivers.desc
- HKLMXSoftware\Microsoft\Windows NT\CurrentVersion\Drivers32\0
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Embedding
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\MCI
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\MCI Extensions
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\Ports
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList
- HKLM\Software\Microsoft\Windows NT\CurrentVersion\WOW
Разумеется, приведенные здесь советы и рекомендации не заменят собой ни антивирусного программного обеспечения, ни системы обнаружения атак. Однако они все же смогут обеспечить хотя бы минимальную защиту от неприятных «подарков» и рекомендуются в качестве дополнительных защитных мер.
Системный реестр
Системый реестр это древовидная структура данных, в который вы можете хранить настройки своей программы. Помимо вас, в реестр складывают данные другие программы, в том числе и операционная система.
Реестр является не только важным этапом во время инсталляции, но и прекрасным источником самой различной информации, поэтому я остановлюсь на нём подробнее.
Итак, реестр состоит из нескольких крупных деревьев, каждое из которых имеет уникальное название. Нас будут интересовать только два из них: HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE.
Дерево HKEY_LOCAL_MACHINE (часто сокращаемое до HKLM) может содержать настройки программы для текущей машины безотносительно к тому, кто за ней работает. В Windows NT пользователи, не обладающие правами администратора, не могут записывать данные в это дерево. Из этого следует один простой вывод если программа имеет общепользовательские настройки, то устанавливать её на компьютер (и изменять эти настройки впоследствии) может только администратор.
HKEY_CURRENT_USER (HKCU) содержит настройки программы для текущего пользователя. Это дерево для каждого пользователя компьютера своё. Оно может храниться не только на локальной машине, но и на сервере, что позволяет пользователю на каждом компьютере сети иметь одни и те же настройки (обои, клавиши переключения раскладки и др.).
Для того, чтобы просматривать и редактировать реестр, вы можете запустить редактор реестра (эта программа, как и следовало ожидать, называется regedit.exe 🙂 Если вы часто работаете с реестром, её лучше всего вынести в меню «Программы».
Деревья реестра состоят из разделов (keys, в редакторе реестра они выглядят, как папки). У каждого раздела могут пыть различные параметры (values). По крайней мере один параметр есть у каждого раздела в редакторе реестра он называется «(По умолчанию)» (в английской версии, естественно, «(Default)»).
Как работать с реестром, вы можете прочитать в документации (ключевое слово TRegistry). Я же всего лишь отмечу, что выбрать дерево вы можете, используя свойство RootKey; для чтения/записи данных, вам потребуется открыть раздел (метод OpenKey); чтобы данные сохранились, не забудьте раздел закрыть (метод CloseKey). Название параметра по умолчанию пустая строка.
В Windows регламентированы правила записи параметров программы в реестр. Вы, конечно, можете помещать данные куда угодно, однако, знать эти правила вам не помешает.
В соответствии с правилами, параметры программы должны находиться в \Software\ \ \ Реальное же расположение поддерева вашей программы зависит только от вас. Если вам не требуется навороченной схемы работы с версиями, вы можете отказаться от . Если у вас нет собственной фирмы :), можно отказаться и от (но документация жутко не рекомендует этого делать). Например, программы RAR и FAR Евгения Рошала прописывают свои параметры в ветках HKCU\Software\WinRAR и HKCU\Software\FAR.
В реестре хранится куча полезной информации. Ниже я немного расскажу вам об этом, но прежде хочу заметить, что большая часть данных Windows находится в ветках HKLM\Software\Microsoft\Windows\CurrentVersion
и HKCU\Software\Microsoft\Windows\CurrentVersion
, поэтому в дальнейшем, в целях сокращения, я вместо Software\Microsoft\Windows\CurrentVersion
буду просто ставить три точки.
Для того, чтобы поместить свою программу на рабочий стол, или в меню Автозагрузка, или сохранить результаты работы в папке Мои документы, требуется знать, где расположены соответствующие каталоги. Всем этим хозяйством заведует Проводник, поэтому нужную информацию можно найти в нём.
Обычно, в эти каталоги помещаются не сами файлы, а ссылки на них (о ссылках мы поговорим чуть позже).
В NT существует ещё несколько папок, которые связаны с «меню для всех». Раздел, где их можно найти, практически такой же: HKLM\. \Explorer\Shell Folders (заметьте, что теперь он принадлежит ветке HKLM, а не HKCU).
Common Desktop | Рабочий стол (папка). |
Common Programs | Меню Программы (папка). |
Common Start Menu | Меню кнопки Пуск (папка). |
Common Startup | Меню Автозагрузка (папка). |
Обратите внимание на наличие пробела после слова Common.
В списке, на рисунке справа, вы видите, о каких названиях идёт речь.
Если вы инсталлируете на компьютер разделяемые файлы (которыми могут пользоваться два или более приложений), пропишите их в HKLM\. \SharedDLLs (выше вы видели окно редактора реестра, в котором как раз показаны параметры раздела SharedDLLs). Названием параметра служит имя разделяемого файла, а значением (целого типа) количество ссылок на него. При инсталляции файла вы проверяете, существует ли он в реестре, и если да, просто увеличиваете количество ссылок на единицу. Если разделяемого файла в реестре нет, создайте его, и установите количество ссылок равным единице. При деинсталляции файла уменьшите количество ссылок на 1, и если оно стало равным нулю удаляйте его.
Как видим, если файл уже есть на компьютере, копировать его не обязательно. Иногда случается, что у вас более новый файл, чем тот, который уже установлен, и в этом случае его нужно скопировать.
Напоследок рассмотрим ещё несколько интересных разделов реестра. В ветках HKCU\. \Run, HKLM\. \Run, HKLM\. \RunOnce и HKLM\. \RunServiceOnce можно прописывать программы, которые вы хотите запускать при включении компьютера или входе в систему. Названием параметра может служить произвольная строка, а значением (строковым) будет путь к программе, которую вы хотите запустить.
Раздел Run просто запускает указанную программу всякий раз, когда пользователь входит в систему (действует аналогично папке Автозагрузка). Раздел RunOnce работает так же, как и Run, однако после выполнения программы, её параметр из RunOnce удаляется это приводит к тому, что программа запускается только один раз. Наконец, RunServiceOnce действует точно также, как и RunOnce, но выполняется при включении компьютера, то есть ещё до того, как пользователь вошёл в систему.
Излишне, наверное, говорить, что HKCU\. \Run выполняется только для одного конкретного пользователя, а HKLM\. \Run для любого пользователя компьютера.
С помощью реестра вы можете сделать так, чтобы Проводник ассоциировал иконку с вашим типом файлов, и запускал вашу программу при двойном щелчке на файле.
Для этого нам придётся исследовать ещё одну ветку реестра HKEY_CLASSES_ROOT (HKCR). Примечание: Эта ветка появилась в реестре самой первой (если углябляться в историю) и служила для хранения данных о COM-объектах (о тех же OLE-серверах, например), доступных системе. Это было ещё в Windows 3.x, то есть очень давно 🙂 Сейчас в реестре появилось ещё несколько веток, и поэтому HKEY_CLASSES_ROOT потеряла своё привилегированное положение. В связи с тем, что она обслуживает не только типы файлов, но и COM, ситуация с реестром немного запутанная. Мы разберём возможности этой ветки на примере программы WinRAR Евгения Рошала. [HKEY_CLASSES_ROOT\.rar] @=»WinRAR» «Content Type»=»application/x-compressed» [HKEY_CLASSES_ROOT\.rar\ShellNew] «Data»=hex:52,61,72,21,1a,07,00,cf,
90,73,00,00,0d,00,00,00,00,00,00,00 [HKEY_CLASSES_ROOT\WinRAR] @=»WinRAR archive» [HKEY_CLASSES_ROOT\WinRAR\shell] [HKEY_CLASSES_ROOT\WinRAR\shell\open] [HKEY_CLASSES_ROOT\WinRAR\shell\open\command] @=»C:\\Program Files\\WinRAR\\WinRAR.exe \»%1\»» [HKEY_CLASSES_ROOT\WinRAR\DefaultIcon] @=»C:\\Program Files\\WinRAR\\WinRAR.exe,0″ Для начала необходимо создать раздел HKCR\.ext (здесь ext расширение файлов, с которым работает ваша программа). Параметром по умолчанию этого раздела должна быть некая уникальная строка (в нашем примере это WinRAR). Вы можете использовать имя программы, имя программы плюс тип, имя программы и версию, имя своей любимой бабушки, и вообще, любое имя. Далее этот идентификатор я буду называть ExtentionID.
Дополнительный возможный (необязательный) параметр это Content type.
Необязательный подраздел HKEY_CLASSES_ROOT\.ext\ShellNew используется для того, чтобы пользователь мог создавать в Проводнике файлы вашего типа (правая кнопка мыши/Создать/. ).
Следующий раздел HKCR\ExtentionID. Значением по умолчанию этого раздела будет название файлов данного типа, например, WinRAR archive или Документ Microsoft Word. Это название используется Проводником (в том числе, и в подменю создания файлов). В дальнейшем эту строку я буду называть DocumentName.
Добавьте раздел HKCR\ExtentionID\shell\open\command для того, чтобы пользователь мог открывать файлы вашего типа двойным щелчком. Поскольку такой файл зачастую содержит несколько иконок, в случае необходимости указывайте порядковый номер иконки (нумеруются, начиная с нуля).
Каково назначение основных разделов реестра Windows
Вступление
В данной статье будут рассмотрены основные ветки реестра Windows, а также их назначение. Список корневых разделов можно увидеть ниже:
- HKEY_LOCAL_MACHINE (HKLM)
- HKEY_USERS
- HKEY_CURRENT_CONFIG
- HKEY_CURRENT_USER
- HKEY_CLASSES_ROOT
Типы данных в реестре
В реестре могут храниться данные семи типов:
- REG_BINARY хранит произвольные двоичные данные в «сыром» виде, без переформатирования и синтаксического разбора. Эти данные можно просматривать в двоичном или шестнадцатеричном виде при помощи редактора реестра.
- REG_DWORD хранит параметры, представленные восьмибайтными (длинные) целыми числами. Этот тип данных обычно применяется, когда параметр обозначает счетчик или интервал. Еще одно его применение в качестве флага (0 — флаг снят, 1 — установлен).
- REG_SZ представляет собой обычную строку в кодировке Unicode любой длины. Наиболее часто в этом типе данных хранится информация, которая будет читаться пользователем, пути доступа, названия устройств и т.п.
- REG_EXPAND_SZ — вид REG_SZ, используемый приложениями для хранения конструкций вида %SystemRoot%\System32, например. При чтении этой строки Windows заменяет %SystemRoot% на имя папки, куда она установлена.
- REG_MULTI_SZ представляет собой набор произвольного количества параметров типа REG_SZ. В этом типе данных хранится, например, список IP адресов, назначенных сетевому интерфейсу.
- REG_FULL_RESOURCE_DESCRIPTOR применяется для кодирования информации о системных ресурсах, необходимых для какого-либо из устройств.
- REG_NONE служит как семафор, т.е. параметр существует, но не содержит ни какого значения. Некоторые приложения проверяют наличие этого параметра и, исходя из результата проверки, выполняют или не выполняют действие.
При добавлении параметров в реестр нужно обязательно использовать тот тип данных, который указан в источнике, откуда взята информация о необходимости добавить параметр. Если тип данных не будет соответствовать тому, который ожидает найти приложение в указанном месте, то последствия могут быть непредсказуемыми.
HKEY_LOCAL_MACHINE (HKLM)
Раздел HKEY_LOCAL_MACHINE (HKLM) — хранит все настройки, относящиеся к локальному компьютеру. Например, в подразделе HARDWARE хранятся записи операционной системы и драйверов и совместно используемая (разделяемая) информация о физических устройствах, обнаруживаемых операционной системой во время загрузки (как и остальных устройств Plug-and-Play, которые могут быть добавлены после загрузки операционной системы). Приложения должны хранить здесь данные только в том случае, когда они относятся ко всем, кто пользуется компьютером. Например, драйвер принтера может хранить здесь набор настроек принтера, применяемых по умолчанию, и копировать эти данные для каждого профиля пользователя при входе пользователя в систему.
HKLM\Hardware
В разделе HKLM\Hardware хранится информация об устройствах, обнаруженных в компьютере. Все параметры этого раздела хранятся не на жестком диске, а в оперативной памяти. Когда компьютер распознает запуск устройства, он нумерует найденное устройство, исследуя шину и отдельные классы устройств (например, порты или клавиатуру). В этом разделе имеются три основных подраздела:
- Подраздел Descriptions содержит описания центральных процессоров, процессоров для операций вещественными числами («с плавающей точкой») и многофункциональных устройств компьютера.
- Подраздел DeviceMap сопоставляет устройства драйверам. Например, DeviceMap\video имеет параметр с именем \Device\Video1, содержащий строку \REGISTRY\Machine\SYSTEM\ControlSet001\Services\mnmdd\Device0, являющуюся указателем на место, где хранятся параметры для драйвера этого видеоконтроллера.
- В подразделе ResourceMap имеются три основных подраздела. Один — для уровня аппаратных абстракций (HAL, hardware abstraction layer), применяемый при отслеживании найденных устройств. Второй — для Plug-and-Play Manager, для записи устройств, про которые известно, как с ними работать. Третий — для отображения объема оперативной памяти.
Могут быть и дополнительные подразделы, в зависимости от конфигурации компьютера. Например, компьютеры с поддержкой интерфейса управления питанием (ACPI), будут иметь подраздел ACPI, содержащий информацию о конкретных возможностях ACPI на этом компьютере.
HKLM\SAM
В разделе HKLM\SAM хранятся локальные учетные записи или группы, созданные на компьютере. Раздел скрыт.
HKLM\Security
В разделе HKLM\Security содержится всевозможная информация, относящаяся к защите. Формат не документирован. Используется для кэширования верительных данных для входа в систему, настроек политики и разделяемых секретных данных сервера. Подраздел Security\SAM содержит копию большинства данных из HKLM\SAM
HKLM\Software
Раздел HKLM\Software — является корнем структуры подразделов, хранящих глобальную (в пределах компьютера) информацию приложений и компонент. Программы создают свои собственные подразделы в HKLM\Software для храниения своей служебной информации. В разделе HKLM\Software\Microsoft\Windows\CurrentVersion хранится большинство данных о настройках пользовательского интерфейса (GUI). Подраздел HKLM\Software\Microsoft\Windows NT\CurrentVersion, среди прочих, содержит разделы для автоматического восстановления, для шифруемой файловой системы, для редактора конфигурации безопасности, для терминальных служб и т.д
HKLM\System\CurrentControlSet
Последним действием фазы загрузки Windows является обновление реестра, которое должно зафиксировать набор служб и управляющих настроек, применявшийся при последней успешной загрузке. CurrentControlSet всегда указывает на набор управляющих настроек, используемых системой в текущий момент. В HKLM\System есть много подразделов ControlSetXXX, каждый из которых описывает набор управляющих настроек, существовавших в какой-либо момент времени, независимо от того, была ли загрузка успешной или нет. CurrentControlSet является указателем на последний набор управляющих настроек, при котором загрузка была успешной. Поскольку трудно определить сразу, какая из загрузок была успешной, то операционная система и приложения пользуются указателем CurrentControlSet.
В разделе, описывающем набор управляющих настроек, среди прочих, имеются четыре следующих раздела:
- Control — Содержит управляющую информацию для служб и системных инструментальных средств. Например, Control\BackupRestore\KeysNotToRestore содержит список разделов, которые утилита Backup на должна восстанавливать при восстановлении реестра.
- Enum — Содержит по одному элементу данных для каждого из найденных системой устройств. Если устройство имелось на на момент загрузки, то оно будет включено в этот список.
- Hardware Profiles — Содержит по одному элементу данных для каждого из профилей оборудования, найденных на компьютере. Как и сам HKLM\System, каждый профиль имеет порядковый номер, начинающийся с 0001. HKLM\System\Hardware Profiles\Current всегда указывает на профиль, выбранный при загрузке.
- HKLM\System\MountedDevices — Тома динамических дисков зависят от наличия информации о текущей конфигурации о логических томах на диске. Приложения и оснастки берут эту информацию из службы Logical Volume Manager, которая хранит свой список смонтированных и доступных устройств и подразделе MountedDevices
HKEY_USERS (HKU)
Раздел HKEY_USERS (HKU) — содержит записи для каждого из пользователей, когда-либо входивших в систему. Владельцем каждой из этих записей является соответствующая пользовательская учетная запись, там содержатся настройки профиля этого пользователя. Если используются групповая политика, то задаваемые в ней настройки применяются здесь к профилям отдельных пользователей.
HKEY_CURRENT_CONFIG (HKCC)
Раздел HKEY_CURRENT_CONFIG (HKCC) — хранит информацию о текущей загрузочной конфигурации компьютера. В частности, здесь хранится информация о текущем наборе системных служб и об устройствах, имевшихся во время загрузки. На самом деле, этот корневой раздел является указателем на раздел внутри HKLM.
HKEY_CURRENT_USER (HKCU)
Раздел HKEY_CURRENT_USER (HKCU) указывает на профиль текущего пользователя (вошедшего в данный момент в систему) внутри HKU. Microsoft требует, чтобы приложения хранили все предпочтения пользователей в подразделах под HKCU. Например, HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Paint содержит личные настройки пользователей программы Paint.
HKEY_CLASSES_ROOT (HKCR)
Раздел HKEY_CLASSES_ROOT (HKCR) — сопоставляет расширения файлов и идентификаторы классов OLE. Фактически он указывает на HKLM\Software\Classes. Система использует эти соответствия чтобы определить, какие приложения или компоненты нужно использовать при открытии или создании тех или иных типов файлов или объектов данных.