Yandex.Метрика

Защитить проект VBA

Защитить проект VBA

Зачастую, при создании проекта на VBA в Excel, хочется его надежно защитить (особенно, если он какой-то крупный). В первую очередь, это нужно для того, чтобы никто не «украл» Ваши личные интеллектуальные разработки, либо для того, чтобы никто не мог внести какие-либо изменения в код. В данной статье как раз будет рассказано о некоторых способах, с помощью которых можно защитить проект VBA: от самых простейших, до более сложных.

Установка пароля на проект VBA

Первый и наиболее простой способ защитить проект VBA — стандартная установка пароля. Для установки пароля, в открытом редакторе VBA, необходимо нажать «Tools» — «VBA Project Properties» и перейти на вкладку «Protection», как показано на скриншоте ниже:

Защитить проект VBA: свойства проекта

Далее, необходимо ввести пароль и подтвердить его. Если нужно закрыть проект от просмотра кода — установите галочку в поле «Lock project for viewing». И все, пароль установлен. Теперь, в следующий раз, когда вы зайдете в редактор VBA и попытаетесь открыть VBA-проект — необходимо будет ввести пароль:

Защитить проект VBA: стандартный пароль

Данный способ поможет защитить проект VBA только от простых пользователей: если очень захотеть, пароль можно легко взломать. Такая защита не является надежной.

Обфускация кода

Обфускация — это изменение (запутывание) кода программы с целью затруднения его восприятия и понимания. В случае с кодом VBA — удаление отступов, удаление комментариев и переименовывание переменных или даже самих процедур.

Например, имеется простейший код, который сравнивает две переменные и выводит сообщение:

Sub sravnenie()
Dim a As Double 
Dim b As Double
a = 50 'первая переменная
b = 30 'вторая переменная
If (a >= b) Then 'сравнение
    MsgBox a & " больше или равно " & b, "Сравнение"
Else
    MsgBox a & " меньше " & b, "Сравнение"
End If
End Sub

После обфускации получится следующий код:

Sub q3294ac481200c9f62b6a7dac981cea19()
Dim b17fea5c0191a5bc3c2640b8f16b14e98 As Double
Dim ea06f6764676da2a53039a8c582369215 As Double
b17fea5c0191a5bc3c2640b8f16b14e98 = 50
ea06f6764676da2a53039a8c582369215 = 30
If (b17fea5c0191a5bc3c2640b8f16b14e98 >= ea06f6764676da2a53039a8c582369215) Then
MsgBox b17fea5c0191a5bc3c2640b8f16b14e98 & " больше или равно " & ea06f6764676da2a53039a8c582369215, "Сравнение"
Else
MsgBox b17fea5c0191a5bc3c2640b8f16b14e98 & " меньше " & ea06f6764676da2a53039a8c582369215, "Сравнение"
End If
End Sub

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

Для того, чтобы защитить проект VBA с помощью обфускации, можно воспользоваться готовыми инструментами:

Обфускация — эффективный способ защиты VBA (и не только VBA). Его также можно использовать с первым способом: если пароль взломают, то с анализом и интерпретацией кода придется довольно долго потрудиться.

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

Изменение бинарного файла (Project is unviewable)

Еще один эффективный способ защитить проект VBA — небольшое изменение бинарного кода самого файла Excel. Что для этого нужно?

Сначала, необходимо сохранить исходный файл в формате .xlsb (рекомендуется именно этот формат), либо в формате .xlam, если это надстройка. После чего, необходимо сменить расширение файла на .zip и открыть его через архиватор (Winrar или 7-Zip). Затем, нужно зайти в папку «xl» и найти там файл vbaProject.bin. Файл необходимо куда-нибудь перенести/скопировать, например, на рабочий стол.

Защитить проект VBA: vbaProject.bin

Далее, нужно открыть vbaProject.bin через текстовый редактор Notepad++ (именно через него, так как через стандартный блокнот не получится) и найти там строчки, содержащие «CMG», «DPB» и «GC» (они находятся почти в самом низу). Все символы, находящиеся в кавычках после них, необходимо заменить на символ «F», как это сделано на примере ниже:

Защитить проект VBA: бинарный файл

Сохраняем файл vbaProject.bin, закрываем, переносим его обратно в архив в ту же папку «xl». Меняем обратно расширение с .zip на .xlsb или .xlam (в зависимости от того, в каком расширении файл был сохранен), и все, готово. Теперь, при попытке просмотреть/изменить модули нашего проекта, мы будем видеть сообщение «Project is unviewable»:

Защитить проект VBA: Project is unviewable

Данный способ поможет эффективнее защитить проект VBA от взлома более опытными пользователями. Но даже эту защиту можно взломать, если очень захотеть.

Важно! Не забудьте сделать резервную копию исходного файла, в противном случае, вы больше не сможете просматривать и редактировать свой код.

Создание надстройки .dll

Еще один из способов, с помощью которого можно защитить проект VBA — создание .dll надстройки. Про данный способ я расскажу вкратце, так как сам я .dll-надстройки не создавал. Суть заключается в том, что код ваших макросов вы пишете на другом языке программирования, например на C++, а затем компилируете его в .dll или .exe файл, который затем подключается к Excel. Исходный код из скомпилированного файла извлечь крайне трудно.

Интересную тему, с которой можно начать небольшое погружение в создание .dll-надстройки, можно прочитать на форуме PlanetaExcel.

Использование стороннего софта

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

  • XLS Padlock (139€)
  • VBASH (80$)
  • Unviewable+ (100$ и выше, в зависимости от лицензии)
  • VbaCompiler (299$ стандартная лицензия) — создает .dll-файл (используется язык C)

Стоит отметить, что файлы, защищенные с помощью VBASH и самой дешевой версией Unviewable можно довольно быстро взломать. Вероятно, стоимость этого программного обеспечения «слегка» завышена и, возможно, следует пользоваться другими способами. А вот с помощью VbaCompiler защитить проект VBA можно очень надежно, так как он автоматически создает .dll-надстройку с использованием языка C. Но стоимость данного ПО довольно высокая.

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

2 комментария

  1. Алексей Смирнов 23.01.2020
  2. Данила 28.05.2021

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