Project is unviewable как снять защиту vba
Перейти к содержимому

Project is unviewable как снять защиту vba

  • автор:

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

Всем привет! Я обычный пользователь MS Excel. Не являющийся профессиональным программистом, но накопивший достаточно опыта, для установки и обхода защиты проектов VBA.

Дисклеймер:

В данной статье рассмотрены виды защиты проектов VBA, от несанкционированного доступа. Их сильные и слабые стороны – ранжирование.

Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.

Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты.

Все инструменты реализованы стандартными средствами VBA, без использования дополнительных библиотек.

Первый вид защиты — Обычный пароль

Время на снятие: мгновенно

Недостаток: быстрый доступ к запароленному модулю VBA

Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection).

Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты.

Данную защиту можно снять следующим инструментом:

Второй вид защиты — Project is Unviewable

Время на снятие: от 10 до 15 мин (в ручную)

Недостаток: доступ к исходному коду модуля VBA

Один из самых распространённых видов защит. Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с сообщением: Project is Unviewable.


Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.

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

в файле vbaProject.bin .

Кратко, как создается данная защита

Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin, в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово!

Это самый простой вариант данной защиты, но существует множество модификаций.

Алгоритм снятия защиты Project is Unviewable.

1) Разархивируем подопытный файл, переходим в файл …\xl\_rels\workbook.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\_rels\workbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z. С нужными названиями модулей.

Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.

Данную защиту можно установить следующим инструментом.

Четвертый вид защиты — Обфускация кода

Время на снятие: неизвестно, зависит от объема кода и пере использования частей кода

Обфусцированный код VBA

Недостаток: необходимость тестирование файла после обфускации, на работоспособность

Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных, процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.

Для де-обфускации кода нужно иметь время, специализированное ПО.

Данную защиту можно установить следующим инструментом.

Пятый вид защиты — Перенос кода в dll

Время на снятие: неизвестно, зависит от языка программирования и квалификации

Недостаток: необходимости в дополнительном файле dll

Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине, необходимости за файлом Excel, «таскать» дополнительный файл, dll.

Word VBA getting Project is Unviewable error

When I try to edit or step into my VBA code for debugging purpose I get «Project is Unviewable». I have created .dotm file at location (C:\Users\UserName\AppData\Roaming\Microsoft\Word\STARTUP).

niton's user avatar

9 Answers 9

When launched automatically at startup the VBA project in .DOTM files are not viewable. I couldn’t find this clearly documented by Microsoft but I tested/replicated it across multiple OS and versions of Office to conclude it was «by design»

There is some ways around it:

Copy template OUT of Start Up Folder, right click file and select «Open» You can debug it.

Ensure you have write permission to file in startup folder. Even if you are Admin, if UAC is ON you won’t have access — grant your user «full control» or «write access to file» to DOTM file in startup folder.

Close all instances of Word, right click .DOTM file and Open, you can now debug it.

However you can’t save changes — to save changes you must grant permissions for the user to write to the STARTUP folder.

Update 2022

When editing macro-enabled Word documents (for example, .docm files) that are stored on OneDrive, you may receive the following warning:

SECURITY WARNING
Macros have been disabled.
Enabled Content

After clicking Enabled Content , and opening the VBA editor, attempting to view the project may result in the error:
Project is unviewable

After closing and reopening the document, again open the VBA editor. Within the Word document, you will then receive the following message:

EDITING MACROS
Check out this document to view and edit its macros.
Check Out

After checking out out the document, macros may be edited.

Christopher Peisert's user avatar

this is not a bug. This is a feature of Microsoft Templates when you open a template it never opens original file rather opens a copy of the template. to modify or debug a template right click on template itself and say open or open word and use Open file dialog to modify the code of the template.

Rashid Khan's user avatar

Open the .dotm from . /STARTUP location and do modifications and saves there.

Open your DOTM file and on Developer Tab (you will need to enable Dev Tab first 1) and choose Document Template and uncheck items that are currently loaded in under Global templates and add-ins.

To expand on https://stackoverflow.com/a/39171282/5025060, in my case (Windows 7 Pro, MS Word 2007), left-clicking on a .dot file from Windows File Explorer ( Win + E ) causes MS Word to create a new document (named Document5 in my case). The macros from the .dot file I opened are active in Document5 , but when I attempt to edit these macros (MS Word Developer tab, Macros button, Edit button) this message pops up:

Project is unviewable

However, if I right-click on the .dot file from Windows File Explorer, select Open With, and choose Microsoft Office Word from File Explorer’s menu, MS Word opens the file for editing rather than creating a new Document (the name in Word’s Title Bar is that of the .dot file I opened). From this instance of Word I can view and edit the macros contained in the .dot file.

Project is unviewable как снять защиту vba

I am using Access 2010 and I am working on an access file created in 2003 in .mdb format. When I try click on the AfterUpdate event of a text field, I got the error message saying "project is unviewable". I followed the MS support to remove the digital signature, but it isn’t there. There is no certificate to remove. I try to add my certificate, it says it can not save my certificate. I also try to publish and package in Access 2010; it doesn’t work either. Please help! Thank you.

Answers

At the top of the Access 2010 window, you should see a tab on the ribbon called "Database Tools".

Inside that tab, there should be a button called "Visual Basic".

if you click that button, it will open the Visual Basic Editor Window.

Now, in the upper left area of the VBE Window, you should see a "Project" sub window.

If you do not see that, then click VIEW>PROJECT EXPLORER

Once you see the Project Explorer Sub Window, you should see the VBA Project associated woith your database.

It is displayed in a hierarchy type format (with little + and — signs) but all of it is contained within the main project group for your database.

If the main project group is already shown as open, you will see inside that group "Microsoft Access Class Objects" and "Modules" if any modules have been added.

If you see any of these items right away, then your VBA project is not locked.

HOWEVER, if it is all shown as collapsed inside the main VBA Project group (with a +sign next to it) then click the + sign to open it.

VBA Project Locked; Project is Unviewable

You can protect your macro (VBA code) in your MS Office documents from being view-able in the VBA Editor. Most people are aware of the option to password protect your code but this can be bypassed as shown in this blog. There is also a password-less protection option that simply tells the user that the Project is locked and “unviewable” as shown in the image below.

The unviewable option is not able to be set through the MS office application itself, but instead, it needs to be done as a modification to the file after it is saved. This feature is documented as the ProjectProtectionState and ProjectVisibilityState attributes of the PROJECT stream in Office files here.

The ProjectProtectionState and ProjectVisibilityState attributes are encrypted data structures but it turns out that if you set them to something arbitrary, it will protect the document and make it locked/unviewable. If you change only the ProjectVisibilityState it will still show the project structure but not allow viewing of individual code modules. If you change both, you will get the locked/unviewable message immediately upon trying to expand the root of the project and will not be able to see the project structure.

There is a walk through here of how to change your office document to be locked/unviewable, but I would like to provide an automated solution. One major advantage of the automated solution is that it can not only set this protection, it can also remove this protection from any document. I added this feature to Stan Hegt’s (@StanHacked) EvilClippy tool and it can be used as follows.

To set the Locked/Unviewable attributes use the ‘-u’ option:

EvilClippy.exe -u macrofile.doc

To remove the Locked/Unviewable attributes use the ‘-uu’ option:

EvilClippy.exe -uu macrofile.doc

You can remove the Locked/Unviewable attributes on files that were not locked with EvilClippy as well.

Up until this research, the change to make a VBA Project locked/unviewable was said to be irreversible but I discovered that if you simulate a password protected document by setting the ProjectCLSID to all zero’s and use valid values for ProjectProtectionState (CMG), ProjectVisibilityState (GC) and ProjectPassword (DPB) you can undo this protection.

CMG=CAC866BE34C234C230C630C6
DPB=94963888C84FE54FE5B01B50E59251526FE67A1CC76C84ED0DAD653FD058F324BFD9D38DED37
GC=5E5CF2C27646414741474

Above are values that will undo the protection, but because the MS Office Compound File Binary Format (CFBF) is sensitive to data length changes, your best bet is to let EvilClippy make these changes for you.

Bonus: The EvilCippy ‘-uu’ option also removes any password protection from the VBA Project.

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

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