Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Visual Basic - Макросы или макровирусы - чья возьмёт?

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

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

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

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

Самой первой строкой была прописана команда - On Error Resume Next - игнорировать появление возможных ошибок выполнения.

Все строковые константы содержали бессмысленный набор самых разных символов, т. е. были зашифрованы.

Я ни разу не встречал исходных текстов серьёзных прикладных программ, в которых применялись бы подобные вещи. Всё это только подтверждало главное подозрение - макровирус.

Все строковые константы перед использованием в качестве параметров каких-либо методов расшифровывались специальной функцией, описанной в окончании текста программы. Как выяснилось позже, в начале исходника макровирус содержит зашифрованный код для перезаписи себя в каталог 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"

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

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

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

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

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

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

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

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

Виктор Маковчик.
vic_mak@newmail.net

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
52K
31 августа 2009 года
H@KER
1 / / 31.08.2009
Мне нравитсяМне не нравится
30 мая 2010, 20:10:51
http://sources.codenet.ru/download/3629/ScriptRun.html
Програма для запуску VBScrip і JScript
2.
Аноним
Мне нравитсяМне не нравится
29 мая 2006, 13:43:32
Присоединяюсь к вышевысказанному запросу.
3.
Аноним
Мне нравитсяМне не нравится
10 мая 2005, 12:49:12
Интересует инфа по работе с task из outlook. Экспрот, импорт "OLE - совместимыми " программами. Методы.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог