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
Оставить комментарий
Комментарии
Програма для запуску VBScrip і JScript