Журнал Системный Администратор, Июнь 2005

Журнал Системный Администратор

Июнь 2005

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Решаем нестандартные задачи с помощью стандартного Windows Scripting Host

Михаил Кошкин

Достаточно часто в администрировании приходится сталкиваться с разовыми задачами, программные решения для которых под рукой отсутствуют, а путешествие по Интернету не приносит требуемого результата. Для таких случаев в операционной системе Windows панацеей практически от всех бед может стать Windows Scripting Host. Его возможности позволят вам в короткие сроки составить нужный алгоритм и решить возникшую проблему.

Сегодня мы рассмотрим возможности Windows Scripting Host для получения основных характеристик компьютерных систем, которые могут быть использованы, например, для решения задач инвентаризации технических средств, учета пользователей, работающих в локальной сети, и даже при проведении криминалистической экспертизы компьютерной техники.

Примеры скриптов на языке VBScript, приведенные в статье, разработаны и протестированы для W2K. В большинстве своем они могут быть использованы и при работе под управлением Windows 98 или ME без установки дополнительного программного обеспечения.

Носители информации

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

Ниже приведена общая структура кода программы, позволяющая определить, какие устройства для хранения информации (далее – диски) имеются в системе.

' Получение доступа к объектам FileSystem Object

Dim fso : Set fso = WScript.CreateObject("Scripting.FileSystemObject")

' Перебираем все диски (HDD, FDD, CD и др.), имеющиеся в системе

Dim i

For Each i In fso.Drives

….

Next

В теле цикла с использованием дескриптора, содержащегося в переменной i, могут быть получены такие свойства (из наиболее значимых в рамках тематики статьи), как: буква диска – i.DriveLetter; тип диска – i.DriveType (см. таблицу 1).

Таблица 1. Возможные значения типа диска для i.DriveType

 

Значение

Пояснение

0

Тип не может быть определен

1

Сменный носитель или дисковод для гибких дисков

2

Том, размещенный на HDD-диске

3

Сетевой диск

4

CD / DVD-ROM

5

Виртуальный RAM-диск

 

Кроме того, с использованием дескриптора доступа к элементам файловой системы fso дополнительно могут быть получены все основные характеристики носителя:

n  тип файловой системы носителя – fso.GetDrive(i.DriveLetter).FileSystem;

n  серийный номер тома – Hex(fso.GetDrive(i.DriveLetter).SerialNumber);

n  метка тома – fso.GetDrive(i.DriveLetter).VolumeName;

n  общий размер диска – FormatNumber (fso.GetDrive(i.DriveLetter).TotalSize /1048576, 1) & " Мб");

n  размер незанятого пространства диска – FormatNumber (fso.GetDrive(i.DriveLetter).FreeSpace /(1024*1024), 1) & " Мб").

При разработке кода программы необходимо учитывать то обстоятельство, что в считывающем устройстве необязательно присутствие носителя (дискеты в дисководе или диска CD в приводе), и при обработке функций для получения свойств носителя могут возникнуть ошибки. Для таких случаев в языке VBScript используются конструкции On Error Resume Next, Err.Number и Err.Clear, позволяющие пользователю сформировать код для самостоятельной обработки исключений (см. рис. 1).

Рисунок 1. Результаты обработки информации об имеющихся в системе дисках

Следует также предусматривать ситуации, когда диски появляются в системе лишь на некоторое время. Это может быть связано с подключением сетевых дисков, наличием сменных USB flash или шифрованных дисков. Некоторые подходы, позволяющие определить, с какими дисками пользователю приходилось иметь дело, будут изложены далее.

Поиск файлов

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

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

Sub WorkSubFolder(sdrivename)

Dim sfolder : set sfolder=fso.getfolder(sdrivename)

' Для работы с подкаталогами источника

Dim ssfolder : set ssfolder=sfolder.SubFolders

' Для работы с файлами каталога источника

Dim ssfiles : set ssfiles=sfolder.Files

Dim fo

' Цикл обработки подкаталогов каталога источника

For Each fo In ssfolder

     WorkSubFolder SDriveName&"\"&fo.name

 Next

' Для всех файлов текущего каталога вызывается процедура WorkForFile

Dim fi     : For Each fi In ssfiles : WorkForFile sfolder&"\"&fi.name : Next

End sub

Файлы, имена которых содержат интересующее расширение, могут быть найдены с применением функции fso.Get-ExtensionName(fullnamefile) (см. рис. 2).

Рисунок 2. Результаты поиска файлов, имеющих заданные расширения

Для поиска файлов с определенной сигнатурой в простейшем случае достаточно воспользоваться функциями открытия файла (fr=fso.OpenTextFile(FullNameFile, 1, false)), чтения данных из файла (s_read=fr.Read(1)) и закрытия файла (fr.Close) (см. рис. 3).

Рисунок 3. Результаты поиска файлов-контейнеров шифрованных дисков с использованием заданной сигнатуры

При работе с томами файловой системы NTFS будьте готовы к ситуациям, когда доступ с правами пользователя к некоторым подкаталогам будет запрещен (например, «System Volume Information», который размещается в корневом каталоге тома). Необходимо также учитывать то обстоятельство, что при значительных размерах дисков и большом количестве файлов поиск может выполняться достаточно продолжительное время.

Ярлыки

Информацию о пристрастиях пользователя можно почерпнуть при изучении файлов-ярлыков, которые формируются при различных обстоятельствах (будь то история работы с файлами Microsoft Office или раздел Recent). Для анализа достаточно обработать дату создания файла, являющегося ярлыком, и параметр TargetPath, в котором содержится информация о запускаемом файле.

Dim wshshell : Set wshshell = WScript.CreateObject("WScript.Shell")

Dim shortcut : Set shortcut = wshshell.CreateShortcut(fullnamefilelnk)

' Вывод информации с названием и полным путем к запускаемому файлу

WScript.Echo( shortcut.TargetPath )

Dim fso : Set fso=CreateObject("Scripting.FileSystemObject")

Dim filelnk : Set filelnk = fso.getfile(строка с полным названием файла-ярлыка)

' Вывод информации о дате создания файла-ярлыка

WScript.Echo( filelnk.DateCreated ) 

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

Рисунок 4. Результаты поиска файлов-ярлыков в двух пользовательских каталогах

Документы Word

Возможности использования элементов ActiveX позволяют серьезно расширить область применения пользовательских программ на VBScript. Примером этому может стать описание подхода получения метаданных документов Microsoft Word. К слову сказать, за последние три года содержимое метаданных послужило поводом для ряда неприятных историй с крупными компаниями и даже государствами (случаи с досье правительства Британии о военном потенциале Ирака и исковым заявлением компании SCO).

Следующий пример демонстрирует возможность получения метаданных для документа Microsoft Word, а также позволяет отследить ситуации, когда документ зашифрован с использованием пароля.

On Error Resume Next

Dim wordapp : Set wordapp = WScript.CreateObject("Word.Application")

' Открываем файл fullnamefile с документом Word с паролем " "

Dim doc

Set doc = wordapp.Documents.Open(fullnamefile, _

                        False, _

                        blnReadOnly,_

                        False,

                        " ")

If Err.Number = 5408 then

' Обработка файла с документом Word, который имеет пароль

End if

' Метаданные с пользовательскими свойствами документа

Dim propitem

For Each propitem In wordapp.ActiveDocument.CustomDocumentProperties

' В цикле обрабатываются propitem.Type и propitem.Value

Next

' Метаданные со стандартными свойствами документа

For Each propitem In wordapp.ActiveDocument.BuiltInDocumentProperties

' В цикле обрабатываются propitem.Type и propitem.Value

Next

Err.Clear

On Error GoTo 0

Рисунок 5. Результаты обработки свойств документов MS Word

 

Следует отметить, что документы Microsoft Word могут содержать и другие метаданные, которые нельзя получить путем применения стандартных функций работы с документами Word, для этого требуется визуальный контроль содержимого. В файле могут обнаружиться такие данные, как:

n  имя и полный путь к файлу с документом;

n  адреса электронной почты или информация о веб-сервере;

n  имена принтеров;

n  текстовые фрагменты, удаленные из документа в некоторый момент до сохранения;

n  текстовые фрагменты из других документов, не имеющих отношения к данному, попавшие в него из-за ошибок в Microsoft Word.

Переменные среды и данные реестра

Если подходы, описанные в предыдущих разделах, достаточно универсальны и позволяют исследовать содержимое отдельных носителей информации, то далее речь пойдет о возможностях VBScript, которые требуют запуска скриптов на исследуемом компьютере либо выполнения программ под управлением изучаемой операционной системы.

Обработка с использованием VBScript переменных среды для системы Windows поможет ответить на вопрос, относится ли операционная система к Win9x или W2K, а также получить информацию о некоторых особенностях установки и настройки операционной системы.

Dim wshshell : Set wshshell = WScript.CreateObject("WScript.Shell")

Dim wshproenv : Set wshproenv = wshshell.Environment("PROCESS")

wshproenv (var_env)

 

Таблица 2. Возможные значения строкового параметра var_env для W2K

 

Значение параметра

Пояснения

Данные об операционной системе

OS

Операционная система

WINDIR

Каталог системных файлов*

PROGRAMFILES

Каталог установки программ

PATH

Путь поиска*

COMPUTERNAME

Название компьютера

Данные о текущем сеансе пользователя

USERNAME

Имя пользователя

USERPROFILE

Каталог пользователя

TEMP

Каталог временных файлов*

 

Примечание:

* параметр может использоваться для Win9x и WinME.

Основная информация, особенности настройки операционной системы и прикладных программ сосредоточены в реестре, из которого можно почерпнуть большое количество полезной информации (см. рис. 6).

Рисунок 6. Результаты обработки значений некоторых ключей реестра

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

WMI

В случаях, если есть возможность запустить скрипт под управлением изучаемой операционной системы версии W2К, полезную информацию можно получить используя Microsoft Windows Management Instrument (WMI). Достаточно подробно подходы работы с WMI описаны в статьях Ивана Коробко, опубликованных в журнале «Системный администратор» в 2004 г. В общем случае код инициализации работы с WMI выглядит следующим образом.

' Подключение к службе WMI локального компьютера

Dim wbemservices

Set wbemservices = GetObject("winmgmts://127.0.0.1/Root/Cimv2")

 

Таблица 3. Ключи, которые могут представлять интерес при изучении компьютера

 

Значение

Пояснение

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

Ветвь HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

ProductName

Название продукта*

CurrentVersion

Версия продукта**

ProductId

ID продукта*

CSDVersion

Обновление

RegisteredOwner

Имя пользователя (указанное при установке системы)*

RegisteredOrganization

Название организации (указанное при установке системы)*

SystemRoot

Каталог установки*

SourcePath

Источник установки

InstallDate

Дата установки

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

Ветвь HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

AutoAdminLogon

Автоматический вход (значение 1)

DefaultUserName

Имя пользователя по умолчанию

DefaultDomainName

Название домена по умолчанию

Ветка HKEY_CURRENT_USER\Environment

TEMP

Каталог временных файлов пользователя

Информация по переменным среды.

Ветвь HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment

TEMP

Каталог временных файлов системы

Windir

Каталог системных файлов

PATHEXT

Путь поиска

Размещение некоторых стандартных каталогов Windows.

Ветвь HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

Local Settings

Каталог локальных настроек

Personal

Каталог «Мои документы»***

Recent

Каталог хранения lnk раздела «Документы» меню «Пуск»**

Startup

Каталог хранения lnk раздела «Автозагрузка»**

Настройки экранной заставки. Ветвь HKEY_CURRENT_USER\Control Panel\Desktop

SCRNSAVE.EXE

Включение заставки (указывает наличие значения ключа)

ScreenSaverIsSecure

Включение парольной защиты экрана (значение 1 и наличие заставки)

 

Примечание:

* ключи используются также в Win98 и WinME (название раздела «Windows NT» следует изменить на «Windows»);

** ключи применяются в WinME.

 

Таблица 4. Для Win98 и WinME используются отдельные ключи, располагающиеся в других ветвях

 

Значение

Пояснение

Настройки экранной заставки. Ветвь HKEY_CURRENT_USER\Control Panel\Desktop

ScreenSaveActive

Включение заставки (значение 1)

ScreenSaveUsePassword

Включение парольной защиты экрана

(значение 1 и наличие заставки)

Ветвь HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion

ProductKey

Ключ продукта

Далее следует использовать информацию с названиями необходимых классов и их свойств, знание о которых можно почерпнуть в процессе изучения объектной модели WMI с помощью утилиты WMI Object Browser. Так, например, получить данные, о включенных на момент проверки сетевых интерфейсах, можно с помощью следующего кода.

Dim objectitems

Set objectitems = wbemservices.ExecQuery("Select * from Win32_NetworkAdapter")

Dim objectitem

For Each objectitem In objectitems

    If objectitem.MacAddress<>"" then

       WScript.echo("Сетевая карта название: " + objectitem.Name + Chr(13) + _ " производитель: \

" & objectitem.Manufacturer + Chr(13) + _ " MAC: " & objectitem.MacAddress)

 End if

Next

 

Использование возможностей WMI позволяет разработчику сценария на языке VBScript получить:

n  информацию об установленном в системе оборудовании (марка и параметры жесткого диска, тип и частота процессора, размер оперативной памяти, тип BIOS, характеристики и названия видео-, звуковой и сетевой карт и пр.);

n  данные протокола работы, имеющие отношение к определенным событиям (запуск, остановка операционной системы, установка и извлечение USB-устройства, установка и удаление программного обеспечения и т. п.);

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

Рисунок 7. Результаты обработки свойств классов Win32_ComputerSystem, Win32_OperatingSystem и Win32_UserAccount

 

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

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

n  Невозможно достичь высокого быстродействия для программ на VBScript.

n  При наличии на исследуемом компьютере нескольких операционных систем Windows или даже более одного рабочего пользователя реализация решений с использованием скриптовых языков существенно усложняется. А в случаях, когда на диске имеется раздел операционной системы Linux, VBScript оказывается просто бесполезен.

n  Запуск программ WSH, вообще говоря, влечет за собой изменения на носителе изучаемого компьютера, что не всегда приемлемо, а работа с образами в отдельных случаях может быть достаточно проблематичной.

n  Для VBScript отсутствуют механизмы восстановления на носителях удаленной информации (глубокий анализ подходов для восстановления данных с носителей, обладающих различной файловой структурой, скрупулезно был изложен Крисом Касперски в предыдущих номерах журнала за 2004-2005 гг.).

В качестве бонуса для заинтересованных читателей автором подготовлен набор скриптов, в которых реализованы все возможности VBScript, изложенные в статье (см. http://www.samag.ru раздел «Исходный код»).




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению