Защита проекта VBA в MS Excel

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

Основан, данный вид защиты, на изменение ключей:

DPB=«0B09CE0F8E108E108E»  GC=«CCCE09520B120C120CED»</source> в файле `vbaProject.bin`.   <img src="https://lh3.googleusercontent.com/RACGzRAHgHZAhDpkh5qo-B4MuDJZ-CMUd-BTvwgXBsDl1LMUrQcFmZ5whRrk_cJlZ7p2X5ikFegRPXl2jLoLowoWwH78-T9CANv6rqCCzB8Hoi14DFUaqBr1A0K8KSeccfr-Iss" align="center"> <h2>Кратко, как создается данная защита</h2> Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку <strong>xl</strong>, открыть файл <strong>vbaProject.bin</strong>,  в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово!   Это самый простой вариант данной защиты, но существует множество модификаций.  Алгоритм снятия защиты <strong>Project is Unviewable.</strong>  1)      Разархивируем подопытный файл, переходим в файл  <strong>…\xl\_rels\workbook.xml.rels</strong>  <strong> <img src="https://lh6.googleusercontent.com/SbsqJbKGS7gLk4g26PH3w481mTv15EozjjsNXzbQnDFMRW0DKdk9_X3ymJJN_0F23zBePuBhEYpIRgqzdOK0MID51HdemHlTo1QaTbWECgjNrFs9_8d7Ups-IImsI36aKTReT8g" align="center"> </strong>  2)      В файле<strong> workbook.xml.rels</strong>  ищем строку, содержащую слово  <strong>vbaProject</strong>, обычно имеет следующий вид:  <strong><Relationship Id="rId6" Type="http://schemas.microsoft.com/office/2006/relationships/vbaProject" Target="vbaProject.bin"/></strong>. В этой строке нас интересует ключ <strong>Target</strong>,<strong> </strong>и<strong> </strong>его значение. Значение является название файла, в котором находится проект VBA. Иногда, защищающий меняет значения ключа на <strong>printerSettings.bin</strong>.<strong> </strong>Получается маскировка файла с проектом VBA  под другой файл.  3)      Открываем на редактирование файл, указанный в  ключе <strong>Target</strong>, ищем в файле ключи  <strong>CMG, DPB, GC</strong>. И меняем в их названиях любую букву на любую другую, например: <strong>CMC, DPC, CC</strong>. При поиске нужно быть аккуратным, так как защищающий может поместить  в проект форму,  подписью повторяющую один из ключей, например такую: <strong>DPB=«0B09CE0F8E108E108E»</strong>. При ее изменении проект VBA, будет удален из книги Excel.  Сохраняем и закрываем файл.  4)      Переводим архив обратно в файл Excel.  5)      Запускаем приложение Excel, выполняем следующее: в <i>Центре управления безопасностью -> Параметры макросов  -> Отключить все макросы без уведомления</i>. Перезапускаем Excel. Данная операция нужна, для блокировки защиты, которую иногда ставят авторы макросов. Данная защита реализована следующим образом. В модуле VBA «<strong>ЭтаКнига</strong>», создается процедуры, реагирующие на события открытия книги или закрытия книги. Эти события обычно проверяют, наличие пароля на проект VBA, запрет сохранения и прочее.  6)      Открываем файл. Если все правильно сделано то, Excel, будет ругаться на не правильные ключи, которые мы отредактировали, в пункте 3. Жмем, да, пока данные сообщения не закончатся и диалоговое окно закроется.         Если данное сообщение не появляется то, вы отредактировали не файл который содержит проект VBA.  <img src="https://lh6.googleusercontent.com/-JxpNp2qXgtcvjcx09dOaY0xCTuKNSXMKmcf1BXuto99S7Z_GE-tDDZj0sZqXWY7Trq2rEZd1KJikHM41KqmHkzsMdIG_OXO3FdSIMyMB2bCfX7qKYYu1VVmExD6AaNuJiB8YKo" align="center"> 7)      Открываем проект VBA. После всего, проект VBA должен быть доступен.  8)      Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле <strong>workbook.xml.rels </strong>в ключе <strong>Target</strong>  установлено <strong>printerSettings.bin</strong>.<strong> </strong>При сохранение,  Excel  исправляет это на значение на <strong>vbaProject.bin</strong>  Данную защиту можно установить и снять следующим инструментом:  <img src="https://lh5.googleusercontent.com/dqxpKVuWZ9_2FPe-c4IVoQyeYy5wqdRrsqZjoTmpRW9uge7SFttkYkhJJvjbW7oVu2uTXp73sTPm6mYcihA_tZt4tCci3rn3LExJXgJqGLDGp25ZkJbMtrXc1EkmJQT7qMa_5rQ" align="center"> <strong>Третий вид защиты — Hidden  Module, скрытые модули VBA</strong>  Время на снятие:  от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.  Недостаток: доступ к коду модуля VBA  Менее распространенный вид  защиты обычно встречается в комбинации с защитой <strong>Project is Unviewable. </strong>При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе  <strong>OpenOffice  или  LibreOffice </strong>(так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля).   <img src="https://lh6.googleusercontent.com/dA3BfIzuQg79o3IP_Ez4x8pumirxRSn3JdNX-SE-CLrJ7X-V9HwgbrBujuel9uasdeVI5ZGwzpFMaMyKr0cNWxLn4BJTEVC-WRXuxQnfH8XjzIosuKr5GrZGriv4X7HuTDhQfzk" align="center"> Просмотр кода VBA в  <strong>LibreOffice</strong>  <h2>Кратко, как создается данная защита</h2> Для создания данной защиты нужно отредактировать файл  с проектом VBA — <strong>vbaProject.bin  </strong>или <strong>printerSettings.bin</strong>,<strong> </strong>в зависимости от настроек в файле <strong>…\xl\_rels\workbook.xml.rels</strong>. В конце файла удаляются строки вида: <strong>Module1=32, 32, 635, 330, Z</strong>.  С нужными названиями модулей.  <img src="https://lh6.googleusercontent.com/kGIfWR-aM8dJ54j9YqQI4RhfqvYDeHJDm_22kelGtwasIa5nshjoqdSFBGJhdVVWGgN0URV55fH5WawjcPJM2GpC7qgplXrqcADmWgEahnqc3__DmhCMCeJkaDpQqjdWf-XTLy0" align="center"> Для снятия данной защиты нужно в файле <strong>vbaProject.bin — </strong>восстановить удаленные записи модулей.  Данную защиту можно установить следующим инструментом.  <img src="https://lh5.googleusercontent.com/eYCYXgNpc5vhun4VWEBaLR8VA-co7c9qv2af8OhAvJ1KyPtplzfmZQt9d_jROYG0ci_ysmkd6jIgCzYX4mv6sarBefOngkayo8l-d2wKWGBoJTNvJ5EsWK2-NUHpbtV7VczTZg8" align="center"> <h2>Четвертый вид защиты — Обфускация кода</h2> Время на снятие:  неизвестно, зависит от объема кода и пере использования частей кода  <img src="https://lh6.googleusercontent.com/_O09MKRA_Wg2GupSqHCnAeGJhl7zM3VU_s-5xWF9Cz3AuFefpYnzJhrUwRCVWBneumlfXqz6TSiJY6k30oE0gu9v0sx1cVxUFrN-YEj8PV6aQJ0TZj_6XBqZgxItW6VHNEsrBIY" align="center"> <i> Обфусцированный код VBA</i>  Недостаток:  необходимость тестирование файла после обфускации, на работоспособность  Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных,  процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.    Для де-обфускации кода нужно иметь  время, специализированное ПО.  Данную защиту можно установить следующим инструментом.  <img src="https://lh5.googleusercontent.com/pKd3MdYYw84gzK1HtxteUPQYj302kXbkGLgYX6Qnx8U8Wck9zezpL9WDCMTF_-yIZ0mwMWFJeDg1k72x7zKJxn-HnQUH1uqNQJE82G3TSwTP30kOqqEeOb_KHQnu_0J7HBhGfDw" align="center"> <h2>Пятый вид защиты — Перенос кода в dll</h2> Время на снятие:  неизвестно, зависит от языка программирования и квалификации  Недостаток:  необходимости в дополнительном  файле dll  Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине,  необходимости за файлом Excel, «таскать» дополнительный файл, dll.  Для получения доступа к коду dll, нужно обладать специальными знаниями.  <h2>Заключение</h2> В заключении хочу выделить бесполезность защит:  <strong>Project is Unviewable и Hidden  Module</strong> которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного  файла, в таких программах как <strong>OpenOffice  </strong>или<strong>  LibreOffice. </strong>Так и снимаются без особых проблем.

ссылка на оригинал статьи https://habr.com/ru/post/514440/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *