Вы можете сохранить .xls вместо .xla, как показывают примеры в вашей ссылке? Не уверен, что это будет иметь значение.
B Hart
4
хорошо известно: xlsb устойчив к взлому паролей
Qbik
20
@ Fandango68 Этот вопрос обсуждался несколько лет назад на мета . TLDR: Многие (большинство?) Вопросы о SO могут быть использованы плохими участниками, но если нет явных доказательств неправомерных действий, мы предполагаем добросовестность. Существует множество законных и этических причин взломать пароль VBA. Кроме того, обсуждение слабых мест существующих систем в конечном итоге способствует повышению безопасности в будущем и не позволяет людям слепо полагаться на небезопасные системы сейчас.
jmbpiano
Ответы:
701
Вы можете попробовать этот прямой VBAподход, который не требует редактирования HEX. Это будет работать для любых файлов (* .xls, * .xlsm, * .xlam ...).
Протестировано и работает на:
Excel 2007
Excel 2010
Excel 2013 - 32-разрядная версия
Excel 2016 - 32-разрядная версия
Я постараюсь объяснить, как это работает - извините, пожалуйста, за мой английский.
VBE вызовет системную функцию для создания диалогового окна пароля.
Если пользователь вводит правильный пароль и нажимает OK, эта функция возвращает 1. Если пользователь вводит неправильный пароль или нажимает Отмена, эта функция возвращает 0.
После закрытия диалогового окна VBE проверяет возвращаемое значение системной функции.
если это значение равно 1, VBE будет «думать», что пароль верный, поэтому заблокированный проект VBA будет открыт.
Приведенный ниже код заменяет память исходной функции, использованной для отображения диалогового окна ввода пароля, с пользовательской функцией, которая всегда будет возвращать 1 при вызове.
Используя код
Пожалуйста, сделайте резервную копию ваших файлов в первую очередь!
Откройте файл (ы), которые содержат ваши заблокированные проекты VBA
Создайте новый файл xlsm и сохраните этот код в Module1
code credited to Siwtom (nick name), a Vietnamese developer
@ Крис, ты абсолютно прав. Потому что функции Windows API определены для win 32 в этом коде.
Đức Тхань Нгуен
8
Было бы неплохо объяснить, как это работает.
Деннис G
20
Теперь остается только один вопрос (увидев, что этот впечатляющий метод работает отлично), как, черт возьми, я могу сделать свой проект VBA более защищенным, чтобы другие не могли использовать этот хак для него :)
EranG
6
Этот код прекрасно работает для разблокировки кода VBA, хотя каждый раз, когда я его использую, он не позволяет мне повторно защищать проект с помощью другого пароля, была ли у кого-нибудь еще эта проблема?
Мэтью Бонд
2
Я обнаружил, что это повреждает проект VBA в файле Excel, поэтому мне пришлось экспортировать все модули / классы, затем сохранить файл как xlsx (не-макрос), затем ЗАКРЫТЬ файл (глупый Excel), затем снова открыть, затем импортировать модули и копировать код из файлов классов. На этом этапе я мог сохранить файл как xlsm со своим собственным паролем в проекте VBA.
BH
217
Да, если вы используете .xlsэлектронную таблицу формата (по умолчанию для Excel до 2003 года). Для Excel 2007 и более поздних версий по умолчанию .xlsxиспользуется довольно безопасный формат, и этот метод не будет работать.
Как говорит Треб, это простое сравнение. Один из способов - просто заменить запись пароля в файле с помощью шестнадцатеричного редактора (см. Шестнадцатеричные редакторы для Windows ). Пошаговый пример:
Создайте новый простой файл Excel.
В части VBA установите простой пароль (скажем, 1234).
Сохраните файл и выйдите. Затем проверьте размер файла - посмотрите, что получит Stewbob
Откройте файл, который вы только что создали с помощью шестнадцатеричного редактора.
Скопируйте строки, начиная со следующих ключей:
CMG=....
DPB=...
GC=...
Первое резервное копирование копию файла Excel, для которого вы не знаете пароль VBA, затем откройте его в своем шестнадцатеричном редакторе и вставьте скопированные выше строки из фиктивного файла.
Сохраните файл Excel и выйдите.
Теперь откройте файл Excel, в котором нужно увидеть код VBA. Пароль для кода VBA будет просто 1234 (как в примере, который я здесь показываю).
Если вам нужно работать с Excel 2007 или 2010, ниже могут быть полезны и другие ответы, в частности: 1 , 2 , 3 .
РЕДАКТИРОВАТЬ Февраль 2015: для другого метода, который выглядит очень многообещающим, посмотрите на этот новый ответ Đức Thanh Nguyễn.
В пустом файле excel или заблокированном? Проверьте размер файла пустого файла. Если это заблокированный файл, убедитесь, что ваша резервная копия в безопасности, а затем попробуйте изменить только две другие строки. Вы уверены, что это зашифрованный файл?
Колин Пикард
6
Защита паролем в Excel 2007 (и формат файла) радикально отличается от Excel 2003. Я включил некоторые подробности об этом в свой ответ ниже. На мой взгляд, опция защищенная паролем для файла Excel 2007 - это первый случай в истории Microsoft Office, когда они создали достаточно безопасный файл.
Stewbob
1
Я не смог установить пароль VBA для нового файла Excel 2016 года. Может ли кто-нибудь просто поделиться HEX с заменой на 1234? Или это может измениться от машины к машине?
Мескалито
1
Этот подход работал для меня на файл .xlsm. Я сохранил его как .xls, сделал это, а затем преобразовал обратно в .xlsm. Следует отметить, что вы можете безопасно увеличить длину файла, если новая CMG...строка длиннее оригинальной.
Дрю Чапин
173
Я основывался на фантастическом ответе Тхана Нгуйена, чтобы этот метод мог работать с 64-битными версиями Excel. Я использую 64-битную версию Excel 2010 на 64-битной Windows 7.
Откройте файл (ы), которые содержат ваши заблокированные проекты VBA.
Создайте новый файл xlsm и сохраните этот код в Module1
Option Explicit
PrivateConst PAGE_EXECUTE_READWRITE =&H40PrivateDeclare PtrSafe Sub MoveMemory Lib"kernel32"Alias"RtlMoveMemory" _
(Destination As LongPtr, Source As LongPtr,ByVal Length As LongPtr)PrivateDeclare PtrSafe Function VirtualProtect Lib"kernel32"(lpAddress As LongPtr, _
ByVal dwSize As LongPtr,ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr)As LongPtr
PrivateDeclare PtrSafe Function GetModuleHandleA Lib"kernel32"(ByVal lpModuleName AsString)As LongPtr
PrivateDeclare PtrSafe Function GetProcAddress Lib"kernel32"(ByVal hModule As LongPtr, _
ByVal lpProcName AsString)As LongPtr
PrivateDeclare PtrSafe Function DialogBoxParam Lib"user32"Alias"DialogBoxParamA"(ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr,ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr,ByVal dwInitParam As LongPtr)AsIntegerDim HookBytes(0To5)AsByteDim OriginBytes(0To5)AsByteDim pFunc As LongPtr
Dim Flag AsBooleanPrivateFunction GetPtr(ByVal Value As LongPtr)As LongPtr
GetPtr = Value
EndFunctionPublicSub RecoverBytes()If Flag Then MoveMemory ByVal pFunc,ByVal VarPtr(OriginBytes(0)),6EndSubPublicFunction Hook()AsBooleanDim TmpBytes(0To5)AsByteDim p As LongPtr
Dim OriginProtect As LongPtr
Hook =False
pFunc = GetProcAddress(GetModuleHandleA("user32.dll"),"DialogBoxParamA")If VirtualProtect(ByVal pFunc,6, PAGE_EXECUTE_READWRITE, OriginProtect)<>0Then
MoveMemory ByVal VarPtr(TmpBytes(0)),ByVal pFunc,6If TmpBytes(0)<>&H68Then
MoveMemory ByVal VarPtr(OriginBytes(0)),ByVal pFunc,6
p = GetPtr(AddressOf MyDialogBoxParam)
HookBytes(0)=&H68
MoveMemory ByVal VarPtr(HookBytes(1)),ByVal VarPtr(p),4
HookBytes(5)=&HC3
MoveMemory ByVal pFunc,ByVal VarPtr(HookBytes(0)),6
Flag =True
Hook =TrueEndIfEndIfEndFunctionPrivateFunction MyDialogBoxParam(ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr,ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr,ByVal dwInitParam As LongPtr)AsIntegerIf pTemplateName =4070Then
MyDialogBoxParam =1Else
RecoverBytes
MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
hWndParent, lpDialogFunc, dwInitParam)
Hook
EndIfEndFunction
Вставьте этот код в Module2 и запустите его
Sub unprotected()If Hook Then
MsgBox "VBA Project is unprotected!", vbInformation,"*****"EndIfEndSub
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Это сработало для меня, и я задокументировал это здесь в надежде, что это кому-нибудь поможет. Я не полностью проверил это . Пожалуйста, сохраните все открытые файлы, прежде чем продолжить с этой опцией.
Я не уверен, почему, но когда я запускаю это в Excel для 365 MSP 64-битных сбоев Excel, он закрывает файлы, и когда я перезапускаю его, пароль все еще там.
Eborbath
Это не может быть сделано в Excel больше, поскольку параметры в контекстном меню отображаются серым цветом, поэтому вы не можете создать модуль.
thanos.a
170
Есть другое (несколько более простое) решение, без проблем с размером. Я использовал этот подход сегодня (в файле 2003 XLS, используя Excel 2007) и был успешным.
Резервное копирование файла XLS
Откройте файл в редакторе HEX и найдите DPB=...деталь
Измените DPB=...строку наDPx=...
Откройте файл xls в Excel
Откройте редактор VBA ( ALT+ F11)
магия:
Excel обнаруживает неверный ключ (DPx) и спрашивает, хотите ли вы продолжить загрузку проекта (в основном игнорируя защиту)
Вы сможете перезаписать пароль, поэтому измените его на то, что вы можете запомнить
Сохранить файл xls *
Закройте и снова откройте документ и примените магию VBA!
* ПРИМЕЧАНИЕ. Убедитесь, что вы изменили пароль на новое значение, в противном случае при следующем открытии электронной таблицы Excel сообщит об ошибках (неожиданная ошибка), а затем при доступе к списку модулей VBA вы увидите имена исходные модули, но при попытке открыть формы / код / и т. д. появляется другая ошибка Чтобы исправить это, вернитесь в Свойства проекта VBA и установите новое значение пароля. Сохраните и снова откройте документ Excel, и все будет хорошо!
К сожалению, это не сработало для меня с Excel для Mac 2011 v14.2.5. Я получил возможность восстановить файл, а не сбросить пароль, и в результате были потеряны все сценарии VBA.
Джо Кэрролл
Идеальное решение - я сделал это с файлом 2003, используя HxD Hex Editor
Chris W
4
Я только что попробовал (.xls, Excel 2007), и это не сработало. Результат: модули видны, код действительно работает, но при открытии модуля появляется неожиданная ошибка (40230) .
KekuSemau
2
Та же ошибка здесь (Excel 2010) - но потом я понял, что пропустил «установить новый пароль и сохранить / открыть» (шаги 7-9) из Pieter.
Оуэн Б
+1 Этот метод также работал с нашим плохо разработанным файлом доступа (.mdb)! Теперь мы можем сделать это лучше, спасибо за это!
Эр Габриэль Доронила
65
У Колина Пикарда отличный ответ, но есть один «настороже» с этим. Есть случаи (я еще не выяснил причину), где общая длина записи "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 и просмотреть содержимое файла.
Тогда вам нужно использовать стандартные инструменты для взлома почтовых индексов. Это больше не проблема «как мне вернуть файл Excel».
Анонимный тип
3
@ Аноним Тип: Я думаю, что инструмент взлома почтовых индексов не поможет. Как я понимаю, Stewbob зашифровывают не записи в zip-файле, а весь сам zip-файл, который должен включать заголовок и центральный каталог.
Треб
2
Просто любопытно: как может быть RSA, когда я просто ввожу один пароль (симметричный)?
kizzx2
Как насчет того, когда файл, в который вы хотите попасть, имеет более короткие ключи? Просто продолжайте создавать документы VBA, пока не получите тот, который имеет 137?
только
1
Вы уверены, что весь zip-файл шифруется при блокировке проекта VBA? Я все еще могу открыть zipfile и увидеть структуру файла .... И подпапка xl \ содержит файл vbaProject.bin, который имеет знакомый блок хеширования "CMG = ... GC =".
Найджел Хеффернан
63
Для файла .xlsmили .dotmтипа файла вам нужно сделать это немного по-другому.
Измените расширение .xlsmфайла на .zip.
Откройте файл .zip (с помощью WinZip или WinRar и т. Д.) И перейдите в папку xl.
Извлеките vbaProject.binфайл и откройте его в Hex Editor (я использую HxD , он совершенно бесплатный и легкий).
Найдите DPBи замените DPxи сохраните файл.
Замените старый vbaProject.binфайл на новый в архивном файле.
Измените расширение файла обратно на .xlsm.
Открытая рабочая книга пропускает предупреждающие сообщения.
Откройте Visual Basic внутри Excel.
Перейдите в Инструменты> Свойства VBAProject> Вкладка Защита.
Введите новый пароль и сохраните .xlsmфайл.
Закройте и снова откройте, и ваш новый пароль будет работать.
Работал в Excel 2016, Windows 10 64bit. (xlsm файлы)
LimaNightHawk
3
Работал в Word 2016, Windows 10 64bit (точечные файлы)
NBajanca
7
Отличное решение, работало для меня в Excel 2013 64 бит. Вы можете пропустить изменение расширений файлов, .zipесли у вас установлен 7-Zip . В этом случае вы можете просто щелкнуть правой кнопкой мыши по .xlsmфайлу и выбрать «7-Zip -> Открыть архив»
nkatsar
работает с Word 2013, win7x64. (Это очень грустно, так легко обмануть себя, чтобы поверить, что код несколько безопасен).
Ягода Цакала
1
@ThierryMichel Сочетание предыдущих решений и проб и ошибок!
Мэтт
35
Стоит отметить, что если у вас есть файл Excel 2007 (xlsm), вы можете просто сохранить его как файл Excel 2003 (xls) и использовать методы, описанные в других ответах.
это неправда, я работал с файлами, для которых преобразование в xls / xla из xlsm было невозможно, Excel 2007 и 2010 аварийно завершали работу каждый раз, я пробовал разные экземпляры, из одного сообщения об ошибке - Kod wyjątku: c0000005 Przesunięcie wyjątku: 005d211d
Qbik
4
Да, ты можешь сделать это. Я делал это много раз. Если на листах есть что-то необходимое, а что не перенесено в более старую версию, я делаю это: 1.конвертирую .xlsm в .xls, взломаю 2.код .xls, 3.конвертирую .xlsm в .xlsx. 4.Поместите код из модулей в .xls в. xlsx и сохраните его как .xlsm
ZygD
Это работает после преобразования xlsm в xls как в ответе.
Purus
32
С моей стороны, это основано на превосходном ответе kaybee99, который основан на фантастическом ответе Тхана Нгуйена, чтобы этот метод мог работать как с версиями Office для x86, так и для amd64.
Обзор того, что изменилось, мы избегаем push / ret, который ограничен 32-битными адресами, и заменяем его на mov / jmp reg.
Проверено и работает на
Word / Excel 2016 - 32-битная версия .
Word / Excel 2016 - 64-битная версия .
как это работает
Откройте файл (ы), которые содержат ваши заблокированные проекты VBA.
Создайте новый файл того же типа, что и выше, и сохраните этот код в Module1
Option Explicit
PrivateConst PAGE_EXECUTE_READWRITE =&H40PrivateDeclare PtrSafe Sub MoveMemory Lib"kernel32"Alias"RtlMoveMemory" _
(Destination As LongPtr, Source As LongPtr,ByVal Length As LongPtr)PrivateDeclare PtrSafe Function VirtualProtect Lib"kernel32"(lpAddress As LongPtr, _
ByVal dwSize As LongPtr,ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr)As LongPtr
PrivateDeclare PtrSafe Function GetModuleHandleA Lib"kernel32"(ByVal lpModuleName AsString)As LongPtr
PrivateDeclare PtrSafe Function GetProcAddress Lib"kernel32"(ByVal hModule As LongPtr, _
ByVal lpProcName AsString)As LongPtr
PrivateDeclare PtrSafe Function DialogBoxParam Lib"user32"Alias"DialogBoxParamA"(ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr,ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr,ByVal dwInitParam As LongPtr)AsIntegerDim HookBytes(0To11)AsByteDim OriginBytes(0To11)AsByteDim pFunc As LongPtr
Dim Flag AsBooleanPrivateFunction GetPtr(ByVal Value As LongPtr)As LongPtr
GetPtr = Value
EndFunctionPublicSub RecoverBytes()If Flag Then MoveMemory ByVal pFunc,ByVal VarPtr(OriginBytes(0)),12EndSubPublicFunction Hook()AsBooleanDim TmpBytes(0To11)AsByteDim p As LongPtr, osi AsByteDim OriginProtect As LongPtr
Hook =False#If Win64 Then
osi =1#Else
osi =0#EndIf
pFunc = GetProcAddress(GetModuleHandleA("user32.dll"),"DialogBoxParamA")If VirtualProtect(ByVal pFunc,12, PAGE_EXECUTE_READWRITE, OriginProtect)<>0Then
MoveMemory ByVal VarPtr(TmpBytes(0)),ByVal pFunc, osi+1If TmpBytes(osi)<>&HB8Then
MoveMemory ByVal VarPtr(OriginBytes(0)),ByVal pFunc,12
p = GetPtr(AddressOf MyDialogBoxParam)If osi Then HookBytes(0)=&H48
HookBytes(osi)=&HB8
osi = osi +1
MoveMemory ByVal VarPtr(HookBytes(osi)),ByVal VarPtr(p),4* osi
HookBytes(osi +4* osi)=&HFF
HookBytes(osi +4* osi +1)=&HE0
MoveMemory ByVal pFunc,ByVal VarPtr(HookBytes(0)),12
Flag =True
Hook =TrueEndIfEndIfEndFunctionPrivateFunction MyDialogBoxParam(ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr,ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr,ByVal dwInitParam As LongPtr)AsIntegerIf pTemplateName =4070Then
MyDialogBoxParam =1Else
RecoverBytes
MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
hWndParent, lpDialogFunc, dwInitParam)
Hook
EndIfEndFunction
Вставьте этот код в Module2 и запустите его
Sub unprotected()If Hook Then
MsgBox "VBA Project is unprotected!", vbInformation,"*****"EndIfEndSub
Отлично! Работа с Windows Server 2016, Excel 2016 32 бита
Зин Мин
Это работало над файлом .xlsm в Excel Office 365. Спасибо!
Райан Джеймс
Все еще работает в 2019 году, Office 365 64bit последние сборки, классные ребята!
XavierAM
Спасибо за обновленный код, я столкнулся со сбоями при запуске предыдущей версии (64-битной), но все хорошо с вашей версией
emjaySX
Потрясающе ... Отлично
сработало
17
Вы пытались просто открыть их в OpenOffice.org?
Некоторое время назад у меня была похожая проблема, и я обнаружил, что Excel и Calc не понимают шифрование друг друга и поэтому имеют прямой доступ практически ко всему.
Это было некоторое время назад, поэтому, если бы это была не просто случайность с моей стороны, это также могло быть исправлено.
В случае, если ваш блок
CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX"
в файле «известного пароля» короче, чем существующий блок в файле «неизвестного пароля», добавьте шестнадцатеричные строки с конечными нулями, чтобы получить правильную длину.
например
CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"
в файле с неизвестным паролем, должно быть установлено
CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000" сохранить длину файла.
У меня также была эта работа с файлами .XLA (формат 97/2003) в Office 2007.
Это работает, но, как я недавно обнаружил (прокомментировал выше), вы также можете просто добавить нулевые символы после последней закрывающей кавычки в блоке GC = "...", пока не достигнете той же длины.
тобриан
13
Для Excel 2007 и более поздних вам необходимо изменить расширение файла на .zip. В архиве есть подпапка xl, в которой вы найдете vbaProject.bin. Выполните шаг выше с vbaProject.bin, затем сохраните его обратно в архиве. Измените свое расширение и вуаля! (то есть следуйте инструкциям выше)
Я могу подтвердить, что это работает и для файлов .xlam в Excel 2010. +1!
Gimelist
12
Пароли проекта VBA для документов Access, Excel, Powerpoint или Word ( 2007, 2010, 2013 or 2016версии с расширениями .ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM) могут быть легко удалить .
Это просто вопрос изменения расширения имени файла .ZIP, разархивирования файла и использования любого простого шестнадцатеричного редактора (например, обычного XVI32 ), чтобы «сломать» существующий пароль, что «смущает» Office, поэтому он запрашивает новый пароль в следующий раз, когда файл открыт.
Краткое изложение шагов:
переименуйте файл, чтобы он имел .ZIP расширение.
открыть ZIP и перейдите в XLпапку.
экстракт vbaProject.bin и открыть его с помощью Hex Editor
«Поиск и замена», чтобы «заменить все», изменяя DPBнаDPX .
Сохраните изменения, поместите .bin файл обратно в zip, верните его в нормальное расширение и откройте файл как обычно.
ALT + F11, чтобы войти в VB Editor и щелкнуть правой кнопкой мыши в Project Explorer, чтобы выбрать VBA Project Properties .
На Protection вкладке Установить новый пароль.
щелчок OK , закройте файл, снова откройте его, нажмите ALT + F11.
Введите новый пароль, который вы установили.
На этом этапе вы можете полностью удалить пароль, если захотите.
Полные инструкции с пошаговым видео, которое я сделал «когда-то», находятся на YouTube здесь .
Это шокирует, что этот обходной путь существует уже много лет, и Microsoft не устранила проблему.
Мораль этой истории?
Пароли проекта Microsoft Office VBA не должны использоваться для обеспечения безопасности любой конфиденциальной информации . Если важна безопасность, используйте стороннее программное обеспечение для шифрования.
Колин Пикард в основном прав, но не путайте защиту «пароль для открытия» для всего файла с защитой паролем VBA, которая полностью отличается от предыдущей и одинакова для Office 2003 и 2007 (для Office 2007 переименуйте файл в .zip и найдите vbaProject.bin внутри zip). И что технически правильный способ редактировать файл - это использовать средство просмотра составных документов OLE, такое как CFX, чтобы открыть правильный поток. Конечно, если вы просто заменяете байты, может работать обычный старый бинарный редактор.
Кстати, если вас интересует точный формат этих полей, они уже задокументированы:
Следующая ссылка содержит подробную информацию о файлах формата XSLM. gbanik.blogspot.co.uk/2010/08/… Решение такое же, как и описанное Yuhong Bao выше, но делает его интересным для чтения и включает скриншоты.
JohnLBevan
7
Если файл является допустимым zip-файлом (первые несколько байтов 50 4Bиспользуются в таких форматах, как .xlsm), то разархивируйте файл и найдите подфайл xl/vbaProject.bin. Это файл CFB, как и .xlsфайлы. Следуйте инструкциям для формата XLS (применяется к подфайлу), а затем просто заархивируйте содержимое.
Для формата XLS вы можете использовать некоторые другие методы в этом посте. Я лично предпочитаю искать DPB=блок и заменять текст
CMG="..."
DPB="..."
GC="..."
с пробелами. Это устраняет проблемы с размером контейнера CFB.
Я попробовал некоторые из решений выше, и ни одно из них не работает для меня (файл Excel 2007 xlsm). Затем я нашел другое решение, которое даже восстанавливает пароль, а не просто взламывает его.
Вставьте этот код в модуль, запустите его и дайте ему немного времени. Он восстановит ваш пароль грубой силой.
Sub PasswordBreaker()'Breaks worksheet password protection.Dim i AsInteger, j AsInteger, k AsIntegerDim l AsInteger, m AsInteger, n AsIntegerDim i1 AsInteger, i2 AsInteger, i3 AsIntegerDim i4 AsInteger, i5 AsInteger, i6 AsIntegerOnErrorResumeNextFor i =65To66:For j =65To66:For k =65To66For l =65To66:For m =65To66:For i1 =65To66For i2 =65To66:For i3 =65To66:For i4 =65To66For i5 =65To66:For i6 =65To66:For n =32To126
ActiveSheet.Unprotect Chr(i)& Chr(j)& Chr(k)& _
Chr(l)& Chr(m)& Chr(i1)& Chr(i2)& Chr(i3)& _
Chr(i4)& Chr(i5)& Chr(i6)& Chr(n)If ActiveSheet.ProtectContents =FalseThen
MsgBox "One usable password is "& Chr(i)& Chr(j)& _
Chr(k)& Chr(l)& Chr(m)& Chr(i1)& Chr(i2)& _
Chr(i3)& Chr(i4)& Chr(i5)& Chr(i6)& Chr(n)ExitSubEndIfNext:Next:Next:Next:Next:NextNext:Next:Next:Next:Next:NextEndSub
Ницца! Я думаю, что вы получили одно отрицание, потому что ваше решение разблокирует рабочий лист, а не модуль VBA. Тем не менее я нашел это полезным - так что спасибо!
PBD10017
1
У меня есть это моя личная рабочая тетрадь. Авторы цитировали Боба Маккормика как оригинального автора, позже измененного Норманом Харкером и Дж. МакГимпси 2002.
Чарльз Бирн
5
ElcomSoft производит Advanced Office Password Breaker и Advanced Office Password Recovery продукты, которые могут применяться в этом случае, если документ был создан в Office 2007 или более ранней версии.
Том - я сначала сделал ошибку для школьника, так как не смотрел размер байта, а вместо этого скопировал и вставил из «CMG», настроенного для последующей записи. Это были два разных размера текста между этими двумя файлами, и я потерял проект VBA, как и предупреждал Stewbob.
Используя HxD, есть счетчик, отслеживающий, сколько файлов вы выбираете. Скопируйте, начиная с CMG, пока счетчик не прочитает 8F (шестнадцатеричное для 143), а также при вставке в заблокированный файл - у меня получилось вдвое больше «...» в конце вставки, что выглядело как-то странно и ощущалось почти неестественно, но это сработало.
Я не знаю, насколько это важно, но я убедился, что закрыл и шестнадцатеричный редактор, и выключил Excel, прежде чем снова открыть файл в Excel. Затем мне пришлось пройти через меню, чтобы открыть VB Editor, в VBProject Properties и ввести «новый» пароль, чтобы разблокировать код.
Мой инструмент, VbaDiff , считывает VBA непосредственно из файла, поэтому вы можете использовать его для восстановления защищенного кода VBA из большинства офисных документов без использования шестнадцатеричного редактора.
У меня есть тесты на этот инструмент, и он работает очень хорошо, однако бесплатная версия возвращает первые 53 строки. Чтобы восстановить мой файл, я должен был следовать инструкциям Энди, чтобы разблокировать пароль. Затем я открыл свой xlsm с VbaDiff на обеих панелях, а затем щелкнул лист с моим кодом. Я получил его с помощью copy-paste и поместил в восстановленный, но vba-пустой файл Excel.
thanos.a
2
Защита представляет собой простое сравнение текста в Excel. Загрузите Excel в ваш любимый отладчик ( Ollydbg - мой инструмент выбора), найдите код, который выполняет сравнение, и исправьте его, чтобы всегда возвращать true, это должно позволить вам получить доступ к макросам.
В 64-разрядной версии Excel 2016 на компьютере с Windows 10 я использовал шестнадцатеричный редактор, чтобы иметь возможность изменить пароль защищенной xla (не проверял это ни для каких других расширений).
Подсказка: создайте резервную копию, прежде чем сделать это.
Шаги, которые я предпринял:
Откройте VBA в шестнадцатеричном редакторе (например, XVI).
Поиск на этом DPB
Измените DPB на что-то другое, например, DPX
Сохрани это!
Снова откройте .xla, появится сообщение об ошибке, просто продолжайте.
Теперь вы можете изменить пароль .xla, открыв свойства и перейдя на вкладку пароля.
Я успешно открыл старый .xls, используя это в Windows 10 в последней версии Excel 365, хотя, к сожалению, верхний ответ больше не работает. Я скачал HxD и изменил последнюю букву, как рекомендовано, и пропустил ошибки. Все хорошо, спасибо!
Старнс Студент
0
расширение вашего файла Excel изменилось на xml. И откройте его в блокноте. текст пароля найти в файле XML.
Ответы:
Вы можете попробовать этот прямой
VBA
подход, который не требует редактирования HEX. Это будет работать для любых файлов (* .xls, * .xlsm, * .xlam ...).Протестировано и работает на:
Ищете 64-битную версию? Смотрите этот ответ
Как это работает
Я постараюсь объяснить, как это работает - извините, пожалуйста, за мой английский.
Используя код
Пожалуйста, сделайте резервную копию ваших файлов в первую очередь!
Создайте новый файл xlsm и сохраните этот код в Module1
code credited to Siwtom (nick name), a Vietnamese developer
Вставьте этот код под вышеуказанным кодом в Module1 и запустите его
Возвращайтесь к своим проектам VBA и наслаждайтесь.
источник
Да, если вы используете
.xls
электронную таблицу формата (по умолчанию для Excel до 2003 года). Для Excel 2007 и более поздних версий по умолчанию.xlsx
используется довольно безопасный формат, и этот метод не будет работать.Как говорит Треб, это простое сравнение. Один из способов - просто заменить запись пароля в файле с помощью шестнадцатеричного редактора (см. Шестнадцатеричные редакторы для Windows ). Пошаговый пример:
Скопируйте строки, начиная со следующих ключей:
Первое резервное копирование копию файла Excel, для которого вы не знаете пароль VBA, затем откройте его в своем шестнадцатеричном редакторе и вставьте скопированные выше строки из фиктивного файла.
Если вам нужно работать с Excel 2007 или 2010, ниже могут быть полезны и другие ответы, в частности: 1 , 2 , 3 .
РЕДАКТИРОВАТЬ Февраль 2015: для другого метода, который выглядит очень многообещающим, посмотрите на этот новый ответ Đức Thanh Nguyễn.
источник
CMG...
строка длиннее оригинальной.Я основывался на фантастическом ответе Тхана Нгуйена, чтобы этот метод мог работать с 64-битными версиями Excel. Я использую 64-битную версию Excel 2010 на 64-битной Windows 7.
Создайте новый файл xlsm и сохраните этот код в Module1
Вставьте этот код в Module2 и запустите его
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Это сработало для меня, и я задокументировал это здесь в надежде, что это кому-нибудь поможет. Я не полностью проверил это . Пожалуйста, сохраните все открытые файлы, прежде чем продолжить с этой опцией.
источник
Есть другое (несколько более простое) решение, без проблем с размером. Я использовал этот подход сегодня (в файле 2003 XLS, используя Excel 2007) и был успешным.
DPB=...
детальDPB=...
строку наDPx=...
* ПРИМЕЧАНИЕ. Убедитесь, что вы изменили пароль на новое значение, в противном случае при следующем открытии электронной таблицы Excel сообщит об ошибках (неожиданная ошибка), а затем при доступе к списку модулей VBA вы увидите имена исходные модули, но при попытке открыть формы / код / и т. д. появляется другая ошибка Чтобы исправить это, вернитесь в Свойства проекта VBA и установите новое значение пароля. Сохраните и снова откройте документ Excel, и все будет хорошо!
источник
У Колина Пикарда отличный ответ, но есть один «настороже» с этим. Есть случаи (я еще не выяснил причину), где общая длина записи "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 и просмотреть содержимое файла.
источник
Для файла
.xlsm
или.dotm
типа файла вам нужно сделать это немного по-другому..xlsm
файла на.zip
.vbaProject.bin
файл и откройте его в Hex Editor (я использую HxD , он совершенно бесплатный и легкий).DPB
и заменитеDPx
и сохраните файл.vbaProject.bin
файл на новый в архивном файле..xlsm
..xlsm
файл.источник
.zip
если у вас установлен 7-Zip . В этом случае вы можете просто щелкнуть правой кнопкой мыши по.xlsm
файлу и выбрать «7-Zip -> Открыть архив»Стоит отметить, что если у вас есть файл Excel 2007 (xlsm), вы можете просто сохранить его как файл Excel 2003 (xls) и использовать методы, описанные в других ответах.
источник
1.
конвертирую .xlsm в .xls, взломаю2.
код .xls,3.
конвертирую .xlsm в .xlsx.4.
Поместите код из модулей в .xls в. xlsx и сохраните его как .xlsmС моей стороны, это основано на превосходном ответе kaybee99, который основан на фантастическом ответе Тхана Нгуйена, чтобы этот метод мог работать как с версиями Office для x86, так и для amd64.
Обзор того, что изменилось, мы избегаем push / ret, который ограничен 32-битными адресами, и заменяем его на mov / jmp reg.
Проверено и работает на
как это работает
Создайте новый файл того же типа, что и выше, и сохраните этот код в Module1
Вставьте этот код в Module2 и запустите его
источник
Вы пытались просто открыть их в OpenOffice.org?
Некоторое время назад у меня была похожая проблема, и я обнаружил, что Excel и Calc не понимают шифрование друг друга и поэтому имеют прямой доступ практически ко всему.
Это было некоторое время назад, поэтому, если бы это была не просто случайность с моей стороны, это также могло быть исправлено.
источник
В случае, если ваш блок
CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX"
в файле «известного пароля» короче, чем существующий блок в файле «неизвестного пароля», добавьте шестнадцатеричные строки с конечными нулями, чтобы получить правильную длину.например
CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"
в файле с неизвестным паролем, должно быть установлено
CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000"
сохранить длину файла.У меня также была эта работа с файлами .XLA (формат 97/2003) в Office 2007.
источник
Для Excel 2007 и более поздних вам необходимо изменить расширение файла на .zip. В архиве есть подпапка xl, в которой вы найдете vbaProject.bin. Выполните шаг выше с vbaProject.bin, затем сохраните его обратно в архиве. Измените свое расширение и вуаля! (то есть следуйте инструкциям выше)
источник
Пароли проекта VBA для документов Access, Excel, Powerpoint или Word (
2007, 2010, 2013 or 2016
версии с расширениями.ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM
) могут быть легко удалить .Это просто вопрос изменения расширения имени файла
.ZIP
, разархивирования файла и использования любого простого шестнадцатеричного редактора (например, обычного XVI32 ), чтобы «сломать» существующий пароль, что «смущает» Office, поэтому он запрашивает новый пароль в следующий раз, когда файл открыт.Краткое изложение шагов:
.ZIP
расширение.ZIP
и перейдите вXL
папку.vbaProject.bin
и открыть его с помощью Hex EditorDPB
наDPX
..bin
файл обратно в zip, верните его в нормальное расширение и откройте файл как обычно.VBA Project Properties
.Protection
вкладке Установить новый пароль.OK
, закройте файл, снова откройте его, нажмите ALT + F11.На этом этапе вы можете полностью удалить пароль, если захотите.
Полные инструкции с пошаговым видео, которое я сделал «когда-то», находятся на YouTube здесь .
Это шокирует, что этот обходной путь существует уже много лет, и Microsoft не устранила проблему.
источник
Колин Пикард в основном прав, но не путайте защиту «пароль для открытия» для всего файла с защитой паролем VBA, которая полностью отличается от предыдущей и одинакова для Office 2003 и 2007 (для Office 2007 переименуйте файл в .zip и найдите vbaProject.bin внутри zip). И что технически правильный способ редактировать файл - это использовать средство просмотра составных документов OLE, такое как CFX, чтобы открыть правильный поток. Конечно, если вы просто заменяете байты, может работать обычный старый бинарный редактор.
Кстати, если вас интересует точный формат этих полей, они уже задокументированы:
http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx
источник
Если файл является допустимым zip-файлом (первые несколько байтов
50 4B
используются в таких форматах, как.xlsm
), то разархивируйте файл и найдите подфайлxl/vbaProject.bin
. Это файл CFB, как и.xls
файлы. Следуйте инструкциям для формата XLS (применяется к подфайлу), а затем просто заархивируйте содержимое.Для формата XLS вы можете использовать некоторые другие методы в этом посте. Я лично предпочитаю искать
DPB=
блок и заменять текстс пробелами. Это устраняет проблемы с размером контейнера CFB.
источник
Я попробовал некоторые из решений выше, и ни одно из них не работает для меня (файл Excel 2007 xlsm). Затем я нашел другое решение, которое даже восстанавливает пароль, а не просто взламывает его.
Вставьте этот код в модуль, запустите его и дайте ему немного времени. Он восстановит ваш пароль грубой силой.
источник
ElcomSoft производит Advanced Office Password Breaker и Advanced Office Password Recovery продукты, которые могут применяться в этом случае, если документ был создан в Office 2007 или более ранней версии.
источник
Том - я сначала сделал ошибку для школьника, так как не смотрел размер байта, а вместо этого скопировал и вставил из «CMG», настроенного для последующей записи. Это были два разных размера текста между этими двумя файлами, и я потерял проект VBA, как и предупреждал Stewbob.
Используя HxD, есть счетчик, отслеживающий, сколько файлов вы выбираете. Скопируйте, начиная с CMG, пока счетчик не прочитает 8F (шестнадцатеричное для 143), а также при вставке в заблокированный файл - у меня получилось вдвое больше «...» в конце вставки, что выглядело как-то странно и ощущалось почти неестественно, но это сработало.
Я не знаю, насколько это важно, но я убедился, что закрыл и шестнадцатеричный редактор, и выключил Excel, прежде чем снова открыть файл в Excel. Затем мне пришлось пройти через меню, чтобы открыть VB Editor, в VBProject Properties и ввести «новый» пароль, чтобы разблокировать код.
Надеюсь, это поможет.
источник
Мой инструмент, VbaDiff , считывает VBA непосредственно из файла, поэтому вы можете использовать его для восстановления защищенного кода VBA из большинства офисных документов без использования шестнадцатеричного редактора.
источник
Защита представляет собой простое сравнение текста в Excel. Загрузите Excel в ваш любимый отладчик ( Ollydbg - мой инструмент выбора), найдите код, который выполняет сравнение, и исправьте его, чтобы всегда возвращать true, это должно позволить вам получить доступ к макросам.
источник
В 64-разрядной версии Excel 2016 на компьютере с Windows 10 я использовал шестнадцатеричный редактор, чтобы иметь возможность изменить пароль защищенной xla (не проверял это ни для каких других расширений). Подсказка: создайте резервную копию, прежде чем сделать это.
Шаги, которые я предпринял:
Я надеюсь, что это помогло некоторым из вас!
источник
расширение вашего файла Excel изменилось на xml. И откройте его в блокноте. текст пароля найти в файле XML.
Вы видите как ниже линии;
(Извините за мой плохой английский)
источник
Если вы работаете в,
Java
вы можете попробоватьVBAMacroExtractor
. После извлечения сценариев VBA из.xlsm
я нашел там пароль в виде открытого текста.источник