Vba excel как защитить макрос

It is a best practice,  to protect the Macro (VBA Code) from other users to edit or view. In this article, we explain to create a simple macro and protect the same “VBA Project” using a password in Excel from other users.

Implementation:

Follow the below steps to protect your excel macro with a password:

Step 1: Open an excel file, to create a simple “hello world” macro.

Step 2: Press Alt + F11 – to open Visual Basic Editor.

Step 3: Click Insert >> Module, which will add a new module as in Img1.

Img 1

Step 4: Type the below code in “code window”.

Sub firstMacro()
MsgBox "Hello World"
End Sub

Step 5: Right-click “VBAProject (Book1)” and then click “VBAProject Properties”.

Step 6: GoTo Protection Tab >> Check “Lock project for viewing” and type your password in both Password and Confirm password input text boxes. Press “OK” 

Step 7: Save your Excel workbook as Excel Macro-Enabled Workbook (*.xlsm) and close

Step 8: Now reopen your excel file.  Press Alt+F8 – to open the Macro dialog box. Select the macro “firstMacro” and click “RUN”.

Step 9: Our macro will pop up below the message box. Close or press OK to hide the message box

Step 10: Press Alt + F11 – to open Visual Basic Editor. Now user cannot see any information in the VBA. 

Step 11: Double click “VBAProject (vbaProtect.xlsm)”, It will ask the user to enter a password.

Step 12: Type your password and press “OK”.  Now user can see all the excel objects and Macro.

At this point we have successfully created a macro in VBA and protected it with a password.

Хитрости »

1 Апрель 2016              45118 просмотров


Для тех кто уже освоился более-менее в программировании на Visual Basic for Application рано или поздно непременно встает вопрос: как защитить свой код от изменений или даже от просмотра? Как правило это делается в файлах, которые в дальнейшем «гуляют по рукам». Т.е. автор создал и потом файл отсылается или другим пользователям, или клиентам, поставщикам и т.п. Чтобы у тех, кто будет в дальнейшем работать с этим файлом, не было возможности подсмотреть проект и тем более что-то в нем изменить. В каких-то случаях цель такой защиты это защита «от дурака»: чтобы по незнанию не изменили так, что файл просто откажется работать. Так же есть и другая причина — код является «коммерческим» и в нем присутствует некая защита от использования функционала по истечению ДЕМО-периода и надо закрыть код, чтобы эту защиту не «сломали».
По сути защитить проект VBA стандартными средствами совсем не сложно. Переходим в проект VBA (вкладка Разработчик(Developer)Visual Basic или сочетание клавиш Alt+F11), далее:

  1. ToolsVBAProject Properties -вкладка Protection
  2. устанавливаем галочку Lock project for viewing. Если галочка не установлена, то весь код можно будет просматривать и изменять, но изменить или просмотреть свойства самого проекта будет уже невозможно без снятия пароля.
  3. вписываем пароль в полях Password и Confirm password

 
Чтобы снять пароль с проекта VBA необходимо перейти в проект VBA файла(вкладка Разработчик(Developer)Visual Basic или сочетание клавиш Alt+F11) и:

  1. ToolsVBAProject Properties -вкладка Protection
  2. снимаем галочку Lock project for viewing
  3. удаляем пароль в полях Password и Confirm password

 
Для чего вообще может быть нужна отдельно галочка Lock project for viewing? Ведь как я написал выше — если её не поставить, весь код проекта становится доступен. Смысл такой защиты? Я применяю так: в коммерческой разработке устанавливаю пароль на проект. Но на само время разработки галочку не ставлю, чтобы у меня был доступ к коду без постоянного ввода пароля. Как только разработка завершена, перед тем как выслать файл заказчику мне остается только установить эту галочку и все — проект защищен(ведь пароль уже установлен). Если потом нужны доработки — то схема такая же: на время доработки снимаю галочку и ставлю обратно перед тем как выслать. Пароль при этом какой был, тот и остается — постоянно его вводить не требуется.


Хочу так же отметить, что пароль от проекта VBA ломается на ура(программ для этого достаточно в сети, перечислять не буду — кому надо сможет найти, а кто не сможет — значит не так уж и надо). Корпорацией Microsoft данный пароль точно не разрабатывался для защиты проекта от несанкционированного взлома и скорее был направлен больше на защиту от дурака. А может дело в том, что сам VBE практически не дорабатывался чуть ли не с самого его создания.
В любом случае, для тех, кто хочет чуть надежнее защитить свой проект VBA лучше использовать для этого сторонние утилиты. Например, очень хорошая программа для рядовых пользователей Protect VBA от eliansoft (http://www.eliansoft.com). Данная программа делает недоступным проект VBA. Никаких паролей вводить не надо — проект просто недоступен даже для ввода пароля. Последняя бесплатная версия была 1.6. Сейчас в сети её уже практически не найти в бесплатном варианте, т.к. разработчики убрали её с офф.сайта и постарались убрать отовсюду, видимо. Но т.к. у меня эта программа есть — выкладываю здесь, но скачать можно только после регистрации на сайте (чтобы тот же eliansoft не смог добраться).

Скачать Protect VBA

  Protect_VBA.zip (287,1 KiB, 544 скачиваний)
У Вас нет прав для скачивания этого файла. Возможно, Вы не зарегистрированы на сайте. Зарегистрируйтесь и попробуйте скачать снова.

Как использовать:

  • создаете файл с кодом, сохраняете, закрываете
  • запускаете Protect VBA
  • выбираете файл, проект VBA которого надо защитить
  • нажимаете Protect
  • будет предложено выбрать папку для сохранения защищенного файла. Здесь лучше заранее создать папку для сохранения файла, т.к. программа делает копию оригинального файла и не даст сохранить непосредственно тот же файл. Что к лучшему — ведь должен же у нас остаться файл с открытыми кодами :)

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

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Как защитить код 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.

Защитить проект 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. Но стоимость данного ПО довольно высокая.

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

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

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

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 разрешает пользоваться группировкой (символы плюс-минус для сворачивания-разворачивания строк и столбцов) на защищенном листе.

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

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

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

Всем привет! Я обычный пользователь 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. Так и снимаются без особых проблем.

Just like you can password protect workbooks and worksheets, you can password protect a macro in Excel from being viewed (and executed).

Place a command button on your worksheet and add the following code lines:

  1. First, create a simple macro that you want to protect.

    Range("A1").Value = "This is secret code"

  2. Next, click Tools, Then VBAProject Properties

enter image description here

Click Tools, VBAProject Properties…

  1. On the Protection tab, check «Lock project for viewing» and enter a password twice.

enter image description here

Enter a Password Twice

  1. Click OK.

  2. Save, close and reopen the Excel file. Try to view the code.

enter image description here

The following dialog box will appear:

Password Protected from being Viewed

You can still execute the code by clicking on the command button but you cannot view or edit the code anymore (unless you know the password). The password for the downloadable Excel file is «easy».

  1. If you want to password protect the macro from being executed, add the following code lines:
Dim password As Variant
password = Application.InputBox("Enter Password", "Password Protected")

Select Case password
    Case Is = False
        'do nothing
    Case Is = "easy"
        Range("A1").Value = "This is secret code"
    Case Else
        MsgBox "Incorrect Password"
End Select

Result when you click the command button on the sheet:

enter image description here

Password Protected from being Executed

Explanation: The macro uses the InputBox method of the Application object. If the users clicks Cancel, this method returns False and nothing happens (InputBox disappears). Only when the user knows the password («easy» again), the secret code will be executed. If the entered password is incorrect, a MsgBox is displayed. Note that the user cannot take a look at the password in the Visual Basic Editor because the project is protected from being viewed

Установка пароля на VBA-проект и снятие защиты с него. Отключение забытого пароля с проекта VBA, созданного в книге Excel с расширением .xlsm.

Защита проекта VBA паролем помогает от случайного или намеренного изменения кода обычным пользователем. От злоумышленников простая установка пароля не спасет.

Защита проекта VBA стандартными средствами:

  1. Перейдите в окно «VBAProject — Project Properties» через пункты меню: «Tools» >> «VBAProject Properties».
  2. В открывшемся окне выберите вкладку «Protection» и установите галочку в чек-боксе «Lock project for viewing».
  3. Введите пароль в поле «Password» и повторите пароль в поле «Confirm password».

Окно «VBAProject - Project Properties»

  1. Нажмите кнопку «OK» и закройте книгу Excel.

При следующем открытии этой книги проект VBA будет защищен.

Снятие защиты с VBA-проекта

Снятие защиты с проекта VBA стандартными средствами:

  1. Перейдите в окно «VBAProject — Project Properties» через пункты меню: «Tools» >> «VBAProject Properties».
  2. В открывшемся окне выберите вкладку «Protection» и уберите галочку из чек-бокса «Lock project for viewing».
  3. Очистите поля «Password» и «Confirm password».
  4. Нажмите кнопку «OK» и закройте книгу Excel.

При следующем открытии этой книги проект VBA будет доступен.

Отключение забытого пароля

Этот способ отключения забытого пароля применим к файлам Excel с расширением .xlsm. Чтобы не забывать пароли, используйте менеджер KeePass.

  1. Сделайте копию книги Excel, чтобы случайно не потерять ее при вмешательстве в код.
  2. Откройте файл .xlsm любым архиватором (я использую бесплатный 7-Zip). Иногда рекомендуют заменить расширение .xlsm на .zip или добавить одно к другому (.xlsm.zip), но делать этого совершенно не обязательно.

  1. Откройте в архиве папку «xl», найдите файл «vbaProject.bin» и перетащите его в папку с книгой Excel (по умолчанию происходит копирование).

  1. Откройте файл «vbaProject.bin» программой «Notepad++», обычный блокнот не подойдет.
  2. С помощью поиска (Ctrl+F) найдите фразу DPB=, замените в ней букву «B» на любую другую, например на «z» и сохраните файл.

  1. Перетащите файл «vbaProject.bin» обратно в архив, подтвердив копирование. Архив можно закрыть.
  2. Откройте книгу Excel и на запрос о продолжении загрузки с невалидным ключом «DPz» ответьте «Да».

  1. Откройте редактор VBA, дважды или трижды нажав «OK» в сообщении о неизвестной ошибке (у меня такое предупреждение появляется трижды).

  1. Сохраните книгу Excel и закройте.
  2. Откройте файл Excel, перейдите в редактор VBA, откройте окно «VBAProject — Project Properties» («Tools» >> «VBAProject Properties») и убедитесь, что галочка у чек-бокса «Lock project for viewing» снята, поля «Password» и «Confirm password» — пустые.

Like this post? Please share to your friends:
  • Vba excel как запустить книгу
  • Vba excel как заполнить выделенные ячейки
  • Vba excel как записать данные в ячейку
  • Vba excel как заменить символ в строке
  • Vba excel как закрыть файл без сохранения