Как работает защита паролем кода Excel VBA? - PullRequest
8 голосов
/ 03 ноября 2008

Этот вопрос относится к моему предыдущему .

Можете ли вы объяснить или предоставить ссылку на объяснение того, как на самом деле работает защита паролем кода Excel VBA в версиях до 2007 года? В чем отличие Excel 2007 и предыдущих версий с точки зрения защиты паролем?

Кроме того, защита паролем Excel фактически шифрует код? Как Excel выполняет код, если он зашифрован?

Наконец, как работает программа удаления паролей для Excel?

Ответы [ 3 ]

14 голосов
/ 04 ноября 2008

Безопасность 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 не оценивается как ложное, вы бы нашли свой пароль.

3 голосов
/ 20 января 2010

Фил верен - пароль не позволяет просматривать модули, они сами не шифруются. Я знаю, что в Excel 2007 файл - это, по сути, сжатый набор XML и других файлов, но я не знаю деталей того, как обрабатывается шифрование. Для более ранних версий - Excel 2, 3, 4, 5, 95, 97, 2000, XP и 2003, имеется полная документация OpenOffice.org о формате файлов Microsoft Excel :

Формат файла Excel называется BIFF (двоичный формат файла обмена). Он используется для хранения всех типов документов: документов рабочей таблицы, документов рабочей книги и документов рабочей области. Существуют разные версии этого формата файла, в зависимости от версии Excel, в которой записан файл, и в зависимости от типа документа.

Документ рабочей книги с несколькими листами (BIFF5-BIFF8) обычно хранится в формате файла составного документа (также известном как «формат файла хранения OLE2» или «формат файла, совместимый с Microsoft Office»). Он содержит несколько потоков для разных типов данных. Полную документацию формата файлов составных документов можно найти здесь .

Блок защиты рабочей книги появляется сразу после блока DEFINEDNAME (то есть именованных диапазонов) в большинстве потоков BIFF, хотя BIFF8 является основным отклонением от этого шаблона. Блок защиты записи В Biff5 - Biff8 структура блока защиты рабочей книги:

  • WINDOWPROTECT Настройки окна: 1 = защищено
  • ЗАЩИТА Содержимое рабочей книги: 1 = защищено
  • ПАРОЛЬ Хэш-значение пароля; 0 = нет пароля
  • PROT4REV Общая рабочая книга: 1 = защищено
  • PROT4REVPASS Хэш-значение общего пароля; 0 = нет пароля

В блоке паролей хранится 16-разрядное хеш-значение, рассчитанное на основе пароля рабочей таблицы или защиты рабочей книги.

0 голосов
/ 29 марта 2014

Кто-то создал рабочий код 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) выполните следующие действия:

  1. Создайте новый файл .xlsm.
  2. В части VBA установите простой пароль (например, «макрос»).
  3. Сохраните файл и выйдите.
  4. Измените расширение файла на «.zip», откройте его любой программой-архиватором.
  5. Найдите файл: 'vbaProject.bin' (в папке 'xl').
  6. Извлеките его из архива.
  7. Откройте только что извлеченный файл с помощью шестнадцатеричного редактора.
  8. Найти и скопировать значение из параметра DPB (значение в кавычке), например: РОП = "282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A". (Это значение, сгенерированное для пароля «макроса». Вы можете использовать это значение DPB, чтобы пропустить шаги 1-8)

  9. Выполните шаги 4-7 для файла с неизвестным паролем (файл, который вы хотите разблокировать).

  10. Измените значение DBP в этом файле на значение, скопированное на шаге 8.

    Если скопированное значение короче, чем в зашифрованном файле, вы должны заполнить отсутствующие символы 0 (ноль). Если значение длиннее - это не проблема (вставьте его как есть).

  11. Сохраните файл 'vbaProject.bin' и выйдите из hex-редактора.

  12. Заменить существующий файл vbaProject.bin на измененный.
  13. Изменить расширение с .zip обратно на .xlsm
  14. Теперь откройте файл excel, в котором вам нужен код VBA. Пароль для кода VBA будет просто макросом (как в примере, который я здесь показываю).
...