Всем привет! Я обычный пользователь MS Excel. Не являющийся профессиональным программистом, но накопивший достаточно опыта, для установки и обхода защиты проектов VBA.
Дисклеймер:
В данной статье рассмотрены виды защиты проектов VBA, от несанкционированного доступа. Их сильные и слабые стороны – ранжирование.
Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.
Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты.
Все инструменты реализованы стандартными средствами VBA, без использования дополнительных библиотек.
![](https://habrastorage.org/getpro/habr/post_images/3ca/a21/6ae/3caa216ae8856b512c85f028b8872de5.png)
Главная панель Надстройки Macro Tools VBA
Время на снятие: мгновенно
Недостаток: быстрый доступ к запароленному модулю VBA
Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection).
Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты.
Данную защиту можно снять следующим инструментом:
![](https://habrastorage.org/getpro/habr/post_images/4a0/298/b9f/4a0298b9f398cb0a3cbf99dfee517d7c.png)
Время на снятие: от 10 до 15 мин (в ручную)
Недостаток: доступ к исходному коду модуля VBA
Один из самых распространённых видов защит. Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с сообщением: Project is Unviewable.
![](https://habrastorage.org/getpro/habr/post_images/e06/ef1/d29/e06ef1d2954f775f7072e160f4d36c7d.png)
Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.
Основан, данный вид защиты, на изменение ключей:
в файле
![](https://habrastorage.org/getpro/habr/post_images/c49/096/870/c49096870008968083ab170a8f4e3d13.png)
Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin, в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово!
Это самый простой вариант данной защиты, но существует множество модификаций.
Алгоритм снятия защиты Project is Unviewable.
1) Разархивируем подопытный файл, переходим в файл …\xl\_rels\workbook.xml.rels
![](https://habrastorage.org/getpro/habr/post_images/5d7/7f6/a06/5d77f6a067b147d197a460de17af4fd6.png)
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.
![](https://habrastorage.org/getpro/habr/post_images/91c/d24/70a/91cd2470a3f945057e4fd1fc36056073.png)
7) Открываем проект VBA. После всего, проект VBA должен быть доступен.
8) Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле workbook.xml.rels в ключе Target установлено printerSettings.bin.При сохранение, Excel исправляет это на значение на vbaProject.bin
Данную защиту можно установить и снять следующим инструментом:
![](https://habrastorage.org/getpro/habr/post_images/64c/d82/f6c/64cd82f6c5ee548ed80966b87d79426f.png)
Третий вид защиты — Hidden Module, скрытые модули VBA
Время на снятие: от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.
Недостаток: доступ к коду модуля VBA
Менее распространенный вид защиты обычно встречается в комбинации с защитой Project is Unviewable. При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе OpenOffice или LibreOffice (так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля).
![](https://habrastorage.org/getpro/habr/post_images/895/b41/14e/895b4114ed5027bc7d2011577d878b33.png)
Просмотр кода VBA в LibreOffice
Для создания данной защиты нужно отредактировать файл с проектом VBA — vbaProject.bin или printerSettings.bin,в зависимости от настроек в файле …\xl\_rels\workbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z. С нужными названиями модулей.
![](https://habrastorage.org/getpro/habr/post_images/a2a/274/59c/a2a27459c756e66a1c4e5f5af1eeef57.png)
Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.
Данную защиту можно установить следующим инструментом.
![](https://habrastorage.org/getpro/habr/post_images/be9/ec7/5f5/be9ec75f5a228e35e02152bb4cbc141a.png)
Время на снятие: неизвестно, зависит от объема кода и пере использования частей кода
![](https://habrastorage.org/getpro/habr/post_images/8e4/a02/65b/8e4a0265bf3d3fb85adccd47084a0441.png)
Обфусцированный код VBA
Недостаток: необходимость тестирование файла после обфускации, на работоспособность
Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных, процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.
Для де-обфускации кода нужно иметь время, специализированное ПО.
Данную защиту можно установить следующим инструментом.
![](https://habrastorage.org/getpro/habr/post_images/92f/730/ade/92f730ade1c1a1c20f22a59c745a9a82.png)
Время на снятие: неизвестно, зависит от языка программирования и квалификации
Недостаток: необходимости в дополнительном файле dll
Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине, необходимости за файлом Excel, «таскать» дополнительный файл, dll.
Для получения доступа к коду dll, нужно обладать специальными знаниями.
В заключении хочу выделить бесполезность защит: Project is Unviewable и Hidden Module которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного файла, в таких программах как OpenOffice или LibreOffice. Так и снимаются без особых проблем.
Дисклеймер:
В данной статье рассмотрены виды защиты проектов VBA, от несанкционированного доступа. Их сильные и слабые стороны – ранжирование.
Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.
Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты.
Все инструменты реализованы стандартными средствами VBA, без использования дополнительных библиотек.
![](https://habrastorage.org/getpro/habr/post_images/3ca/a21/6ae/3caa216ae8856b512c85f028b8872de5.png)
Главная панель Надстройки Macro Tools VBA
Первый вид защиты — Обычный пароль
Время на снятие: мгновенно
Недостаток: быстрый доступ к запароленному модулю VBA
Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection).
Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты.
Данную защиту можно снять следующим инструментом:
![](https://habrastorage.org/getpro/habr/post_images/4a0/298/b9f/4a0298b9f398cb0a3cbf99dfee517d7c.png)
Второй вид защиты — Project is Unviewable
Время на снятие: от 10 до 15 мин (в ручную)
Недостаток: доступ к исходному коду модуля VBA
Один из самых распространённых видов защит. Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с сообщением: Project is Unviewable.
![](https://habrastorage.org/getpro/habr/post_images/e06/ef1/d29/e06ef1d2954f775f7072e160f4d36c7d.png)
Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.
Основан, данный вид защиты, на изменение ключей:
CMG=«4A488FCC54D054D054D054D0»
DPB=«0B09CE0F8E108E108E»
GC=«CCCE09520B120C120CED»
в файле
vbaProject.bin
. ![](https://habrastorage.org/getpro/habr/post_images/c49/096/870/c49096870008968083ab170a8f4e3d13.png)
Кратко, как создается данная защита
Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin, в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово!
Это самый простой вариант данной защиты, но существует множество модификаций.
Алгоритм снятия защиты Project is Unviewable.
1) Разархивируем подопытный файл, переходим в файл …\xl\_rels\workbook.xml.rels
![](https://habrastorage.org/getpro/habr/post_images/5d7/7f6/a06/5d77f6a067b147d197a460de17af4fd6.png)
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.
![](https://habrastorage.org/getpro/habr/post_images/91c/d24/70a/91cd2470a3f945057e4fd1fc36056073.png)
7) Открываем проект VBA. После всего, проект VBA должен быть доступен.
8) Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле workbook.xml.rels в ключе Target установлено printerSettings.bin.При сохранение, Excel исправляет это на значение на vbaProject.bin
Данную защиту можно установить и снять следующим инструментом:
![](https://habrastorage.org/getpro/habr/post_images/64c/d82/f6c/64cd82f6c5ee548ed80966b87d79426f.png)
Третий вид защиты — Hidden Module, скрытые модули VBA
Время на снятие: от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.
Недостаток: доступ к коду модуля VBA
Менее распространенный вид защиты обычно встречается в комбинации с защитой Project is Unviewable. При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе OpenOffice или LibreOffice (так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля).
![](https://habrastorage.org/getpro/habr/post_images/895/b41/14e/895b4114ed5027bc7d2011577d878b33.png)
Просмотр кода VBA в LibreOffice
Кратко, как создается данная защита
Для создания данной защиты нужно отредактировать файл с проектом VBA — vbaProject.bin или printerSettings.bin,в зависимости от настроек в файле …\xl\_rels\workbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z. С нужными названиями модулей.
![](https://habrastorage.org/getpro/habr/post_images/a2a/274/59c/a2a27459c756e66a1c4e5f5af1eeef57.png)
Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.
Данную защиту можно установить следующим инструментом.
![](https://habrastorage.org/getpro/habr/post_images/be9/ec7/5f5/be9ec75f5a228e35e02152bb4cbc141a.png)
Четвертый вид защиты — Обфускация кода
Время на снятие: неизвестно, зависит от объема кода и пере использования частей кода
![](https://habrastorage.org/getpro/habr/post_images/8e4/a02/65b/8e4a0265bf3d3fb85adccd47084a0441.png)
Обфусцированный код VBA
Недостаток: необходимость тестирование файла после обфускации, на работоспособность
Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных, процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.
Для де-обфускации кода нужно иметь время, специализированное ПО.
Данную защиту можно установить следующим инструментом.
![](https://habrastorage.org/getpro/habr/post_images/92f/730/ade/92f730ade1c1a1c20f22a59c745a9a82.png)
Пятый вид защиты — Перенос кода в dll
Время на снятие: неизвестно, зависит от языка программирования и квалификации
Недостаток: необходимости в дополнительном файле dll
Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине, необходимости за файлом Excel, «таскать» дополнительный файл, dll.
Для получения доступа к коду dll, нужно обладать специальными знаниями.
Заключение
В заключении хочу выделить бесполезность защит: Project is Unviewable и Hidden Module которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного файла, в таких программах как OpenOffice или LibreOffice. Так и снимаются без особых проблем.
wyfinger
Спасибо вам за эту статью.
VBATools Автор
Не за что) поделился своим опытом который реализовал в надстройке Macro Tools VBA
wyfinger
Может вы подскажете годную надстройку для решения самой главной проблемы последних Excel — исчезновение выделенного диапазона в неактивном окне?
VBATools Автор
Не обращал внимания на такаю ошибку.
Я предпочитаю использовать версию 2010 новые версии глючные какие-то
wyfinger
Может вы неверно поняли — исчезает не содержимое, а само выделение. Когда работаешь с двумя или более файлами это дичайше бесит.
По-моему в 2010 было также. Все варианты решения что я видел были либо платные, либо глючные, либо и первое и второе.