Итак если файл открывается, но Вам необходимо убрать защиту листа или книги, используйте надстройку, которую я написал:
Идея алгоритма заключается в использовании недостатка стандартного метода шифрования Excel. Программа перебирает пароли от 1 до 8 символов. Последний символ пароля подбирается из диапазона кодов от 32 до 255. Остальные символы подбираются из кодов 65 и 66. В результате используется пароль отличный от оригинального, но тем не менее рабочий. К сожалению для открытия файла, через Workbook.Open(), этот метод не подходит. Метод также не работает в Excel 2007, где используется более стойкий алгоритм шифрования. Исключение составляет французская версия Excel 2007, где из-за местных законов шифрование остается прежним.
Ниже приведен исходный код надстройки для взлома пароля в Excel:
Const MENUNAME = "ЗАЩИТА" 'Установка ярлыка меню Sub Auto_Open() Install MsgBox "Меню установлено, используйте ""ЗАЩИТА->Снять защиту"" для снятия защиты с активной книги Excel и всех листов" End Sub 'Взлом всех паролей, путем перебора. Sub BruteForceUnprotect() Dim ProtectedObjects As New Collection Const LastCharStart = 32 Const LastCharFinish = 255 Application.DisplayAlerts = False 'Добавление защищенной книги в набор объектов для вскрытия If (ActiveWorkbook.ProtectStructure Or ActiveWorkbook.ProtectWindows) Then ProtectedObjects.Add ActiveWorkbook End If 'Добавление в набор защищенных листов On Error Resume Next For Each WSheet In ActiveWorkbook.Worksheets WSheet.Protect ("") If Not WSheet.Unprotect("") Then: ProtectedObjects.Add WSheet Next On Error GoTo 0 'Поиск подставного пароля. Оригинальный пароль не может быть восстановлен этим способом. For i = 1 To 255 fakepassword = FakePass(i) If ProtectedObjects.Count = 0 Then: Exit For For LastCharIndex = LastCharStart To LastCharFinish Password = fakepassword & Chr(LastCharIndex) If ProtectedObjects.Count > 0 Then For j = 1 To ProtectedObjects.Count If UnprotectObject(ProtectedObjects(j), Password) = True Then ProtectedObjects.Remove (j) If ProtectedObjects.Count > 0 Then: j = j - 1 End If Next End If Next Next If ProtectedObjects.Count = 0 Then MsgBox "Пароли на текущую книгу и листы сняты!" Else MsgBox "Похоже используется нестандартное шифрование. Защита некоторых объектов не может быть снята." End If Application.DisplayAlerts = True End Sub Function UnprotectObject(obj, pass) UnprotectObject = False On Error GoTo WrongPassword obj.Unprotect pass UnprotectObject = True WrongPassword: End Function 'Возвращает пароль на основе переданного числового значения Function FakePass(Value) Mask = 1 FakePass = "" While Mask <= Value If (Value And Mask) = 0 Then FakePass = "A" & FakePass Else FakePass = "B" & FakePass End If Mask = Mask * 2 Wend If Len(FakePass) > 0 Then: FakePass = Right(FakePass, Len(FakePass) - 1) End Function 'Установка меню Sub Install() Uninstall True AddButton MENUNAME, "Снять защиту", "BruteForceUnprotect" AddButton MENUNAME, "Удалить меню надстройки", "Uninstall" End Sub 'Удаление меню надстройки Sub Uninstall(Optional silent = False) If Not silent Then If MsgBox("Вы действительно желаете удалить меню надстройки ?", vbYesNo) = vbNo Then Exit Sub End If End If On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls(MENUNAME).Delete On Error GoTo 0 End Sub 'Добавить пункт в меню Sub AddButton(menu As String, submenu As String, macro As String, Optional descr As String = "") On Error GoTo createmenu If IsNull(Application.CommandBars("Worksheet Menu Bar").Controls(menu)) Then: GoTo createmenu On Error GoTo create If IsNull(Application.CommandBars("Worksheet Menu Bar").Controls(menu).Controls(submenu)) Then: GoTo create End createmenu: Set mnu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=10) mnu.Caption = "&" & menu mnu.Visible = True create: Set Button = Application.CommandBars("Worksheet Menu Bar").Controls(menu).Controls.Add(Type:=1, ID:=2950) With Button .DescriptionText = descr .TooltipText = descr .Caption = "&" & submenu .Style = 3 .OnAction = macro End With End Sub
не работает
ОтветитьУдалитьСпасибо, работает!
ОтветитьУдалитьСпасибо, но можно просто использовать программу для восстановления пароля. Например, Manyprog Excel Password Recovery http://ru.manyprog.com/excel-password-recovery.php
ОтветитьУдалить