Czy istnieje sposób na złamanie hasła w projekcie Excel VBA?

Poproszono mnie o aktualizację niektórych makr Excela 2003, ale projekty VBA są chronione hasłem i wygląda na to, że brakuje dokumentacji... nikt nie zna haseł.

Czy Jest jakiś sposób na usunięcie lub złamanie hasła w projekcie VBA?

Author: ashleedawg, 2009-06-22

21 answers

Możesz wypróbować bezpośrednie podejście VBA, które nie wymaga edycji szesnastkowej. Będzie działać dla dowolnych plików (*.xls,*.xlsm,*.xlam ...).

Testowane i działa na

Excel 2007
Excel 2010
Excel 2013 - wersja 32 bitowa .
Excel 2016 - wersja 32 bitowa .

Szukasz wersji 64 bitowej? Zobacz https://stackoverflow.com/a/31005696/4342479

Jak to działa

Postaram się jak najlepiej aby wyjaśnić, jak to działa-proszę wybaczyć mój angielski.

  1. VBE wywoła funkcję systemową, aby utworzyć okno dialogowe hasło.
  2. Jeśli użytkownik wprowadzi odpowiednie hasło i kliknie OK, funkcja zwróci 1. Jeśli użytkownik wprowadzi błędne hasło lub kliknie Anuluj, funkcja ta zwróci 0.
  3. po zamknięciu okna dialogowego VBE sprawdza zwracaną wartość funkcji systemowej
  4. Jeśli ta wartość wynosi 1, VBE "pomyśli" , że hasło jest prawidłowe, stąd zablokowany projekt VBA zostanie otwarty.
  5. poniższy kod zamienia pamięć oryginalnej funkcji użytej do wyświetlenia okna dialogowego hasła na zdefiniowaną przez użytkownika funkcję, która zawsze zwróci 1 podczas wywoływania.

korzystanie z kodu

  1. Otwórz plik(y), które zawierają zablokowane projekty VBA
  2. Utwórz nowy plik xlsm i zapisz ten kod w Module1

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

    Option Explicit
    
    Private Const PAGE_EXECUTE_READWRITE = &H40
    
    Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
            (Destination As Long, Source As Long, ByVal Length As Long)
    
    Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, _
            ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
    
    Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As Long
    
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
            ByVal lpProcName As String) As Long
    
    Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, _
            ByVal pTemplateName As Long, ByVal hWndParent As Long, _
            ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
    
    Dim HookBytes(0 To 5) As Byte
    Dim OriginBytes(0 To 5) As Byte
    Dim pFunc As Long
    Dim Flag As Boolean
    
    Private Function GetPtr(ByVal Value As Long) As Long
        GetPtr = Value
    End Function
    
    Public Sub RecoverBytes()
        If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
    End Sub
    
    Public Function Hook() As Boolean
        Dim TmpBytes(0 To 5) As Byte
        Dim p As Long
        Dim OriginProtect As Long
    
        Hook = False
    
        pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
    
    
        If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
    
            MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
            If TmpBytes(0) <> &H68 Then
    
                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 = True
            End If
        End If
    End Function
    
    Private Function MyDialogBoxParam(ByVal hInstance As Long, _
            ByVal pTemplateName As Long, ByVal hWndParent As Long, _
            ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
        If pTemplateName = 4070 Then
            MyDialogBoxParam = 1
        Else
            RecoverBytes
            MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                               hWndParent, lpDialogFunc, dwInitParam)
            Hook
        End If
    End Function
    
  3. Wklej ten kod w Module2 i uruchom go

    Sub unprotected()
        If Hook Then
            MsgBox "VBA Project is unprotected!", vbInformation, "*****"
        End If
    End Sub
    
  4. Wróć do swoich projektów VBA i ciesz się.

 569
Author: Đức Thanh Nguyễn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 18:34:40

Tak jest, o ile używasz arkusza kalkulacyjnego formatu .xls (domyślnie dla Excela do 2003 roku). W przypadku programu Excel 2007 domyślną wartością jest .xlsx, co jest dość bezpiecznym formatem i ta metoda nie będzie działać.

Jak mówi Treb, to proste porównanie. Jedną z metod jest po prostu zamiana hasła w pliku za pomocą edytora szesnastkowego (zobacz Hex editors for Windows). Przykład krok po kroku:

  1. Utwórz nowy prosty plik excel.
  2. w części VBA, Ustaw proste hasło (say-1234).
  3. Zapisz plik i zakończ. następnie sprawdź Rozmiar pliku-zobacz Stewbob ' s gotcha
  4. otwórz właśnie utworzony plik za pomocą edytora szesnastkowego.
  5. Skopiuj linie zaczynające się od następujących klawiszy:

    CMG=....
    DPB=...
    GC=...
    
  6. Najpierw wykonaj kopię zapasową pliku excel, dla którego nie znasz hasła VBA, a następnie otwórz go za pomocą edytora szesnastkowego i wklej powyższe skopiowane linie z pliku atrapy.

  7. Save the plik excel i wyjście.
  8. teraz otwórz plik excel, w którym musisz zobaczyć kod VBA. Hasło do kodu VBA będzie po prostu 1234(jak w przykładzie pokazuję tutaj).

Jeśli potrzebujesz pracować z programem Excel 2007 lub 2010, poniżej znajdziesz inne odpowiedzi, które mogą Ci pomóc, szczególnie te: 1, 2, 3.

EDIT Luty 2015: dla innej metody, która wygląda bardzo obiecująco, spójrz na ta nowa ODPOWIEDŹ Autor: Đức Thanh Nguyễn.

 202
Author: Colin Pickard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:00

Istnieje inne (nieco łatwiejsze) rozwiązanie, bez problemów z rozmiarem. Zastosowałem dziś takie podejście (na pliku XLS z 2003 roku, używając Excela 2007) i odniosłem sukces.

  1. Kopia zapasowa pliku xls
  2. Otwórz plik w edytorze szesnastkowym i zlokalizuj DPB=... część
  3. Zmień łańcuch DPB=... na DPx=...
  4. Otwórz plik xls w Excelu
  5. Otwórz Edytor VBA (ALT + F11 )
  6. Magia: Excel odkrywa nieprawidłowy klucz (DPx) i pyta czy chcesz kontynuować ładowanie projektu (w zasadzie ignorując ochronę)
  7. będziesz mógł nadpisać hasło, więc zmień je na coś, co zapamiętasz
  8. Zapisz plik xls*
  9. Zamknij i otwórz ponownie dokument i pracuj swoją magią VBA!

*Uwaga: Upewnij się, że zmieniłeś hasło na nową wartość, w przeciwnym razie przy następnym otwarciu arkusza kalkulacyjnego Excel zgłosi błędy( nieoczekiwany błąd), a następnie po uzyskaniu dostępu do listy modułów VBA zobaczysz teraz nazwy modułów źródłowych, ale otrzymasz kolejny błąd podczas próby otwarcia forms / code / etc. Aby temu zaradzić, wróć do Właściwości projektu VBA i ustaw hasło na nową wartość. Zapisz i ponownie otwórz dokument Excel i powinieneś być gotowy do pracy!

 156
Author: Pieter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-03 16:01:48

Zbudowałem na fantastycznej odpowiedzi, aby ta metoda mogła pracować z 64-bitowymi wersjami Excela. Używam programu Excel 2010 64-Bit NA 64-bitowym systemie Windows 7.

  1. otwórz pliki zawierające zablokowane projekty VBA.
  2. Utwórz nowy plik xlsm i zapisz ten kod w Module1

    Option Explicit
    
    Private Const PAGE_EXECUTE_READWRITE = &H40
    
    Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr)
    
    Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, _
    ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr
    
    Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtr
    
    Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, _
    ByVal lpProcName As String) As LongPtr
    
    Private Declare 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) As Integer
    
    Dim HookBytes(0 To 5) As Byte
    Dim OriginBytes(0 To 5) As Byte
    Dim pFunc As LongPtr
    Dim Flag As Boolean
    
    Private Function GetPtr(ByVal Value As LongPtr) As LongPtr
        GetPtr = Value
    End Function
    
    Public Sub RecoverBytes()
        If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
    End Sub
    
    Public Function Hook() As Boolean
        Dim TmpBytes(0 To 5) As Byte
        Dim p As LongPtr
        Dim OriginProtect As LongPtr
    
        Hook = False
    
        pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
    
    
        If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
    
            MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
            If TmpBytes(0) <> &H68 Then
    
                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 = True
            End If
        End If
    End Function
    
    Private Function MyDialogBoxParam(ByVal hInstance As LongPtr, _
    ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
    ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
    
        If pTemplateName = 4070 Then
            MyDialogBoxParam = 1
        Else
            RecoverBytes
            MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                       hWndParent, lpDialogFunc, dwInitParam)
            Hook
        End If
    End Function
    
  3. Wklej ten kod w Module2 i uruchom go

    Sub unprotected()
        If Hook Then
            MsgBox "VBA Project is unprotected!", vbInformation, "*****"
        End If
    End Sub
    

DISCLAIMER to działało dla mnie i udokumentowałem to mam nadzieję, że to komuś pomoże. nie Przetestowałem go w pełni. Pamiętaj, aby zapisać wszystkie otwarte pliki przed przejściem do tej opcji.

 129
Author: kaybee99,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 15:15:27

Colin Pickard ma doskonałą odpowiedź, ale jest jeden "uważaj" z tym. Istnieją przypadki (jeszcze nie rozgryzłem przyczyny), w których całkowita długość " CMG=........GC=...."wpis w pliku różni się od jednego pliku excel do następnego. W niektórych przypadkach ten wpis będzie wynosił 137 bajtów, a w innych 143 bajty. Długość 137 bajtów jest nieparzysta, a jeśli tak się stanie, gdy utworzysz plik z hasłem '1234', po prostu utwórz inny plik i powinien przeskoczyć do długości 143 bajtów.

Jeśli spróbujesz wkleić niewłaściwą liczbę bajtów do pliku, utracisz swój projekt VBA podczas próby otwarcia pliku w programie Excel.

EDIT

To nie dotyczy plików Excel 2007/2010. Standard .format pliku xlsx jest w rzeczywistości .plik zip zawierający liczne podfoldery z formatowaniem, układem, zawartością itp., przechowywane jako dane xml. W przypadku niezabezpieczonego pliku Excel 2007 możesz po prostu zmienić .rozszerzenie xlsx do .zip, a następnie otwórz plik zip i przejrzeć wszystkie dane xml. To bardzo proste.

Jednak, gdy chronisz hasłem plik Excel 2007, cały .zip (.xlsx) plik jest faktycznie szyfrowany za pomocą szyfrowania RSA. Nie ma już możliwości zmiany rozszerzenia na .zip i przeglądaj zawartość pliku.

 59
Author: Stewbob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-16 19:04:15

Dla typu pliku .xlsm LUB .dotm należy to zrobić w nieco inny sposób.

  1. zmień rozszerzenie pliku .xlsm na .zip.
  2. Otwórz .plik zip (z WinZip lub WinRar itp) i przejdź do folderu xl.
  3. rozpakuj plik vbaProject.bin i otwórz go w edytorze szesnastkowym (używam HxD, jest całkowicie darmowy i lekki.)
  4. wyszukaj DPB i zamień na DPx i zapisz plik.
  5. Zastąp stary plik vbaProject.bin tym nowym w spakowany plik.
  6. zmień rozszerzenie pliku z powrotem na .xlsm.
  7. otwórz skoroszyt pomiń komunikaty ostrzegawcze.
  8. Otwórz Visual Basic w Excelu.
  9. przejdź do zakładki Narzędzia > właściwości VBAProject>Ochrona.
  10. wprowadź nowe hasło i zapisz plik .xlsm.
  11. Zamknij i otwórz ponownie, a nowe hasło zadziała.
 41
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 07:47:19

Warto zauważyć, że jeśli posiadasz plik Excel 2007 (xlsm), możesz po prostu zapisać go jako plik Excel 2003 (xls) i użyć metod opisanych w innych odpowiedziach.

 31
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-25 01:29:54

Czy próbowałeś po prostu otworzyć je w OpenOffice.org?

Jakiś czas temu miałem podobny problem i okazało się, że Excel i Calc nie rozumieją nawzajem szyfrowania, a więc umożliwiają bezpośredni dostęp do prawie wszystkiego.

To było jakiś czas temu, więc jeśli to nie był zwykły Fuks z mojej strony, to też mogło być łatane.

 12
Author: greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 15:50:42

W programie Excel 2007 należy zmienić rozszerzenie pliku na .zip W archiwum znajduje się podfolder xl, w nim znajdziesz vbaProject.bin. Wykonaj powyższy krok za pomocą vbaProject.bin następnie zapisz go z powrotem w archiwum. Zmodyfikuj swoje rozszerzenie i voila! (czyli wykonaj powyższe kroki)

 10
Author: user3761175,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-20 18:11:07

Colin Pickard jest w większości poprawny, ale nie myl ochrony "hasło, aby otworzyć" dla całego pliku z ochroną hasłem VBA, która jest zupełnie inna niż poprzednia i jest taka sama dla Office 2003 i 2007 (dla Office 2007 Zmień nazwę pliku na .zip i poszukaj vbaProject.kosz wewnątrz zamka). I że technicznie poprawnym sposobem edycji pliku jest użycie Ole compound document viewer, takiej jak CFX, aby otworzyć poprawny strumień. Oczywiście, jeśli tylko wymieniasz bajtów, może działać zwykły stary edytor binarny.

BTW, jeśli zastanawiasz się nad dokładnym formatem tych pól, mają to udokumentowane teraz:

Http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx

 7
Author: Yuhong Bao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 00:55:56

W przypadku, gdy twój blok CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX" w pliku 'znane hasło' jest krótszy niż istniejący blok w pliku 'nieznane hasło', wprowadź ciąg szesnastkowy końcowymi zerami, aby osiągnąć odpowiednią długość.

Np.

CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"

W pliku nieznanego hasła należy ustawić na

CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000" aby zachować długość pliku.

[[3]}ja też miałem z tym do czynienia .Pliki XLA (format 97/2003) w office 2007.
 7
Author: Spangen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-06 14:21:38

Hasła projektu VBA w dokumentach Access, Excel, Powerpoint lub Word (2007, 2010, 2013 or 2016 wersje z rozszerzeniami .ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM) mogą być łatwo usunąć.

Jest to po prostu kwestia zmiany rozszerzenia nazwy pliku na .ZIP, rozpakowania pliku i użycia dowolnego podstawowego edytora szesnastkowego (takiego jak XVI32), aby "złamać" istniejące hasło, co" myli " biuro, więc prosi o nowe hasło przy następnym otwarciu pliku.

Podsumowanie kroki:

  • Zmień nazwę pliku tak, aby miał rozszerzenie .ZIP.
  • Otwórz ZIP i przejdź do folderu XL.
  • rozpakuj vbaProject.bin i otwórz go za pomocą edytora szesnastkowego
  • "Szukaj i zamień" na "Zamień wszystkie" zmieniając DPB na DPX.
  • Zapisz zmiany, umieść plik .bin z powrotem w zip, przywróć go do normalnego rozszerzenia i otwórz plik jak zwykle.
  • ALT + F11, aby wejść do edytora VB i kliknij prawym przyciskiem myszy w Eksploratorze projektu, aby wybrać VBA Project Properties.
  • na karcie Protection Ustaw nowe hasło.
  • kliknij OK, zamknij plik, otwórz go ponownie, naciśnij ALT + F11.
  • wprowadź nowe hasło, które ustawiłeś.

W tym momencie możesz całkowicie usunąć hasło, jeśli chcesz.

Pełne instrukcje {[17] } z filmem krok po kroku, który zrobiłem "way back when" są na YouTube tutaj.

To trochę szokujące, że to obejście istnieje od lat, a Microsoft nie naprawił problemu.


Morał z tej historii?

Microsoft Office hasła projektu VBA są nie należy na nich polegać dla bezpieczeństwa wszelkie poufne informacje. Jeśli Bezpieczeństwo jest ważne, użyj oprogramowania szyfrującego innej firmy.

 6
Author: ashleedawg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 14:57:49

Jeśli plik jest prawidłowym plikiem zip (kilka pierwszych bajtów to 50 4B -- używane w formatach takich jak .xlsm), rozpakuj plik i poszukaj pliku podrzędnego xl/vbaProject.bin. Jest to plik CFB, podobnie jak pliki .xls. Postępuj zgodnie z instrukcjami dla formatu XLS (zastosowanego do pliku podrzędnego) , a następnie po prostu spakuj zawartość.

Dla formatu XLS, możesz śledzić niektóre z innych metod w tym poście. Osobiście wolę szukać bloku DPB= i zastępować tekst

CMG="..."
DPB="..."
GC="..."

Z pustym miejsca. Eliminuje to problemy z rozmiarem kontenera CFB.

 5
Author: SheetJS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-08 02:32:30

Tom-na początku zrobiłem błąd bo nie oglądałem rozmiaru bajtu a zamiast tego skopiowałem i wkleiłem z" CMG " ustawiony do kolejnego wpisu. Były to jednak dwa różne rozmiary tekstu między tymi dwoma plikami i straciłem projekt VBA, tak jak ostrzegał Stewbob.

Używając HxD, licznik śledzi ilość wybranego pliku. Kopiuj zaczynając od CMG aż licznik odczyta 8F (hex dla 143) i podobnie przy wklejaniu do zablokowanego pliku-skończyło się na dwukrotnym liczba "..."na końcu pasty, która wyglądała dziwnie i wydawała się prawie nienaturalna, ale zadziałała.

Nie wiem, czy to ważne, ale upewniłem się, że zamknąłem zarówno edytor hex, jak i excel przed ponownym otwarciem pliku w Excelu. Następnie musiałem przejść przez menu, aby otworzyć Edytor VB, do Właściwości Vbproject i wprowadzić "nowe" hasło, aby odblokować kod.

Mam nadzieję, że to pomoże.

 3
Author: Scoob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 15:35:20

ElcomSoft produkuje Advanced Office Password Breaker i Advanced Office Password Recovery produkty, które mogą mieć zastosowanie w tym przypadku, o ile dokument został utworzony w Office 2007 lub wcześniej.

 3
Author: Charles Duffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 15:44:18

Wypróbowałem niektóre z powyższych rozwiązań i Żadne z nich nie działa dla mnie (plik excel 2007 xlsm). Potem znalazłem inne rozwiązanie, które nawet odzyskać hasło, a nie tylko go złamać.

Wstaw ten kod do modułu, uruchom go i daj mu trochę czasu. Odzyska Twoje hasło brutalną siłą.

Sub PasswordBreaker()

'Breaks worksheet password protection.

Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
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 = False Then
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)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub
 2
Author: Luboš Suk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 11:52:39

Moje Narzędzie, VbaDiff, odczytuje VBA bezpośrednio z pliku, więc możesz go użyć do odzyskania chronionego kodu VBA z większości dokumentów office bez uciekania się do edytora szesnastkowego.

 2
Author: Chris Spicer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-24 13:30:04

Ochrona jest prostym porównaniem tekstu w Excelu. Załaduj program Excel do swojego ulubionego debugera (Ollydbg jest moim ulubionym narzędziem), Znajdź kod, który robi porównanie i napraw go, aby zawsze zwracał true, powinno to pozwolić ci uzyskać dostęp do makr.

 1
Author: Treb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 10:54:40

Rozszerzenie pliku excel zmienia się na xml. I otwórz go w notatniku. tekst hasła Znajdź w pliku xml.

Widzisz jak poniżej;

Sheets("Sheet1").Unprotect Password:="blabla"

(sorry for my bad english)

 0
Author: Developer33,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 11:40:29

W Excelu 2016 64-bitowym na komputerze z systemem Windows 10 użyłem edytora szesnastkowego, aby móc zmienić hasło chronionego xla (nie testowałem tego Dla żadnych innych rozszerzeń). Wskazówka: Utwórz kopię zapasową zanim to zrobisz.

Kroki, które podjąłem:

  1. Otwórz vba w edytorze hex (na przykład XVI)
  2. Szukaj na tym DPB
  3. Zmień DPB na coś innego, na przykład DPX
  4. Daruj sobie! / Align = "left" / xla, pojawi się komunikat o błędzie, tylko Kontynuuj.
  5. możesz teraz zmienić hasło .xla otwierając właściwości i przejdź do zakładki hasło.

Mam nadzieję, że to pomogło niektórym z was!

 0
Author: Edwin van der V,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-29 09:09:30

Jeśli pracujesz w Java Możesz spróbować VBAMacroExtractor. Po wypakowaniu skryptów VBA z .xlsm znalazłem tam hasło w postaci zwykłego tekstu.

 0
Author: Grez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-08 13:37:56