Хитрости »
1 Апрель 2016 45122 просмотров
Для тех кто уже освоился более-менее в программировании на Visual Basic for Application рано или поздно непременно встает вопрос: как защитить свой код от изменений или даже от просмотра? Как правило это делается в файлах, которые в дальнейшем «гуляют по рукам». Т.е. автор создал и потом файл отсылается или другим пользователям, или клиентам, поставщикам и т.п. Чтобы у тех, кто будет в дальнейшем работать с этим файлом, не было возможности подсмотреть проект и тем более что-то в нем изменить. В каких-то случаях цель такой защиты это защита «от дурака»: чтобы по незнанию не изменили так, что файл просто откажется работать. Так же есть и другая причина — код является «коммерческим» и в нем присутствует некая защита от использования функционала по истечению ДЕМО-периода и надо закрыть код, чтобы эту защиту не «сломали».
По сути защитить проект VBA стандартными средствами совсем не сложно. Переходим в проект VBA (вкладка Разработчик(Developer) —Visual Basic или сочетание клавиш Alt+F11), далее:
- Tools —VBAProject Properties -вкладка Protection
- устанавливаем галочку Lock project for viewing. Если галочка не установлена, то весь код можно будет просматривать и изменять, но изменить или просмотреть свойства самого проекта будет уже невозможно без снятия пароля.
- вписываем пароль в полях Password и Confirm password
Чтобы снять пароль с проекта VBA необходимо перейти в проект VBA файла(вкладка Разработчик(Developer) —Visual Basic или сочетание клавиш Alt+F11) и:
- Tools —VBAProject Properties -вкладка Protection
- снимаем галочку Lock project for viewing
- удаляем пароль в полях 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
ссылки
статистика
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.
Защитить проект VBA
Зачастую, при создании проекта на VBA в Excel, хочется его надежно защитить (особенно, если он какой-то крупный). В первую очередь, это нужно для того, чтобы никто не «украл» Ваши личные интеллектуальные разработки, либо для того, чтобы никто не мог внести какие-либо изменения в код. В данной статье как раз будет рассказано о некоторых способах, с помощью которых можно защитить проект VBA: от самых простейших, до более сложных.
Установка пароля на проект VBA
Первый и наиболее простой способ защитить проект VBA — стандартная установка пароля. Для установки пароля, в открытом редакторе VBA, необходимо нажать «Tools» — «VBA Project Properties» и перейти на вкладку «Protection», как показано на скриншоте ниже:
Далее, необходимо ввести пароль и подтвердить его. Если нужно закрыть проект от просмотра кода — установите галочку в поле «Lock project for viewing». И все, пароль установлен. Теперь, в следующий раз, когда вы зайдете в редактор 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. Файл необходимо куда-нибудь перенести/скопировать, например, на рабочий стол.
Далее, нужно открыть vbaProject.bin через текстовый редактор Notepad++ (именно через него, так как через стандартный блокнот не получится) и найти там строчки, содержащие «CMG», «DPB» и «GC» (они находятся почти в самом низу). Все символы, находящиеся в кавычках после них, необходимо заменить на символ «F», как это сделано на примере ниже:
Сохраняем файл vbaProject.bin, закрываем, переносим его обратно в архив в ту же папку «xl». Меняем обратно расширение с .zip на .xlsb или .xlam (в зависимости от того, в каком расширении файл был сохранен), и все, готово. Теперь, при попытке просмотреть/изменить модули нашего проекта, мы будем видеть сообщение «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, созданного в книге Excel с расширением .xlsm.
Защита проекта VBA паролем помогает от случайного или намеренного изменения кода обычным пользователем. От злоумышленников простая установка пароля не спасет.
Защита проекта VBA стандартными средствами:
- Перейдите в окно «VBAProject — Project Properties» через пункты меню: «Tools» >> «VBAProject Properties».
- В открывшемся окне выберите вкладку «Protection» и установите галочку в чек-боксе «Lock project for viewing».
- Введите пароль в поле «Password» и повторите пароль в поле «Confirm password».
- Нажмите кнопку «OK» и закройте книгу Excel.
При следующем открытии этой книги проект VBA будет защищен.
Снятие защиты с VBA-проекта
Снятие защиты с проекта VBA стандартными средствами:
- Перейдите в окно «VBAProject — Project Properties» через пункты меню: «Tools» >> «VBAProject Properties».
- В открывшемся окне выберите вкладку «Protection» и уберите галочку из чек-бокса «Lock project for viewing».
- Очистите поля «Password» и «Confirm password».
- Нажмите кнопку «OK» и закройте книгу Excel.
При следующем открытии этой книги проект VBA будет доступен.
Отключение забытого пароля
Этот способ отключения забытого пароля применим к файлам Excel с расширением .xlsm. Чтобы не забывать пароли, используйте менеджер KeePass.
- Сделайте копию книги Excel, чтобы случайно не потерять ее при вмешательстве в код.
- Откройте файл .xlsm любым архиватором (я использую бесплатный 7-Zip). Иногда рекомендуют заменить расширение .xlsm на .zip или добавить одно к другому (.xlsm.zip), но делать этого совершенно не обязательно.
- Откройте в архиве папку «xl», найдите файл «vbaProject.bin» и перетащите его в папку с книгой Excel (по умолчанию происходит копирование).
- Откройте файл «vbaProject.bin» программой «Notepad++», обычный блокнот не подойдет.
- С помощью поиска (Ctrl+F) найдите фразу
DPB=
, замените в ней букву «B» на любую другую, например на «z» и сохраните файл.
- Перетащите файл «vbaProject.bin» обратно в архив, подтвердив копирование. Архив можно закрыть.
- Откройте книгу Excel и на запрос о продолжении загрузки с невалидным ключом «DPz» ответьте «Да».
- Откройте редактор VBA, дважды или трижды нажав «OK» в сообщении о неизвестной ошибке (у меня такое предупреждение появляется трижды).
- Сохраните книгу Excel и закройте.
- Откройте файл Excel, перейдите в редактор VBA, откройте окно «VBAProject — Project Properties» («Tools» >> «VBAProject Properties») и убедитесь, что галочка у чек-бокса «Lock project for viewing» снята, поля «Password» и «Confirm password» — пустые.
Код 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.
Шаг 2. Чтобы заблокировать проект VBA, нажмите «Инструменты» на панели и выберите «Свойства VBAProject».
После нажатия на этот пункт меню вы должны увидеть следующее диалоговое окно:
Вкладка «Общие» выбрана по умолчанию, но щелкните вкладку «Защита».
Шаг 3. Установите флажок «Заблокировать проект для просмотра», затем дважды введите свой пароль в оба поля и нажмите «ОК».
Шаг 4. Сохраните его и снова откройте файл Excel. Вы сможете узнать, правильно ли включена защита паролем 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.
# 4 Конвертировать VBA в C или C ++
Перевод ваших макросов на C или C ++ сложнее реконструировать, чем VBA. Если вы хотите защитить свой код, это лучший способ.
- Уровень безопасности: Высший; Получить код без прав практически невозможно; Но опять же, это не 100% гарантия;
- Сложность: Сложный и трудоемкий; Поскольку VBA и C / C ++ — такие разные языки, это сложнее, поскольку вам придется вложить много усилий.
Заключение
Использование макросов — отличный способ упростить разработку расширенных функций. К сожалению, это подвергает ваш код риску быть украденным или скопированным другими. В статье обсуждаются методы, которые вы можете использовать для предотвращения кражи или подделки вашего кода VBA другими пользователями. Обратите внимание, что защита кода VBA не является пуленепробиваемой, но обеспечивает некоторую защиту от случайных злоумышленников.
Сусанна — контент-менеджер и писатель Filelem. Она много лет была опытным редактором и дизайнером макетов книг, и ей было интересно пробовать и тестировать различное программное обеспечение для повышения производительности. Она также является большой поклонницей Kindle, которая использует Kindle Touch почти 7 лет и носит Kindle практически везде, куда бы она ни пошла. Не так давно у устройства кончился срок службы, поэтому Сюзанна с радостью купила Kindle Oasis.