15 March 2023

Odzyskiwanie hasła w Excelu

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.

Odzyskiwanie hasła w Excelu
theme-w-ico
theme-ico

Opis filmu

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:

  • Wybór znaków z których składa się hasło
  • Wybór minimalnej ilości liter hasła
  • Wybór maksymalnej ilości liter hasła
  • Wykorzystanie frazy od której rozpoczyna się hasło
  • Wykorzystanie frazy która znajduje się w haśle w dowolnym miejscu

 

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

 

 

Pobierz darmowy materiał szkoleniowy:

Dzielimy się
wiedzą

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.

theme-w-ico
arrows-ico-wh
Imię i Nazwisko łączenie, rozdzielanie, zamiana kolejności

Z doświadczenia wiem, że często powtarzającym się problemem jest obróbka imion i nazwisk. Czy powinny być w dwóch kolumnach czy w jednej i w jakiej kolejności ?

theme-w-ico
arrows-ico-wh
POWER APPS – AUDYT część 4

Zapraszamy na ostatni odcinek instrukcji tworzenia w Power Apps aplikacji umożliwiającej audytowanie dowolnych procesów przedsiębiorstwa.

theme-w-ico
arrows-ico-wh
POWER APPS – AUDYT część 3

Zapraszam na trzeci odcinek instrukcji tworzenia w Power Apps aplikacji umożliwiającej edytowanie dowolnych procesów przedsiębiorstwa.

 

theme-w-ico
theme-ico

Poznajmy się
i porozmawiajmy!

arrows-b

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.

zespół
theme-ico