Вынужденный обход парольной защиты модуля VBA в Excel 2010

в 7:17, , рубрики: Excel, vba module, информационная безопасность, Песочница, сброс пароля, метки: , , ,

Здравствуйте, друзья!
Последние дни бился над такой задачей:
Имеется файл .xls, в нем макрос на VBA, защищенный паролем. Файл создается путем экспортирования из программы ГрандСмета и содержит в себе смету, которая должна обрабатываться макросом.
На 32х разрядных версиях — отрабатывает без проблем.

На 64х столкнулся со следующей ошибкой:
Вынужденный обход парольной защиты модуля VBA в Excel 2010

Справка Microsoft дает однозначный ответ:
Вынужденный обход парольной защиты модуля VBA в Excel 2010

Связывался с Тех.Поддержкой, объяснял причину. Ответ был один:

У нас все работает. Проверяли на 64х разрядных версиях.

Тогда я решился самостоятельно править код макроса. Сложность, с которой столкнулся — модуль защищен паролем. О том, как сбросить/изменить пароль не используя специализированное ПО для взлома пароля
Итак, приступим. Заранее предупрежу — я не профессиональный программист, а скорее ЭниКейщик, так что возможны некорректные формулировки, а кому-то может и вовсе не понравиться выбранный мной путь.
Первым делом я стал бороздить просторы Сети в поисках решения. В основном полным-полно ссылок на ПО, из разряда PasswordCracker. Одно из решений опубликованное на Ru-Board'e полностью удаляло код модуля VBA.
В конце концов, мои старания вознаградились — предлагаю Вам вольный перевод найденного решения (к сожалению не могу указать первоисточник — не помню) + попытка понять суть выявленной «уязвимости».

Думаю, что ни для кого не секрет, что начиная с Excel 2007 использует Microsoft Office Open XML в качестве своего основного формата.

FarManager превосходно открывает xls файл с отображением всей структуры документа.
1. Запускаем FarManager.
2. Открываем файл для редактирования.
3. Ищем строку с определением ключа DPB, и изменяем имя ключа на DPW.
4. Сохраняем.
4. Открываем файл в Excel.
5. Подтверждаем загрузку проекта, не смотря на некорректный ключ (который мы сами и сделали некорректным в п.3):
Вынужденный обход парольной защиты модуля VBA в Excel 2010
6. В окнах с сообщениями об ошибке смело жмем ОК.
7. С помощью комбинации Alt+F11 — запускаем VBA Editor и, вуаля, код макроса доступен для редактирования.

Теперь причина возникавшей ошибки при запуске макроса в среде x64 — очевидна!

Компилятор подсказывает о том, что код в данном проекте должен быть обновлен для использования на 64х разрядных системах, конкретно указав, что надо было всего лишь добавить ключевое слово PtrSafe при объявлении функции.

Изменения внес, пересохранил, проверил. Все работает. Порадовал коллег решением наболевшей проблемы + приобрел опыт.

Пытаюсь решить последний вопрос, на котором я и застопорился:
Как вразумительно, и не обидев, объяснить Тех.Поддержке о решении возникшей проблемы с запуском макроса? Не должен же я самостоятельно перелапачивать все шаблоны (а их порядка 50), чтобы макрос корректно отрабатывал на x64 версиях Офиса. К тому же вопрос этики — пришлось «обходить» защиту кода макроса.

Благодарен за внимание. Надеюсь, что для некоторой части сообщества информация была полезна.

P.S. Вдохновленный решением возникшей проблемы, и оставшись только с одним вопросом, который задал чуть выше, я решился создать свой первый топик на Хабре, в надежде на профессиональный дружеский совет.

Автор: cyb3rD

Поделиться

  1. Макс:

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

  2. Артём:

    Большое спасибо, всё работает, очень помогло. А если файл в новом формате срасширением *.xlsx ?

  3. alik:

    Спасибо! открыл xlsm файл. Единственное, что пришлось сначала новый пароль поставить.

    • Татьяна:

      Alik , прошу . помоги снять защиту с макрoсов проекта VBA excel. У меня что то никак не получается

  4. Виталий:

    Спасибо! очень интересный материал. Единственное не получилось подобным маневром обойти защиту VBA проекта в формате XLSB. :))

  5. Виталий:

    Интересно кроме FarManager можно открыть еще каким либо редактором (присутствующем в стандартном наборе офисном) с возможностью вышеописанного действия. После открытия и сохранения блокнотом например не вышло.

  6. AleS:

    Пробовал xlsm-файл убрать защиту с макроса. Пишет «Unexpected error (40230)» и макрос не доступен… Не помогло.

    • AleS:

      Сори… Все получилось.

    • Alemix:

      ‘Пробовал xlsm-файл убрать защиту с макроса. Пишет «Unexpected error (40230)» и макрос не доступен… Не помогло.’

      Заходим в свойства проекта, вкладка Защита и прописываем новый пароль, и затем подтверждаем его. Сохраняем. После чего должен открыться код.

  7. Alex:

    AleS, та же проблема с «Unexpected error (40230)». Не могу справиться. Как решили проблему?

  8. Антон:

    Пробовал убрать защиту с макроса VBA, но в файле xlsm нет ключа DPB! Как быть?

    • GGG1972:

      Аналогично, xlsm файл DPB ключа не содержит, сохранение в предыдущую версию xls тоже не помогает — макрос с паролем остаётся, хекс редактор ключа DPB найти не может :(

  9. Log:

    Не удается сохранить изменения, может кто подробнее описать действия в Far

  10. Костя:

    А говорят еще можно строку с ключом DPB изменить имя ключа на DPL.

  11. Alemix:

    ‘Пробовал xlsm-файл убрать защиту с макроса. Пишет «Unexpected error (40230)» и макрос не доступен… Не помогло.’

    ‘AleS, та же проблема с «Unexpected error (40230)». Не могу справиться. Как решили проблему?’

    Заходим в свойства проекта, вкладка Защита и прописываем новый пароль, и затем подтверждаем его. Сохраняем. После чего должен открыться код.

  12. Sergey:

    А можно ли запаролить так, чтобы проект нельзя было взломать?
    Написал и продал проект. Теперь идея сделать его универсальным и пустить на поток.
    Но как обезопаситься от таких взломов?
    Не хочу, чтобы такие умельцы начали взламывать и распространять бесплатно.
    Спасибо за ответ.

* - обязательные к заполнению поля