Vba excel открыта ли форма

Обновлено: 04.07.2024

Мне было предложено обновить некоторые макросы Excel 2003, но проекты VBA защищены паролем, и похоже, что отсутствует документация. никто не знает пароли.

Есть ли способ удалить или взломать пароль в проекте VBA?

ОТВЕТЫ

Ответ 1

Вы можете попробовать этот прямой подход VBA , который не требует редактирования HEX. Это будет работать для любых файлов (*.xls, *.xlsm, *.xlam. ).

Протестировано и работает на:

Excel 2007
Excel 2010
Excel 2013 - 32-разрядная версия
Excel 2016 - 32-разрядная версия

Ищете 64-битную версию? Смотрите этот ответ

Как это работает

Я постараюсь объяснить, как это работает, извините, пожалуйста, за мой английский.

  1. VBE вызовет системную функцию для создания диалогового окна пароля.
  2. Если пользователь вводит правильный пароль и нажимает OK, эта функция возвращает 1. Если пользователь вводит неправильный пароль или нажимает Отмена, эта функция возвращает 0.
  3. После закрытия диалогового окна VBE проверяет возвращаемое значение системной функции
  4. если это значение равно 1, VBE будет "думать", что пароль верный, поэтому заблокированный проект VBA будет открыт.
  5. Приведенный ниже код заменяет память исходной функции, использованной для отображения диалогового окна ввода пароля, с пользовательской функцией, которая всегда будет возвращать 1 при вызове.

Используя код

Пожалуйста, сначала сделайте резервную копию ваших файлов!

    Откройте файл (ы), которые содержат ваши заблокированные проекты VBA

Создайте новый файл xlsm и сохраните этот код в Module1

code credited to Siwtom (nick name), a Vietnamese developer

Вставьте этот код под вышеуказанным кодом в Module1 и запустите его

Возвращайтесь к своим проектам VBA и наслаждайтесь.

Ответ 2

Да, есть, пока вы используете таблицу формата .xls (по умолчанию для Excel до 2003 года). Для Excel 2007 по умолчанию используется .xlsx , который является довольно безопасным форматом, и этот метод не будет работать.

Как говорит Треб, это простое сравнение. Один из способов - просто поменять запись пароля в файле с помощью шестнадцатеричного редактора (см. Hex editors for Windows). Шаг за шагом:

  • Создайте новый простой файл excel.
  • В части VBA установите простой пароль (скажем - 1234).
  • Сохраните файл и выйдите. Затем проверьте размер файла - см. Stewbob gotcha
  • Откройте файл, который вы только что создали, с помощью шестнадцатеричного редактора.

Скопируйте строки, начинающиеся со следующих клавиш:

FIRST BACKUP файл excel, для которого вы не знаете пароль VBA, затем откройте его с помощью шестнадцатеричного редактора и вставьте указанные выше скопированные строки из фиктивного файла.

Если вам нужно работать с Excel 2007 или 2010, есть некоторые другие ответы ниже, которые могут помочь, особенно эти: 1, 2, 3.

EDIT Февраль 2015: для другого метода, который выглядит очень многообещающим, посмотрите этот новый ответ на Đức Тхань Нгуен.

Ответ 3

Существует другое (несколько проще) решение без проблем с размером. Сегодня я использовал этот подход (в файле XLS 2003 года, используя Excel 2007) и был успешным.

  • Резервное копирование файла xls
  • Откройте файл в редакторе HEX и найдите DPB=. часть
  • Измените строку DPB=. на DPx=.
  • Откройте файл xls в Excel
  • Откройте редактор VBA ( ALT + F11 )
  • волшебство: Excel обнаруживает недействительный ключ (DPx) и спрашивает, хотите ли вы продолжить загрузку проекта (в основном игнорируя защиту).
  • Вы сможете перезаписать пароль, поэтому измените его на то, что вы можете запомнить
  • Сохранить файл xls *
  • Закройте и снова откройте документ и примените магию VBA!

Ответ 4

Я построил на Đức Thanh Nguyễn фантастический ответ, чтобы этот метод работал с 64-разрядными версиями Excel. Я запускаю 64-разрядную версию Excel 2010 в 64-разрядной версии Windows 7.

    Откройте файл (ы), содержащий ваши заблокированные проекты VBA.

Создайте новый файл xlsm и сохраните этот код в Module1

Вставьте этот код в Module2 и запустите его

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Это сработало для меня, и я зарегистрировал его здесь, надеясь, что это поможет кому-то. Я не полностью его протестировал. Перед продолжением этой операции обязательно сохраните все открытые файлы.

Ответ 5

Колин Пикард имеет отличный ответ, но с этим "один из них". Есть примеры (я еще не выяснил причину), где общая длина записи "CMG =. GC =. " в файле отличается от одного файла excel следующий. В некоторых случаях эта запись будет 137 байтов, а в других - 143 байта. Длина 137 байтов является нечетной, и если это происходит, когда вы создаете свой файл с паролем "1234", просто создайте еще один файл, и он должен перейти к 143 байтовой длине.

Если вы попытаетесь вставить неправильное количество байтов в файл, вы потеряете проект VBA при попытке открыть файл с помощью Excel.

ИЗМЕНИТЬ

Это неверно для файлов Excel 2007/2010. Стандартный формат файла .xlsx на самом деле представляет собой .zip файл, содержащий множество подпапок с форматированием, макетом, контентом и т.д., Которые хранятся в виде XML-данных. Для незащищенного файла Excel 2007 вы можете просто изменить расширение .xlsx на .zip, затем открыть zip файл и просмотреть все XML-данные. Это очень просто.

Однако, когда вы защищаете пароль для файла Excel 2007, весь файл .zip(.xlsx) фактически шифруется с использованием шифрования RSA. Больше не возможно изменить расширение на .zip и просмотреть содержимое файла.

Ответ 6

Для типа файла .xlsm или .dotm вам нужно сделать это несколько иначе.

  1. Измените расширение файла .xlsm на .zip .
  2. Откройте ZIP файл (с WinZip или WinRar и т.д.) И перейдите в папку xl.
  3. Извлеките файл vbaProject.bin и откройте его в Hex-редакторе (я использую HxD, его полностью свободный и легкий).
  4. Найдите DPB и замените DPx и сохраните файл.
  5. Замените старый файл vbaProject.bin этим новым в zip файле.
  6. Измените расширение файла на .xlsm .
  7. Открытая рабочая книга пропускает предупреждения.
  8. Откройте Visual Basic внутри Excel.
  9. Откройте "Инструменты"> "Свойства VBAProject"> вкладка "Защита".
  10. Вставьте новый пароль и сохраните файл .xlsm .
  11. Закройте и снова откройте, и ваш новый пароль будет работать.

Ответ 7

Стоит отметить, что если у вас есть файл Excel 2007 (xlsm), вы можете просто сохранить его как файл Excel 2003 (xls) и использовать методы, изложенные в других ответах.

Ответ 8

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

Это было давно, поэтому, если бы это была не просто случайность с моей стороны, она также могла быть исправлена.

Ответ 9

Для Excel 2007 вам необходимо изменить расширение файла на .zip В архиве есть подпапка xl, там вы найдете vbaProject.bin. Следуйте приведенному выше шагу с помощью vbaProject.bin, затем сохраните его в архиве. Измените свое расширение и вуаля! (что означает следующие шаги выше)

Ответ 10

С моей стороны, это основано на превосходном ответе kaybee99, который основан на фантастическом ответе Тхана Нгуйена, чтобы этот метод мог работать как с версиями Office для x86, так и для amd64.

Обзор того, что изменилось, мы избегаем push/ret, который ограничен 32-битными адресами, и заменяем его на mov/jmp reg.

Проверено и работает на

Word/Excel 2016 - 32-битная версия.
Word/Excel 2016 - 64-битная версия.

как это устроено

    Откройте файл (ы), которые содержат ваши заблокированные проекты VBA.

Создайте новый файл того же типа, что и выше, и сохраните этот код в Module1

Вставьте этот код в Module2 и запустите его

Ответ 11

В случае, если ваш блок CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX" в вашем файле "известного пароля" короче, чем существующий блок в файле "неизвестного пароля", введите ваши шестнадцатеричные строки с завершающими нулями, чтобы достичь нужной длины.

в файле неизвестного пароля, следует установить значение

CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000" , чтобы сохранить длину файла.

У меня также работало с файлами формата .XLA(97/2003) в офисе 2007.

Ответ 12

Документы VBA Project Passwords on Access, Excel, Powerpoint или Word (версии 2007, 2010, 2013 or 2016 с расширениями .ACCDB.XLSM.XLTM.DOCM.DOTM.POTM.PPSM ) могут быть легко удалены.

Это просто вопрос изменения расширения имени файла на .ZIP , разархивирование файла и использование любого базового Hex Editor (например, XVI32) для "разрыва" существующего пароля, который "смущает" Office, поэтому в следующий раз он запрашивает новый пароль, файл открывается.

  • переименуйте файл, чтобы он имел расширение .ZIP .
  • откройте ZIP и перейдите в папку XL .
  • извлеките vbaProject.bin и откройте его с помощью Hex-редактора
  • "Поиск и замена" на "заменить все" смены DPB на DPX .
  • Сохраните изменения, поместите файл .bin обратно в zip, верните ему нормальное расширение и откройте файл, как обычно.
  • ALT + F11, чтобы войти в редактор VB и щелкнуть правой кнопкой мыши в Project Explorer, чтобы выбрать VBA Project Properties .
  • На вкладке " Protection " установите новый пароль.
  • Нажмите OK , закройте файл, откройте его, нажмите ALT + F11.
  • Введите новый пароль, который вы установили.

На этом этапе вы можете полностью удалить пароль, если захотите.

Полные инструкции с пошаговым видео, которые я сделал "назад, когда" находятся на YouTube здесь.

Это шокирует, что это решение уже давно существует, и Microsoft не исправила проблему.

Мораль этой истории?

Пакеты паролей Microsoft Office VBA не должны использоваться для обеспечения безопасности любой конфиденциальной информации. Если важна безопасность, используйте стороннее программное обеспечение для шифрования.

Ответ 13

Колин Пикард в основном прав, но не путайте "пароль для открытия" защиты всего файла с помощью защиты паролем VBA, которая полностью отличается от прежней и одинакова для Office 2003 и 2007 (для Office 2007, переименуйте файл в .zip и найдите vbaProject.bin внутри zip). И технически правильный способ редактирования файла - использовать средство просмотра документов OLE, например CFX, для открытия правильного потока. Конечно, если вы просто заменяете байты, может работать простой старый двоичный редактор.

Кстати, если вам интересно узнать о точном формате этих полей, они уже документированы:

Ответ 14

Если файл является допустимым zip файлом (первые несколько байтов 50 4B - используются в форматах типа .xlsm ), затем распакуйте файл и найдите подфайл xl/vbaProject.bin . Это файл CFB, как файлы .xls . Следуйте инструкциям для формата XLS (применяется к подфайлу), а затем просто запишите содержимое.

с пробелами. Это устраняет проблемы с размером контейнера CFB.

Ответ 15

Я попробовал некоторые из вышеперечисленных решений, и ни один из них не работает для меня (excel 2007 xlsm file). Затем я нашел еще одно решение, которое даже извлекает пароль, а не только разорвать его.

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

Ответ 16

ElcomSoft производит Advanced Office Password Breaker и Advanced Office Password Recovery продукты, которые могут применяться в этом случае, если документ был создан в Office 2007 или более ранней версии.

Ответ 17

Том. Сначала я сделал ошибку школьника, так как я не наблюдал размер байта, и вместо этого я скопировал и вставил из "CMG", настроенного на последующую запись. Это два разных размера текста между этими двумя файлами, и я потерял проект VBA так же, как предупреждал Stewbob.

Используя HxD, отслеживается отслеживание количества файлов, которые вы выбираете. Скопируйте, начиная с CMG, до тех пор, пока счетчик не прочитает 8F (hex для 143), а также при вставке в заблокированный файл. Я закончил с удвоенным количеством ". " в конце пасты, которое выглядело как-то странно и почти неестественно, но это сработало.

Я не знаю, важно ли это, но я убедился, что я закрыл как шестнадцатеричный редактор, так и отлично, прежде чем снова открыть файл в Excel. Затем мне пришлось пройти через меню, чтобы открыть редактор VB, в свойства VBProject и ввести новый пароль для разблокировки кода.

Надеюсь, это поможет.

Ответ 18

Мой инструмент VbaDiff, читает VBA непосредственно из файла, поэтому вы можете использовать его для восстановления защищенного кода VBA из большинства офисных документов не прибегая к шестнадцатеричному редактору.

Ответ 19

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

Ответ 20

ваше расширение файла excel изменится на xml. И откройте его в блокноте. поиск текста в текстовом файле в формате xml.

вы видите строку ниже;

(извините за мой плохой английский)

Ответ 21

Для 64-разрядной версии Excel 2016 на машине с Windows 10 я использовал шестнадцатеричный редактор, чтобы иметь возможность изменять пароль защищенной xla (не тестировал это для каких-либо других расширений). Совет: создайте резервную копию, прежде чем делать это.

Сделанные мной шаги:

Надеюсь, это помогло некоторым из вас!

Ответ 22

Если вы работаете в Java , вы можете попробовать VBAMacroExtractor . После извлечения сценариев VBA из .xlsm я нашел там пароль в открытом тексте.

Читайте также: