Zdarza się, że zrobimy sobie fajny arkusz i żeby go nikt nie zepsuł zabezpieczamy go hasłem. Niestety po roku mało kto to hasło pamięta i arkusz staje się dla nas stracony.
Ponieważ spotkało to zarówno mnie jak i moich klientów jako panaceum wymyśliłem ukrywanie hasła na sobie znanej odległej komórce białymi literami na białym tle żeby nie było widoczne. Z bezpieczeństwem wiele to nie ma wspólnego ale powiedzmy sobie szczerze w blokowaniu arkuszy zazwyczaj chodzi nam o to aby nikt ich przypadkowo nie zepsuł a nie o tajemnice wagi państwowej. No dobra ale co zrobić jak nie zostawiliśmy sobie żadnej podpowiedzi, hasło pamiętamy mgliście a ręczne próby już nas znudziły?
Jeżeli wiemy, że hasło nie składa się z długiej frazy możemy zaprząc makro aby nam je odzyskało. Na początek trochę teorii. Ilość wariacji z powtórzeniami dla zbioru n elementów przy wybieraniu k elementów to n do potęgi k. Czyli jeżeli wiemy, że wykorzystaliśmy tylko cyfry 0..9 i było ich 6 to otrzymujemy 10 do potęgi 6 kombinacji czyli milion. Nasze makro jest w stanie sprawdzić około 15 haseł na sekundę czyli w tym przypadku w najgorszym razie odgadnie nam hasło w niecałe 19 godzin. Rzeczywisty czas trwania będzie zależny od faktycznej kombinacji cyfr bo hasło 111111 odgadnie od razu a hasło 999999 po wspomnianych 19 godzinach.
Proponowane makro umożliwia:
Po wprowadzeniu znaków (lub całych fraz) w dowolną kolumnę z obszaru A-0 oraz frazy początkowej w komórce P1, makro wykonuje wariacje z powtórzeniami z wskazanego zbioru dla wskazanego przedziału ilości znaków w haśle. Np. jeżeli w kolumnę nr 1 (A) wpiszemy w kolejnych wierszach litery A, B, C i wybierzemy ilość znaków hasła 1-3 zostaną sprawdzone następujące kombinacje A,B,C, AA, BA, CA, AB, BB, CB, AC, BC, CC, AAA, BAA, CAA ….. BCC, CCC.
Jeżeli jesteśmy pewni, że w haśle znajduje się cała fraza np. „Numer” należy ją wpisać jako jeden ze znaków używanych do poszukiwania hasła.
Jeżeli jesteśmy pewni, że hasło zaczyna się od konkretnej frazy np.: „Imię” należy ją wpisać w komórkę P1 (żółta).
Odzyskane hasło pojawi się w komunikacie i zostanie zapisane w komórce Q1 (niebieska) wraz z informacjami o czasie startu i zakończenia szukania hasła poniżej.
……………………..
.
Sub Szukaj_Hasła()
Dim Litery(100) As String
Dim Aktualna_Litera(100) As Integer
Application.ScreenUpdating = False
Application.Calculation = xlManual Application.DisplayAlerts = False
Kolumna = Val(InputBox(“Podaj numer kolumny z której czytać litery”))
Początek = Cells(1,16)
Ilość_Liter = 0
While Cells(Ilość_Liter + 1, Kolumna) <> “”
Ilość_Liter = Ilość_Liter + 1 Litery(Ilość_Liter) = Cells(Ilość_Liter, Kolumna)
Wend
MinDługość = Val(InputBox(“Podaj minimalną długość hasła”))
MaxDługość = Val(InputBox(“Podaj maksymalną długość hasła”))
Cells(2, 17) = Time()
If Ilość_Liter > 0 And MinDługość > 0 And MaxDługość > 0 Then
For i = MinDługość To MaxDługość
For j = 1 To i
For k = 1 To i
Aktualna_Litera(k) = 1
Next
For k = 1 To i
For l = 1 To Ilość_Liter
Hasło = “”
For n = 1 To i
Hasło = Hasło & Litery(Aktualna_Litera(n))
Next
Hasło = Początek & Hasło
If Aktualna_Litera(k) < Ilość_Liter Then
Aktualna_Litera(k) = Aktualna_Litera(k) + 1
Else
While Aktualna_Litera(k) = Ilość_Liter
k = k + 1
Wend
If k <= i Then
Aktualna_Litera(k) = Aktualna_Litera(k) + 1
For m = 1 To k – 1
Aktualna_Litera(m) = 1
Next
k = 0
Else
j = j + 1
End If
End If
On Error GoTo Błąd
ActiveWorkbook.Unprotect Hasło
Cells(1, 17) = Hasło
Cells(3, 17) = Time()
Decyzja = MsgBox(“Hasło :” & Hasło, vbOKOnly)
GoTo Koniec
Błąd:
On Error GoTo -1
Next
Next
Next
Next
End If
Koniec:
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
‘definicja tablicy liter
‘definicja tablicy zmienianych liter
‘wyłączenie aktualizacji ekranu
‘wyłączenie automatycznych przeliczeń
‘wyłączenie alertów
‘pytanie w której kolumnie są litery składające się na hasło
‘wczytanie początku hasła
‘wyzerowanie ilości liter
‘jeżeli jest litera to
‘zwiększ ilość liter o 1
‘wczytaj literę do tabeli
‘powtarzaj
‘pytanie o minimalną długość hasła
‘pytanie o maksymalną długość hasła
‘Zapisanie czasu
‘jeżeli ilość liter >0 i długość hasła >0 to
‘dla każdej długości hasła od minimalnej do maksymalna długość
‘dla każdej litery hasła
‘dla każdej litery hasła
‘wybierz pierwszą wskazaną literę
‘dla każdej litery hasła
‘dla wszystkich możliwych liter
‘wyzeruj hasło
‘dla aktualnej ilości liter
‘złóż hasło z liter
‘jeżeli nie jest to ostatnia litera do wyboru na danej pozycji to wybierz kolejną literę
‘to wybierz kolejną literę
jeżeli jest to ostatnia możliwa litera na danej pozycji
‘zobacz czy na kolejnej pozycji jest już ostatnia litera do wyboru
‘jeżeli tak to zwiększ pozycję
‘jeżeli to nie ostatnia możliwa litera na ostatnim polu
‘wybierz kolejną literę
‘a dla wcześniejszych liter
‘cofnij się do pierwszej możliwej litery
‘i zacznij o nowa
‘a jeżeli to ostania litera na ostatnim polu to zwiększ ilość liter hasła
‘jeżeli wystąpi błąd skocz do Błąd
‘sprawdź czy hasło się zgadza
‘zapisanie hasła
‘zapisanie czasu
‘jeżeli się zgadza to je wyświetl
‘i idź na koniec
‘jeżeli hasło błędne
‘resetuj błędy
‘włącz automatyczne liczenie
‘włącz aktualizację wyświetlania
‘włącz alerty
Makro jest dość krótkie choć nie jest proste a to co warto z niego zapamiętać to kilka funkcji które przydadzą Wam się na pewno w przyszłości :
“While Warunek
Kod 1
Wend”
Pętla która wykonuje Kod 1 dopóki spełniony jest Warunek
Czyli np.
X=0
While X<10 Then
X=X+1
Wend
Będzie dodawać do X 1 dopóki X nie osiągnie wartości 10
„Application.ScreenUpdating = False”
„Application.ScreenUpdating = True”
Wyłączanie i włączanie aktualizacji wyświetlania, ważne gdy chcemy przyśpieszyć nasze makra
„Application.Calculation = xlManual”
“Application.Calculation = xlAutomatic”
Przełączanie pomiędzy manualnym i automatycznym przeliczaniem komórek arkusza, ważne gdy chcemy przyśpieszyć nasze makra
„Application.DisplayAlerts = False “
“Application.DisplayAlerts = True”
Wyłączanie I włączanie wyświetlania alertów, ważne gdy nie chcemy aby makro było przerywane przez wyświetlane komunikaty
Wynik = InputBox(“Treść zachęty”)
Wyświetla komunikat „Treść zachęty” wraz z polem do wpisania wartości przez użytkownika. Wpisana wartość jest przypisywana do zmiennej Wynik
Uzyskiwane efekty drastycznie zależą od tego czy uda Wam się ograniczyć zakres poszukiwanych znaków hasła lub wprowadzić do niego całe frazy. W arkuszu w kolumnach T-X znajdziecie proste przeliczenie ile maksymalnie powinno trwać poszukiwanie hasła dla ilości znaków do wyboru wpisanej w komórkę U1 oraz długości hasła w kolumnie T (przy czym w przypadku użycia frazy traktujemy jej długość jako 1 znak).
Mam nadzieję, że uda Wam się odzyskać swoje zablokowane pliki, gdybyście mieli z tym problem jak zawsze zapraszam do korespondencji na adres konrad.pogodz@itch.pl
Nasza Firma zapewnia nie tylko najnowsze rozwiązania z dziedziny IT ale również nie pozostaje w miejscu każdego dnia poszerza swoją wiedzę którą bardzo chętnie dzielimy się z innymi. Zapraszamy do zapoznania się z ostatnimi nowinkami.
Skontaktuj się z nami i otwórz drzwi do innowacyjnych rozwiązań technologicznych dla Twojej firmy. Nasz zespół ekspertów jest gotów odpowiedzieć na Twoje pytania, dostosować ofertę do Twoich potrzeb i wesprzeć Cię w osiągnięciu sukcesu.
Wykorzystaj potencjał technologii już dziś, by zwiększyć efektywność, rozwijać biznes i zadbać o bezpieczeństwo swoich danych.