программирование :: разное

Windows 98. Макросы или макровирусы — чья возьмет?



Windows 98. Макросы или макровирусы - чья возьмет? Как-то проверяя один из своих почтовых ящиков, получил странное письмо со следующим текстом: "Have fun with these links. Bye." и пристегнутым к нему файлом с расширением .VBS. Конечно же, такое расплывчатое содержание не могло не насторожить, поэтому я не стал открывать присоединенный файл.

Я пользуюсь Outlook, и в этом случае рекомендую выбрать пункт меню “Файл/Открыть” — откроется отдельное окно просмотра письма. Тут нужно щелкнуть правой кнопкой мыши по значку присоединенного файла и в появившемся меню выбрать пункт “Быстрый просмотр”. Одного взгляда на внутреннее содержимое достаточно, чтобы определить — это макрос на языке VBScript, особой разновидности Visual Basic.

Такие программы выполняются сервером сценариев под Windows 98. Он устанавливается автоматически при стандартной установке операционной системы. При его установке в “Панели управления / Установка программ” в подсказке сказано лишь, что сценарии позволяют автоматизировать работу, и больше ничего.

Два момента сразу бросались в глаза:

  1. Самой первой строкой была прописана команда — On Error Resume Next — игнорировать появление возможных ошибок выполнения.
  2. Все строковые константы содержали бессмысленный набор самых разных символов, т.е. были зашифрованы.
Я ни разу не встречал исходных текстов серьезных прикладных программ, в которых применялись бы подобные вещи. Все это только подтверждало главное подозрение — макровирус.

Все строковые константы перед использованием в качестве параметров каких-либо методов расшифровывались специальной функцией, описанной в окончании текста программы. Как выяснилось позже, в начале исходника макровирус содержит зашифрованный код для перезаписи себя в каталог Windows\System\. Это расчет на психологию — как только программист увидит несколько экранных страниц абракадабры, у него отпадет всякая охота дальше разбираться в программе. Я тоже сначала так и поступил, но затем любопытство взяло верх.

Следующей проблемой стали ошибки в функции расшифровки строк — из-за них в некоторых копиях вируса названия OLE-объектов расшифровывались неверно, и для полной ясности пришлось несколько часов провозиться, вычисляя коды символов и разбираясь в применяемой методике шифрования.

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

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

Распространяется по электронной почте и через локальные сети. Конечно, старается что-нибудь испортить.

Но как и любая другая программа на VBScript, он дает некоторое представление о возможностях языка сценариев, встроенного в ОС Windows.

Именно эту тему мы сейчас рассмотрим.

Как и в любом другом языке, сценарию позволено работать с текстовыми файлами. Например:

‘Создание экземпляра объекта

‘ по работе с файлами

Set AA = CreateObject("Scripting.FileSystemObject")

‘Открытие существующего

‘текстового файла

‘ A1 — объект-ссылка на открытый файл

Set A1 = AA.OpenTextFile("C:\autoexec.bat")

‘Создание нового

‘текстового файла

Set A2 = AA.CreateTextFile("C:\temp.txt")

‘запись в файл

A2.WriteLine("Hi, friend!")

‘цикл: проверка конца файла

Do While A1.AtEndOfStream = False

A2.WriteLine(A1.ReadLine)

‘конец цикла

Loop

‘закрытие файлов

A1.Close

A2.Close

‘Копирование файлов

AA.CopyFile "C:\temp.txt", "C:\temp1.txt"

Как Вы уже заметили, синтаксис ничем не отличается от стандартного Visual Basic’а. Более того — все программы, написанные для сервера сценариев, отлично работают в среде Visual Basic в Office. Если хотите — можете даже откомпилировать их в EXE-файлы в среде разработки обычного Visual Basic’а.

Отличие в другом — сервер сценариев потому так и называется, что не содержит собственного обширного набора команд и функций, а позволяет работать через вызовы методов OLE-объектов. Это позволяет, во-первых, создавать сценарии, независимые от версии Visual Basic, а во-вторых, легко переносить их на другие языки программирования.

Поэтому практически все возможности языка VBScript ограничиваются лишь количеством OLE-объектов, установленных в системе, на которой выполняется сценарий VBS.

Так, например, программа-сценарий может управлять работой офисных приложений.

‘Создание объекта Excel

Set A10 = CreateObject("Excel.Application")

‘Запуск приложения

A10.Run

‘Создание новой книги

A10.Workbooks.Add

‘Занесение данных в ячейки текущего листа

A10.Range("A1").Value= 1974

A10.Range("D3").Value= "Hello!"

‘Сделать окно Excel видимым

A10.Visible= (1=1)

‘Сохранение книги

A10.ActiveWorkbook.SaveAs("D:\My book.xls")

‘Завершить работу приложения

A10.Quit

В Microsoft Office входит и Outlook, который также является OLE-сервером, т.е. им можно управлять извне, поэтому его так любят вирусописатели. Все известные макровирусы типа I_Love_You! создавали экземпляры объекта Outlook.Application, и, вызывая его методы, распространяли по Интернету “подметные” письма.

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

‘Вызов Outlook

Set A10 = CreateObject("Outlook.Application")

‘Создание нового письма

Set A13 = A10.CreateItem(0)

‘Ввод адреса

A13.BCC = “nestorpb@nestor.minsk.by”

‘Ввод темы

A13.Subject = “Ответ на статью о VBScript”

‘Содержание

A13.Body = “Спасибо за советы.” & Chr(13) & Chr(10) & “Regards.”

‘Присоединение файла

A13.Attachments.Add “C:\temp.txt”

‘Удалять после отправки

A13.DeleteAfterSubmit = True

‘Послать

A13.Send

A13.Quit

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

Следует отметить, что сам сервер сценариев также является OLE-приложением и позволяет VBS-сценариям и внешним программам использовать свои объекты.

Вот полезный пример — создает ссылку на рабочем столе:

‘Запрос на создание ссылки

If MsgBox(“Do you want to create a shortcut to our site on Desktop?”, 36, "Installing...") = 6 Then

‘Создание объекта по работе с системой

Set A5 = CreateObject("WScript.Shell")



‘Работа с файлами

Set A1 = CreateObject("Scripting.FileSystemObject")

‘Путь к рабочему столу

dir= A5.SpecialFolders("Desktop")

‘Создание полного имени файла

Fname= A1.BuildPath(dir,"MS Office support.URL")

Set A6 = A1.CreateTextFile(Fname,True)

A6.WriteLine("[InternetShortcut]")

A6.WriteLine("URL=http://micr0soft.boom.ru/")

A6.Close

End If

Также с его помощью можно работать с реестром Windows.

Следующий пример записывает в реестр свои данные — в раздел расширений добавляет вызов программы My_program.exe для открытия файлов с расширением ZZZ.

‘Создание объекта для работы с системой

Set R = CreateObject("WScript.Shell")

‘Запись в реестр

R.RegWrite "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Extensions\zzz", "C:\my_program.exe ^.zzz"

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

Внимание!!! При экспериментах с реестром будьте внимательны и аккуратны, дабы не испортить настройки системы.

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

Мои собственные разработки Вы сможете найти на сайте http://micr0soft.boom.ru/ — думаю, Билл Гейтс не обидится за такое название;-).

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

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

Ведь неважно, какой инструмент ты используешь, главное как — по назначению или во вред. Ведь вирус можно написать на чем угодно, но почему-то никто не предлагает отказаться от C++ или Delphi.

В заключение следует добавить, что в мире Unix тоже существует куча подобных интерпретаторов, реализующих языки Perl, REXX и другие. И то, что распространяется океан вирусов, написанных именно на VBScript для Windows, говорит не о том, что Windows хуже, чем Unix, а всего-навсего о том, Windows имеет намного более широкую популярность. Поэтому излишняя осторожность во всем избавит Вас от вероятных потерь данных и нервных стрессов.

Желаю успеха.

Виктор Маковчик
micr0soft.boom.ru

P. S. Вирусов бояться — в Интернет не ходить.

(c) компьютерная газета


DownloadShareware.com

kg03808b.img src=http://www.linkexchange.ru/cgi-bin/rle.cgi?2726?131321156 alt="russian linkexchange banner network" border="0" height="60" width="468">





© компьютерная газета