Этот вопрос связан с мой предыдущий.
Не могли бы вы объяснить или дать ссылку на объяснение того, как на самом деле работает защита паролем кода Excel VBA в версиях до 2007? Чем отличается Excel 2007 от предыдущих версий с точки зрения защиты паролем?
Кроме того, действительно ли защита паролем Excel шифрует код? Как Excel выполняет код, если он зашифрован?
И наконец, как работает программа для удаления паролей в Excel?

Безопасность VBA считается довольно низкой. Код VBA не компилируется, а исходный код доступен в файле Excel. Защиту паролем довольно легко обойти.
Насколько я понимаю, Office 2003 и ранее сохраняет код vba как часть двоичного формата рабочего листа (или документа / презентации). Когда вы запускаете VBA IDE, она просто проверяет, был ли код VBA «защищен» или нет. Это не значит, что он зашифрован - просто недоступен для просмотра. Теоретически это не дает вашим пользователям вмешиваться в ваш код, но серьезный программист сможет обойти пароль.
Таким образом, Excel не нужно расшифровывать какой-либо код - ему просто нужно, чтобы люди не могли его просмотреть.
Office 2007 делает шифрует макросы (не спрашивайте меня, как и какой алгоритм). Это необходимо предположительно потому, что файлы XLSM (или любой файл Office 2007) представляют собой просто zip-файлы с другим расширением. Кто угодно может залезть в эти файлы и покопаться.
Чтобы ответить на ваш последний вопрос - как работает удаление пароля в старых форматах Office, я не совсем уверен. Разные поставщики, возможно, будут подходить к проблеме по-разному, но я подозреваю, что наиболее распространенным подходом будет атака грубой силы на пароли до тех пор, пока не будет найдено совпадение.
Объект Excel VBProject имеет свойство Protection, которое будет возвращать различные перечисления в зависимости от статуса защиты макроса (например, vbext_pp_locked, если макрос защищен). Если бы вы продолжали пытаться вводить пароли программно, пока vbext_pp_locked не считал ложным, вы бы нашли свой пароль.
Эта функциональность (AFAIK) не встроена ни в одну версию Office. Скорее, ожидается, что если вам нужна автоматизация для связанного файла Office, вы будете использовать инструменты Visual Studio для Office (VSTO), чтобы написать свою собственную DLL и сохранить ее как надстройку.
К вашему сведению - я создал xlsm (используя конвертер, доступный для 2003 года). Сменил расширение xlsm на xip, разархивировал и заглянул внутрь. Весь VBA находился внутри одного файла vbaProject.bin. В шестнадцатеричном редакторе он создавался из тех же блоков BIFF, что и другие файлы Excel. Все строки в макросах были хорошо видны. Так что не похоже, что шифрование слишком сильно изменилось.
@DaveParillo - Ага. Спасибо за это. Меня заставили поверить, что код был зашифрован. Наверное, следовало проверить на себе.
Фил прав - пароль мешает вам смотреть на модули, они сами не зашифрованы. Я знаю, что в Excel 2007 файл, по сути, представляет собой заархивированную коллекцию XML и других файлов, но я не знаю подробностей того, как обрабатывается шифрование. Для более ранних версий - excel 2, 3, 4, 5, 95, 97, 2000, XP и 2003, есть исчерпывающий Документация OpenOffice.org по формату файлов Microsoft Excel:
The Excel file format is named BIFF (Binary Interchange File Format). It is used to store all types of documents: worksheet documents, workbook documents, and workspace documents. There are different versions of this file format, depending on the version of Excel that has written the file, and depending on the document type.
A workbook document with several sheets (BIFF5-BIFF8) is usually stored using the compound document file format (also known as “OLE2 storage file format” or “Microsoft Office compatible storage file format”). It contains several streams for different types of data. A complete documentation of the format of compound document files can be found here.
The Workbook Protection Block occurs just after the DEFINEDNAME block (i.e. Named Ranges) in most BIFF streams, although BIFF8 is a major departure from that pattern. The record protection block In Biff5 - Biff8 the structure of the Workbook Protection Block:
В блоке пароля хранится 16-битное хеш-значение, вычисленное на основе пароля защиты рабочего листа или книги.
Кто-то сделал рабочий код vba, который изменяет пароль защиты vba на «макрос» для всех файлов Excel, включая .xlsm (версии 2007+). Вы можете увидеть, как это работает, просмотрев его код.
Вот блог этого парня: http://lbeliarl.blogspot.com/2014/03/excel-removing-password-from-vba.html Вот файл, который выполняет свою работу: https://docs.google.com/file/d/0B6sFi5sSqEKbLUIwUTVhY3lWZE0/edit
Вставлено из предыдущего сообщения из его блога:
Для файлов Excel 2007/2010 (.xlsm) выполните следующие действия:
Найдите и скопируйте значение из параметра DPB (значение в кавычках), например: DPB = "282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A". (Это значение создано для пароля макроса. Вы можете использовать это значение DPB, чтобы пропустить шаги 1–8)
Выполните шаги 4-7 для файла с неизвестным паролем (файл, который вы хотите разблокировать).
Измените значение DBP в этом файле на значение, которое вы скопировали на шаге 8.
If copied value is shorter than in encrypted file you should populate missing characters with 0 (zero). If value is longer - that is not a problem (paste it as is).
Сохраните файл vbaProject.bin и выйдите из шестнадцатеричного редактора.
На самом деле это не отвечает на вопрос.
Он не отвечает на него напрямую, но парень, который спросил, может выполнить шаги и код, если он хочет знать, как конкретно это работает.
Интересно, есть ли в 2007 году возможность хранить в книге только байтовый код макросов, что позволяет доставлять функции без исходного кода?