Защита макросов в excel от редактирования

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

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

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

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

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

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

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.

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

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Excel Starter 2010 Еще…Меньше

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

Дополнительные сведения о параметрах безопасности макросов в документах Microsoft Office см. в статье Включение и отключение макросов в файлах Office.

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

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

  • Отключить все макросы с уведомлением. Этот параметр задан по умолчанию. Выберите этот вариант, если хотите отключить макросы, но при этом получать предупреждения о безопасности, если макросы есть. Так вы можете в каждом конкретном случае решать, стоит ли включать эти макросы.

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

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

  • Доверять доступ к объектной модели проектов VBA    Этот параметр используется для разработчиков и используется для преднамеренной блокировки или блокировки программного доступа к объектной модели VBA из любого клиента автоматизации. Другими словами, он обеспечивает параметр безопасности для кода, который создается для автоматизации программы Office и программного управления средой и объектной моделью Microsoft Visual Basic для приложений (VBA). Этот параметр настраивается для каждого пользователя и каждого приложения и по умолчанию не имеет доступа. Этот параметр безопасности затрудняет несанкционированный доступ к созданию кода «саморекопирования», который может навредить системам конечных пользователей. Чтобы любой клиент автоматизации мог получить доступ к объектной модели VBA программным путем, пользователь, работающий с кодом, должен явно предоставить доступ. Чтобы включить доступ, выберите этот квадрат.

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

Установив свой цифровой сертификат, вы можете подписывать файлы и макросы.

Получение цифрового сертификата для подписания

Цифровой сертификат можно получить в коммерческом центре сертификации (ЦС) или у администратора безопасности локальной сети либо ИТ-специалиста.

Дополнительные сведения о центрах сертификации, обслуживающих продукты Майкрософт, см. в списке участников программы корневых сертификатов Майкрософт.

Создание своего самозаверяющего цифрового сертификата

С помощью программы Selfcert.exe вы можете создать свой самозаверяющий сертификат.

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

Дополнительные сведения о добавлении цифровой подписи к макросам см. в статье Подписание макроса.

Изменение параметров безопасности макросов

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

  1. На вкладке Разработчик в группе Код нажмите кнопку Безопасность макросов.

    Вкладка "Разработчик" на ленте

    Чтобы включить вкладку «Разработчик», см. раздел Отображение вкладки «Разработчик».

  2. В категории Параметры макросов в разделе Параметры макросов выберите нужный вариант.

    Примечание: Все изменения, внесенные в категории Параметры макросов в Excel, применяются только к Excel и не влияют на другие приложения Microsoft Office.

Доступ к центру управления безопасностью также можно получить из окна «Параметры Excel». Для этого нажмите кнопку Параметры (Excel 2010–2016) или кнопку Microsoft Office Изображение кнопки Office (Excel 2007), а затем выберите центр управления > Центр управления Параметры >Макрос Параметры.

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

  • Добавление, удаление и изменение надежного расположения

  • Добавление, удаление и просмотр надежного издателя

  • Включение и отключение макросов в файлах Office

  • Включение и отключение предупреждений системы безопасности о ссылках и файлах с подозрительных веб-сайтов

  • Просмотр параметров в центре управления безопасностью

Устранение неполадок

Не удается изменить параметры безопасности макросов

Некоторые пользователи не могут изменять параметры центра управления безопасностью из-за групповых политик безопасности в их организациях. В таких случаях необходимо обратиться к ИТ-администратору организации.

Что случилось с параметрами безопасности «Очень высокий», «Высокий», «Средний» и «Низкий»?

Параметр Excel 2003

Эквивалент в Excel 2007/2010/2013/2016

Дополнительные сведения

Очень высокий

Отключить все макросы без уведомления

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

Если эти условия не соблюдены, то при использовании параметра «Очень высокий» макросы VBA не выполняются в Excel 2003.

Высокий

Отключить все макросы кроме макросов с цифровой подписью

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

При установке всех приложений Office 2003 по умолчанию задается параметр «Высокий».

Средний

Отключить все макросы с уведомлением

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

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

Низкий

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

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

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

К началу страницы

Нужна дополнительная помощь?

Цитата: _Boroda_ от 04.04.2013, 15:08
Только учтите, что все это (пароль на VBA) вскрывается элементарно. Просто вручную, не говоря даже о спецпрограммах-вскрывашках.
Кстати, про это в правилах форума написано: «Запрещается обсуждение способов взлома защиты программ и файлов».

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

Цитата: _Boroda_ от 04.04.2013, 15:08А надстройку можно сделать и видимой, и невидимой. По желанию.

А видимой, это как?
Я все делал по описанию из книги Уокенбаха, а в результате, когда к новой книге подключил эту надстройку (а она с несколькими листами и даже с диаграммами), ничего вообще не произошло. Как был пустой Лист1, так и остался пустой Лист1 :)

Ну, как я уже понял, для моей исходной цели это не нужно.
Одним словом, остановлюсь на том, что уже есть, а именно, что код макроса среднестатистический пользователь изменить самостоятельно не сможет, а к этому я, собственно, и стремился.

Короче говоря, давайте забудем про все эти надстройки :)

Вы мне лучше подскажите, как сделать так, чтобы для него процедура первого запуска моей книги (с макросом) прошла наиболее гладко. В смысле, чтобы поменьше всяких пугающих окон выскакивало при первом запуске. Сам-то я знаю, как макросы подписывать, так и делаю. А ему придется тоже пошагово объяснять, как это делать? И ему придется тоже проходить всю эту процедуру от начала до конца? Или можно как-то упростить, чтобы как-нибудь сразу выскочило окошко, в котором будет написано что-то вроде: «Автор — Олег. Доверять макросам, полученным из этого источника? Да/Нет».
Теоретически, есть еще вариант установить на его компе самый низкий уровень системы безопасности, но я этот вариант сразу отвергаю. Я и сам так никогда не делаю, и никому не советую.

Еще раз напомню, у меня Excel 2010, а у него 2002 или 2003 (скорее всего 2003 все-таки).

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

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

Меня сейчас совершенно не интересуют какие-то хакерские штучки. Совсем наоборот. Интересует совершенно «официальное», но понятное разъяснение юзеру, как запустить книгу Экселя с чужими макросами, не снижая при этом уровень безопасности системы.

В принципе, можно, конечно, поехать к нему домой и установить все самому, но мы с ним живем на противоположных концах Москвы, встречаемся очень редко и обычно летом. Честно говоря, не хотелось бы ради всего этого нарушать установившуюся традицию :)

Like this post? Please share to your friends:
  • Защита макроса vba excel
  • Защита макроса excel паролем
  • Защита листа в excel с возможностью группировки
  • Защита листа в excel поставить
  • Защита книги excel без пароля