Как защитить excel миф

Время на прочтение
5 мин

Количество просмотров 25K

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

Дисклеймер:

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

Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.

Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты. 

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

Главная панель Надстройки Macro Tools VBA

Первый вид защиты — Обычный пароль

Время на снятие: мгновенно

Недостаток: быстрый доступ к запароленному модулю VBA

Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection). 

Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты. 

Данную защиту можно снять следующим инструментом:

Второй вид защиты — Project is Unviewable

Время на снятие:  от 10 до 15 мин (в ручную)

Недостаток: доступ к исходному коду модуля VBA

Один из самых распространённых видов защит.  Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с  сообщением:  Project is Unviewable.


Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.

Основан, данный вид защиты, на изменение ключей:

CMG=«4A488FCC54D054D054D054D0»

DPB=«0B09CE0F8E108E108E»

GC=«CCCE09520B120C120CED»

в файле vbaProject.bin

Кратко, как создается данная защита

Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin,  в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово! 

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

Алгоритм снятия защиты Project is Unviewable.

1)  Разархивируем подопытный файл, переходим в файл  …xl_relsworkbook.xml.rels

2)      В файле workbook.xml.rels  ищем строку, содержащую слово  vbaProject, обычно имеет следующий вид:  />. В этой строке нас интересует ключ Target,иего значение. Значение является название файла, в котором находится проект VBA. Иногда, защищающий меняет значения ключа на printerSettings.bin.Получается маскировка файла с проектом VBA  под другой файл.

3)      Открываем на редактирование файл, указанный в  ключе Target, ищем в файле ключи  CMG, DPB, GC. И меняем в их названиях любую букву на любую другую, например: CMC, DPC, CC. При поиске нужно быть аккуратным, так как защищающий может поместить  в проект форму,  подписью повторяющую один из ключей, например такую: DPB=«0B09CE0F8E108E108E». При ее изменении проект VBA, будет удален из книги Excel.  Сохраняем и закрываем файл.

4)      Переводим архив обратно в файл Excel.

5)      Запускаем приложение Excel, выполняем следующее: в Центре управления безопасностью -> Параметры макросов  -> Отключить все макросы без уведомления. Перезапускаем Excel. Данная операция нужна, для блокировки защиты, которую иногда ставят авторы макросов. Данная защита реализована следующим образом. В модуле VBA «ЭтаКнига», создается процедуры, реагирующие на события открытия книги или закрытия книги. Эти события обычно проверяют, наличие пароля на проект VBA, запрет сохранения и прочее.

6)      Открываем файл. Если все правильно сделано то, Excel, будет ругаться на не правильные ключи, которые мы отредактировали, в пункте 3. Жмем, да, пока данные сообщения не закончатся и диалоговое окно закроется. 

      Если данное сообщение не появляется то, вы отредактировали не файл который содержит проект VBA.

7)      Открываем проект VBA. После всего, проект VBA должен быть доступен.

8)       Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле workbook.xml.rels в ключе Target  установлено printerSettings.bin.При сохранение,  Excel  исправляет это на значение на vbaProject.bin

Данную защиту можно установить и снять следующим инструментом:

Третий вид защиты — Hidden  Module, скрытые модули VBA

Время на снятие:  от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.

Недостаток: доступ к коду модуля VBA

Менее распространенный вид  защиты обычно встречается в комбинации с защитой Project is Unviewable. При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе  OpenOffice  или  LibreOffice (так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля). 

Просмотр кода VBA в  LibreOffice

Кратко, как создается данная защита

Для создания данной защиты нужно отредактировать файл  с проектом VBA — vbaProject.bin  или printerSettings.bin,в зависимости от настроек в файле …xl_relsworkbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z.  С нужными названиями модулей.

Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.

Данную защиту можно установить следующим инструментом.

Четвертый вид защиты — Обфускация кода

Время на снятие:  неизвестно, зависит от объема кода и пере использования частей кода

Обфусцированный код VBA

Недостаток:  необходимость тестирование файла после обфускации, на работоспособность

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

Для де-обфускации кода нужно иметь  время, специализированное ПО.

Данную защиту можно установить следующим инструментом.

Пятый вид защиты — Перенос кода в dll

Время на снятие:  неизвестно, зависит от языка программирования и квалификации

Недостаток:  необходимости в дополнительном  файле dll

Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине,  необходимости за файлом Excel, «таскать» дополнительный файл, dll.

Для получения доступа к коду dll, нужно обладать специальными знаниями.

Заключение

В заключении хочу выделить бесполезность защит:  Project is Unviewable и Hidden  Module которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного  файла, в таких программах как OpenOffice  или  LibreOffice. Так и снимаются без особых проблем.

Правильная защита макросом

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

Worksheets("Лист1").Unprotect Password:="123"
'тут макрос делает действия
Worksheets("Лист1").Protect Password:="123"

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

Есть гораздо более легкий и красивый способ решить задачу.

Нажмите Alt+F11, чтобы попасть в редактор Visual Basic. Затем найдите в левом верхнем углу в окне Project Explorer (если его не видно, то нажмите Ctrl+R) модуль ЭтаКнига (ThisWorkbook) и откройте двойным щелчком:

smart_protection1.gif

Скопируйте туда этот код:

Private Sub Workbook_Open()
    'включаем защиту первого листа для пользователя, но не макроса
    Worksheets("Лист1").Protect Password:="123", UserInterfaceOnly:=True
    
    'второй лист защищаем аналогично, но с возможностью пользоваться группировкой
    Worksheets("Лист2").EnableOutlining = True
    Worksheets("Лист2").Protect Password:="555", UserInterfaceOnly:=True
End Sub

Эта процедура будет автоматически запускаться при открытии файла и ставить защиту на заданные листы книги. Причем параметр UserInterfaceOnly, который мы дополнительно ввели, указывает Excel, что защита не должна распространяться на действия выполняемые макросом, а только на операции пользователя. Для второго листа все еще веселее — строка с параметром EnableOutlining разрешает пользоваться группировкой (символы плюс-минус для сворачивания-разворачивания строк и столбцов) на защищенном листе.

Всего три строчки кода, зато как удобно!

Ссылки по теме

  • Что такое макросы и куда копировать их код
  • Как поставить защиту листа, книги или всего файла

Содержание

  1. Метод Workbook.Protect (Excel)
  2. Синтаксис
  3. Параметры
  4. Поддержка и обратная связь
  5. Метод Worksheet.Protect (Excel)
  6. Синтаксис
  7. Параметры
  8. Замечания
  9. Поддержка и обратная связь
  10. Как защитить лист от пользователя, но не от макроса?

Метод Workbook.Protect (Excel)

Защищает книгу, чтобы ее нельзя было изменить.

Синтаксис

expression. Защита (пароль, структура, Windows)

Выражение Переменная, представляющая объект Workbook .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, указывающая пароль для листа или книги с учетом регистра. Если этот аргумент опущен, можно снять защиту листа или книги, не используя пароль. В противном случае необходимо указать пароль для отмены защиты листа или книги. Если вы забыли пароль, вы не сможете снять защиту листа или книги.

Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки. В слабых паролях эти элементы не комбинируются. Надежный пароль: Y6dh!et5. Слабый пароль: House27.

Длина паролей должна быть не меньше 8 символов. В парольной фразе лучше использовать 14 или более символов.

Очень важно запомнить пароль. Если вы его забудете, корпорация Майкрософт не сможет его восстановить. Храните пароли, записанные на бумаге, в безопасном месте вдали от информации, которую они защищают. Структура Необязательный Variant Значение true для защиты структуры книги (относительное положение листов). Значение по умолчанию — False. Windows Необязательный Variant Значение true для защиты окон книги. Если этот аргумент опущен, окна не будут защищены.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Метод Worksheet.Protect (Excel)

Защищает лист, чтобы его нельзя было изменить.

Синтаксис

expression. Защита (Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables )

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, указывающая пароль для листа или книги с учетом регистра. Если этот аргумент опущен, можно снять защиту листа или книги, не используя пароль. В противном случае необходимо указать пароль для отмены защиты листа или книги. Если вы забыли пароль, вы не сможете снять защиту листа или книги.

Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки. В слабых паролях эти элементы не комбинируются. Надежный пароль: Y6dh!et5. Слабый пароль: House27. Длина паролей должна быть не меньше 8 символов. В парольной фразе лучше использовать 14 или более символов.

Очень важно запомнить пароль. Если вы его забудете, корпорация Майкрософт не сможет его восстановить. Храните пароли, записанные на бумаге, в безопасном месте вдали от информации, которую они защищают. DrawingObjects Необязательный Variant Значение true для защиты фигур. Значение по умолчанию — True. Contents Необязательный Variant Значение true для защиты содержимого. Для диаграммы это защищает всю диаграмму. Для листа это защищает заблокированные ячейки. Значение по умолчанию — True. Scenarios Необязательный Variant Значение true для защиты сценариев. Этот аргумент действителен только для листов. Значение по умолчанию — True. UserInterfaceOnly Необязательный Variant Значение true для защиты пользовательского интерфейса, но не макросов. Если этот аргумент опущен, защита применяется как к макросам, так и к пользовательскому интерфейсу. AllowFormattingCells Необязательный Variant Значение True позволяет пользователю форматировать любую ячейку на защищенном листе. Значение по умолчанию — False. AllowFormattingColumns Необязательный Variant Значение True позволяет пользователю форматировать любой столбец на защищенном листе. Значение по умолчанию — False. AllowFormattingRows Необязательный Variant Значение True позволяет пользователю форматировать любую строку на защищенном листе. Значение по умолчанию — False. AllowInsertingColumns Необязательный Variant Значение True позволяет пользователю вставлять столбцы на защищенный лист. Значение по умолчанию — False. AllowInsertingRows Необязательный Variant Значение True позволяет пользователю вставлять строки на защищенный лист. Значение по умолчанию — False. AllowInsertingHyperlinks Необязательный Variant Значение True позволяет пользователю вставлять гиперссылки на защищенный лист. Значение по умолчанию — False. AllowDeletingColumns Необязательный Variant Значение True позволяет пользователю удалять столбцы на защищенном листе, где каждая ячейка удаляемого столбца разблокирована. Значение по умолчанию — False. AllowDeletingRows Необязательный Variant Значение True позволяет пользователю удалять строки на защищенном листе, где каждая ячейка в удаляемой строке разблокирована. Значение по умолчанию — False. AllowSorting Необязательный Variant Значение True позволяет пользователю выполнять сортировку на защищенном листе. Каждая ячейка в диапазоне сортировки должна быть разблокирована или не защищена. Значение по умолчанию — False. AllowFiltering Необязательный Variant Значение True позволяет пользователю задавать фильтры на защищенном листе. Пользователи могут изменять условия фильтра, но не могут включать или отключать автоматический фильтр. Пользователи могут задавать фильтры для существующего автофильтра. Значение по умолчанию — False. AllowUsingPivotTables Необязательный Variant Значение True позволяет пользователю использовать отчеты сводной таблицы на защищенном листе. Значение по умолчанию — False.

Замечания

В предыдущих версиях, если применить этот метод с аргументом UserInterfaceOnly , равным True , а затем сохранить книгу, при повторном открытии книги будет полностью защищен весь лист (а не только интерфейс). Чтобы повторно включить защиту пользовательского интерфейса после открытия книги, необходимо снова применить этот метод, если параметр UserInterfaceOnly имеет значение True.

Если вы хотите внести изменения в защищенный лист, можно использовать метод Protect на защищенном листе, если указан пароль. Кроме того, другой метод — снять защиту листа, внести необходимые изменения, а затем снова защитить лист.

Незащищено означает, что ячейка может быть заблокирована (диалоговое окно Форматирование ячеек ), но включена в диапазон, определенный в диалоговом окне Разрешить пользователям изменять диапазоны , и пользователь отключил защиту диапазона паролем или был проверен с помощью разрешений NT.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Как защитить лист от пользователя, но не от макроса?

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

Sub Write_in_ProtectSheet() ‘снимаем защиту с листа Worksheets(«Лист1»).Unprotect ‘если лист защищен с паролем 1234: Worksheets(«Лист1»).Unprotect «1234» ‘действия на листе.Например,изменение значения ячейки А1 Cells(«A1»).Value = «www.excel-vba.ru» ‘устанавливаем защиту на лист Worksheets(«Лист1»).Protect ‘если лист был защищен с паролем 1234: Worksheets(«Лист1»).Protect «1234» End Sub

Но есть метод проще.
Если выполнить ниже приведенную строчку кода, то пользователю невозможно будет изменить данные на листе(кроме тех, которые Вы сами разрешите), однако код VBA(макрос) сможет преспокойно вносить любые изменения, не снимая защиту.

Sub Protect_for_User_Non_for_VBA() ActiveSheet.Protect Password:=»1111″, UserInterfaceOnly:=True End Sub

Основную роль здесь играет параметр UserInterfaceOnly . Если его установить в True , то это говорит Excel-ю, что коды VBA могут выполнять действия по изменению ячеек, не снимая защиты методом Unprotect. Однако сама защита листа при этом не снимается и вручную изменить данные ячеек, не сняв защиту с листа, невозможно.
Код выше устанавливает такую защиту только на активный лист книги. Но можно указать лист явно(например установить защиту на лист с именем Лист1 в активной книге и лист, идущий вторым по порядку в книге( Sheets(2) )):

Sub Protect_for_User_Non_for_VBA() Sheets(2).Protect Password:=»1111″, UserInterfaceOnly:=True Sheets(«Лист1″).Protect Password:=»1111», UserInterfaceOnly:=True End Sub

Так же приведенный код можно еще чуть модернизировать и разрешить пользователю помимо изменения ячеек еще и использовать автофильтр:

Sub Protect_for_User_Non_for_VBA() Sheets(2).Protect Password:=»1111″, UserInterfaceOnly:=True ‘на лист «Лист1» поставим защиту и разрешим пользоваться фильтром Sheets(«Лист1″).Protect Password:=»1111», AllowFiltering:=True, UserInterfaceOnly:=True End Sub

Можно разрешить и другие действия(выделение незащищенных ячеек, выделение защищенных ячеек, форматирование ячеек, вставку строк, вставку столбцов и т.д. Чуть подробнее про доступные параметры можно узнать в статье Защита листов и ячеек в MS Excel). А как будет выглядеть строка кода с разрешенными параметрами можно узнать, записав макрорекордером установку защиты листа с нужными параметрами:

После этого получится строка вроде такой:

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowFiltering:=True

здесь я разрешил использовать автофильтр( AllowFiltering:=True ), вставлять строки( AllowInsertingRows:=True ) и столбцы( AllowInsertingColumns:=True ).Чтобы добавить возможность изменять данные ячеек только через код VBA, останется добавить параметр UserInterfaceOnly:=True:

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True

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

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True, Password:=»1111″

Этот метод всем хорош, все отлично, но. Параметр UserInterfaceOnly сбрасывается сразу после закрытия книги. Т.е. если установить таким образом защиту на лист и закрыть книгу, то при следующем открытии защиты этой уже не будет — останется лишь стандартная защита. Поэтому, если необходимо такую защиту видеть постоянно, то данный макрос лучше всего прописывать на событие открытия книги(модуль ЭтаКнига(ThisWorkbook)).
Сделать это можно таким кодом:

Private Sub Workbook_Open() Sheets(«Лист1″).Protect Password:=»1111», UserInterfaceOnly:=True End Sub

Этот код сработает только после того, как книга будет открыта. А это значит, чтобы увидеть результат необходимо после записи этого кода в ЭтаКнига сохранить книгу, закрыть её и открыть заново. Тогда в сам момент открытия книги код сработает и установит на «Лист1» правильную защиту.

Часто так же бывает необходимо устанавливать одинаковую защиту на все листы книги. Сделать это можно таким кодом, который так же должен быть размещен в модуле ЭтаКнига(ThisWorkbook):

Private Sub Workbook_Open() Dim wsSh As Object For Each wsSh In Me.Sheets Protect_for_User_Non_for_VBA wsSh Next wsSh End Sub Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet) wsSh.Protect Password:=»1111″, UserInterfaceOnly:=True End Sub

Плюс во избежание ошибок лучше перед установкой защиты снимать ранее установленную(если она была):

Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet) wsSh.Unrotect «1111» wsSh.Protect Password:=»1111″, UserInterfaceOnly:=True End Sub

Ну и если надо такую защиту установить только на конкретные листы, то убираем цикл и вызываем процедуру только для нужных листов. Если известны их имена, то можно прибегнуть к использованию массивов:

Private Sub Workbook_Open() Dim arr, sSh arr = Array(«Отчет», «База», «Бланк») For Each sSh in arr Protect_for_User_Non_for_VBA Me.Sheets(sSh) Next End Sub Sub Protect_for_User_Non_for_VBA(wsSh As Worksheet) wsSh.Protect Password:=»1111″, AllowFiltering:=True, UserInterfaceOnly:=True End Sub

Для применения в своих задачах в данном коде необходимо лишь изменить(добавить, удалить, вписать другие имена) имена листов в этой строке: Array(«Отчет», «База», «Бланк»)

Примечание: Метод защиты через UsefInterface всем хорош, но есть одно ограничение: метод невозможно использовать в книге с общим доступом(Рецензирование -Доступ к книге), т.к. при общем доступе существуют ограничения, среди которых и такое, которое запрещает изменять параметры защиты для книги в общем доступе.

Статья помогла? Поделись ссылкой с друзьями!

Источник

Защитить проект 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
  • Инструмент для обфускации на Python

Обфускация — эффективный способ защиты 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. Но стоимость данного ПО довольно высокая.

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

Как защитить код VBA

Код VBA, который вы пишете, является сердцем и душой вашей электронной таблицы. Защита кода VBA — это то, что нужно сделать, чтобы ваш код не был украден или использован без вашего ведома. В этом посте будут рассмотрены различные способы защиты вашего кода VBA, чтобы только ВЫ могли легко получить к нему доступ.

Почему вы должны заботиться о защите кода VBA?

VBA — это макроязык, который можно использовать для создания автоматических задач или действий в Excel, Word, PowerPoint. Есть несколько причин, по которым вы должны защищать свой код VBA:

  • Чтобы защитить ваш код VBA от случайного изменения. Код VBA — мощный инструмент для пользователей Excel, но он также может стать источником разочарования для тех, кто им не пользуется. Если вы не защитите VBA паролем, тогда другие, использующие вашу книгу, могут получить доступ к коду и внести в него изменения, не зная, что они на самом деле делают. Вы не хотите отлаживать свой код VBA, потому что это может быть болезненно — могут потребоваться часы, чтобы выяснить, почему, а затем еще больше времени!
  • Для защиты вашей интеллектуальной собственности. Код VBA может быть очень ценным для некоторых компаний. Если кто-то другой получит доступ к вашей таблице и скопирует функциональность, которую вы используете, то он потенциально может выдать ее за свою работу и продать множеству компаний. Защитите свой ценный исходный код с помощью мер безопасности. Не позволяйте никому легко воровать или копировать.
  • Чтобы защитить себя от людей, использующих вашу работу. Если у вас есть ценный фрагмент кода VBA, который упрощает или повышает эффективность вашей работы, вы можете защитить его только для личного использования.

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

# 1 Защита паролем кода VBA в Excel с помощью инструмента VBAProject

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

  • Уровень безопасности: слабый; Есть такие инструменты, как Средство удаления паролей VBA который можно использовать для разблокировки пароля за считанные минуты;
  • Сложность: Легкая;
  • Стоимость: бесплатно;

Шаг 1. Выберите «Visual Basic» в меню «Разработчик» в Excel.

Откройте панель Visual Basic на вкладке разработчика Excel

Шаг 2. Чтобы заблокировать проект VBA, нажмите «Инструменты» на панели и выберите «Свойства VBAProject».

Выберите Свойства VBAProject, чтобы установить пароль

После нажатия на этот пункт меню вы должны увидеть следующее диалоговое окно:

Основной интерфейс свойств VBAProject

Вкладка «Общие» выбрана по умолчанию, но щелкните вкладку «Защита».

Шаг 3. Установите флажок «Заблокировать проект для просмотра», затем дважды введите свой пароль в оба поля и нажмите «ОК».

Заблокировать проект VBA для просмотра и установить пароль для защиты кода VBA

Шаг 4. Сохраните его и снова откройте файл Excel. Вы сможете узнать, правильно ли включена защита паролем VBA, дважды щелкнув свой проект VBA. Когда вы защищаете свой проект VBA паролем, это предотвратит случайное изменение кем-либо.

Пароль, необходимый для просмотра кода VBA

# 2 Используйте обфускацию VBA для защиты макрокода

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

  • Уровень безопасности: средний; Кто-то по-прежнему сможет найти время и потратить достаточно ресурсов на восстановление кода;
  • Сложность: Средняя; В зависимости от уровня;
  • Стоимость: Бесплатный обфускатор VBA/ Премиум;

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

# 3 Преобразование кода VBA в динамически подключаемую библиотеку (DLL)

Компиляторы, такие как Visual C ++ и Visual Basic, создают приложения, которые сложно взломать. Это связано с тем, что код компилируется в исполняемые файлы или файлы библиотеки динамической компоновки. Таким образом, мы также можем скомпилировать код VBA в файл библиотеки динамической компоновки, а затем использовать его в Excel.

  • Уровень безопасности: высокий;
  • Сложность: Средняя;
  • Стоимость: бесплатно;

Этот метод защиты настоятельно рекомендуется, но он не гарантируется на 100%. Чтобы узнать, как компилировать, смотрите инструкции на VbaCompiler.com: 10 шагов для компиляции кода VBA в родную Windows DLL.

Компиляция кода VBA файла Excel успешно выполнена с помощью VbaCompiler for Excel

# 4 Конвертировать VBA в C или C ++

Перевод ваших макросов на C или C ++ сложнее реконструировать, чем VBA. Если вы хотите защитить свой код, это лучший способ.

  • Уровень безопасности: Высший; Получить код без прав практически невозможно; Но опять же, это не 100% гарантия;
  • Сложность: Сложный и трудоемкий; Поскольку VBA и C / C ++ — такие разные языки, это сложнее, поскольку вам придется вложить много усилий.

Заключение

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

Фотография Сусанны

Сусанна — контент-менеджер и писатель Filelem. Она много лет была опытным редактором и дизайнером макетов книг, и ей было интересно пробовать и тестировать различное программное обеспечение для повышения производительности. Она также является большой поклонницей Kindle, которая использует Kindle Touch почти 7 лет и носит Kindle практически везде, куда бы она ни пошла. Не так давно у устройства кончился срок службы, поэтому Сюзанна с радостью купила Kindle Oasis.

Понравилась статья? Поделить с друзьями:
  • Как защитить все кнопки в excel
  • Как заштриховать ячейку в таблице word
  • Как защитить весь лист кроме одной ячейки excel
  • Как заштриховать ячейку в excel по диагонали
  • Как защитить в excel только нужные ячейки