Как работает защита паролем кода Excel VBA?

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

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

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

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

SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
Один-единственный вредоносный запрос может нанести ущерб вашему бизнесу. Уязвимости вашего кода могут привести к:
8
0
24 643
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Интересно, есть ли в 2007 году возможность хранить в книге только байтовый код макросов, что позволяет доставлять функции без исходного кода?

DaveParillo 20.01.2010 19:59

Эта функциональность (AFAIK) не встроена ни в одну версию Office. Скорее, ожидается, что если вам нужна автоматизация для связанного файла Office, вы будете использовать инструменты Visual Studio для Office (VSTO), чтобы написать свою собственную DLL и сохранить ее как надстройку.

Phil.Wheeler 20.01.2010 23:03

К вашему сведению - я создал xlsm (используя конвертер, доступный для 2003 года). Сменил расширение xlsm на xip, разархивировал и заглянул внутрь. Весь VBA находился внутри одного файла vbaProject.bin. В шестнадцатеричном редакторе он создавался из тех же блоков BIFF, что и другие файлы Excel. Все строки в макросах были хорошо видны. Так что не похоже, что шифрование слишком сильно изменилось.

DaveParillo 04.02.2010 21:22

@DaveParillo - Ага. Спасибо за это. Меня заставили поверить, что код был зашифрован. Наверное, следовало проверить на себе.

Phil.Wheeler 04.02.2010 23:14

Фил прав - пароль мешает вам смотреть на модули, они сами не зашифрованы. Я знаю, что в 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:

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

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

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

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

  10. Измените значение 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).

  11. Сохраните файл vbaProject.bin и выйдите из шестнадцатеричного редактора.

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

На самом деле это не отвечает на вопрос.

GregRos 29.03.2014 02:02

Он не отвечает на него напрямую, но парень, который спросил, может выполнить шаги и код, если он хочет знать, как конкретно это работает.

Morosho 29.03.2014 02:25

Другие вопросы по теме