Материал: Программирование на языке Visual Basic для приложений. Подвальный С.Л., Рог А.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

PasswordDocument:="", _ WritePasswordDocument:="" Open_End:

Exit Sub err Handle:

'Здесь следует обрабатывать ошибки ввода пароля и 'организовывать собственный диалог ввода паролей

MsgBox "Ошибка №: " & Err.Number & vbCrLf _ & Err.Description

Resume open_End End Sub

10.2.2. Защита кода VBA

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

VBA:

установить пароль для просмотра кода VBA в документах и шаблонах — это называется блокировкой проекта VBA, при которой код выполняется, но просмотр его исходных текстов невозможен;

реализовать свое решение в виде дополнительного - подключаемого к приложению модуля СОМ, написанного на языке Visual Basic 6.0 и скомпилированного в динамически подключаемую библиотеку (DLL), что исключает возможность его модификации;

воспользоваться возможностями операционной системы для защиты и управления доступом к файлам документов.

168

Рассмотрим способ защиты проектов VBA — их блокировку. Блокировка проекта аналогична защите документа от его несанкционированного открытия. При этом устанавливается пароль, который следует ввести при открытии проекта в редакторе VBA. Этот способ защиты интеллектуальной собственности использует один и тот же алгоритм.

Блокировать можно проект VBA, содержащийся в документе и шаблоне, причем блокируется весь проект, а не отдельные его части. Это означает, что без введения правильного пароля будет невозможен доступ не только к кодам в созданных пользователем модулях, но и к кодам, размещаемым в стандартных модулях проекта, включая модули ThisDocumenu в приложении Word, этакнига и Лист в приложении Excel и ThisOutlookSession в Приложении Outlook.

Для блокировки проекта следует:

1.открыть документ, содержащий код проекта,

2.войти в редактор VBA,

3.в окне проекта выбрать нужный проект, отобразить его контекстное меню и выбрать команду Properties (Свойства). Отобразится диалоговое окно VBAProject — Project properties (Свойства проекта),

4.на вкладке Protection (Защита) (рис. 10.9) следует ус-

тановить флажок Lock project for viewing,

5.в полях Password (Пароль) и Confirm password

(Подтвердить пароль), ввести и подтвердить пароль открытия проекта.

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

Программным способом задать пароль для блокировки проекта нельзя, но можно проверить, заблокирован он или нет. Для этого следует воспользоваться объектом VBProject

библиотеки Microsoft Visual Basic for Applications Extensibility 5.3, установив ссылку на нее в том проекте, из процедуры которого предполагается проверять блокировку другого про-

169

екта. Свойство VBProject документа приложения хранит ссылку на объект, представляющий проект VBA, содержащийся в документе. По значению его свойства protection можно определить, заблокирован или нет проект документа. Если это свойство равно True, то проект заблокирован, если равно False

— нет. Обычно в коде для этих целей используется константа vbext_pp_locked.

Рис. 10.9. Вкладка Protection диалогового окна

Project Properties

В приводимой ниже процедуре проверяется блокировка содержащегося в документе Word проекта.

Проверка блокировки проекта

Public Sub t()

Dim vbpProj As VBIDE.VBProject Dim docProj As Word.Document

'Открыть документ, проект которого проверяется

Set docProj = Documents.Open("С:\Temp\doc2.doc")

170

'Установить ссылку на проект VBA документа

Set vbpProj = docProj.VBProject

'Проверка свойства Protection проекта VBA If vbpProj.Protection = vbext_pp_locked Then MsgBox "Проект заблокирован"

Else

MsgBox "Проект не заблокирован"

End If End Sub

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

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

10.3. Защита документов от макровирусов

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

171

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

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

тип вируса, который, используя макроязыки приложений,

например VBA, внедряется в документ и ассоциируется с ним. Такие вирусы и называют макровирусами. Первым подобным вирусом был Word Concept — он всего лишь сохранял документ как шаблон, не причиняя никакого вреда информации, хранящейся в компьютере. Для своего размножения макровирусы используют общий шаблон Normal. DOT приложения Word или файл Personal.XLS приложения Excel, копируя себя в эти файлы или другие скрытые места. При открытии документа или рабочей книги они автоматически перекочевывают в них, и таким образом происходит их размножение. Вирусы могут просто шутить: изменять текст в заголовке окна приложения или отображать какие-то сообщения, но в принципе они могут делать все, что позволяет макроязык, например переименовывать и удалять файлы. Поэтому борьба с макровирусами так же важна, как и забота о защите кода VBA — ведь, в конечном счете, это все и составляет безопасность приложения.

Семейство приложений Office имеет следующие способа защиты:

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

поддержка антивирусных программ, разработанных другими фирмами;

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

Поддержка антивирусных программ предполагает установку соответствующего программного обеспечения, которое

172

Источник: https://studfile.net/preview/16565567/