Время на прочтение
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 должен быть доступен.
Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 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. Так и снимаются без особых проблем.
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 45133 просмотров
Для тех кто уже освоился более-менее в программировании на 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
ссылки
статистика
Код 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.
Правильная защита макросом
В большинстве случаев защита макросом, которую я встречаю во множестве проектов, выглядит следующим образом:
Worksheets("Лист1").Unprotect Password:="123" 'тут макрос делает действия Worksheets("Лист1").Protect Password:="123"
То есть автор файла вынужден ставить защиту от шаловливых ручек пользователей, но чтобы его макрос мог выполнить необходимые действия, ему приходится временно снимать ее и затем включать снова. Такая техника работает, но далека от совершенства. Во-первых, это неудобно и требует введения подобных конструкций в каждый ваш макрос. Во-вторых, если выполнение макроса прервется с ошибкой, то лист останется незащищенным.
Есть гораздо более легкий и красивый способ решить задачу.
Нажмите Alt+F11, чтобы попасть в редактор Visual Basic. Затем найдите в левом верхнем углу в окне Project Explorer (если его не видно, то нажмите Ctrl+R) модуль ЭтаКнига (ThisWorkbook) и откройте двойным щелчком:
Скопируйте туда этот код:
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 разрешает пользоваться группировкой (символы плюс-минус для сворачивания-разворачивания строк и столбцов) на защищенном листе.
Всего три строчки кода, зато как удобно!
Ссылки по теме
- Что такое макросы и куда копировать их код
- Как поставить защиту листа, книги или всего файла