Generator haseł jako skrypt bat

Poczta, usługi chmur, portale społecznościowe, serwery dla adminów itd. itp., to wszystko wymaga od nas wymyślania coraz to mocniejszych haseł. Jeżeli nie jesteśmy dobrymi kryptologami, nie mamy smykałki do wymyślania trudnych haseł, możemy skorzystać z aplikacji, które same generują je dla nas. Na dodatek ciekawiej, jak ten program napisany jest jako… bat.

Pokaże, jak działa mój skrypt napisany na zaliczenie działu z przedmiotu systemy operacyjne. Powiem jeszcze, że pierwotnie miał powstać… kalkulator ;-).

Z tej racji, że program zawiera aż 390 linii kodu, nie umieściłem go we wpisie, lecz gdzie indziej. Oto link

Tajemnicze Random.

Patrząc na ów kod można dostać bólu głowy i jeszcze innych nieprzyjemnych doznań. Tak naprawdę, kod nie jest wcale taki trudny. Praktycznie głównym modułem odpowiadającym za działanie jest:

setLocal EnableDelayedExpansion
set str=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
set /a C=!random!%%36
set string1=!str:~%C%,1!
set /a C=!random!%%36
set string2=!str:~%C%,1!
set /a C=!random!%%36
set string3=!str:~%C%,1!
set /a C=!random!%%36
set string4=!str:~%C%,1!
set /a C=!random!%%36
set string5=!str:~%C%,1!
set /a C=!random!%%36
set string6=!str:~%C%,1!
set /a C=!random!%%36
set string7=!str:~%C%,1!
set /a C=!random!%%36
set string8=!str:~%C%,1!
set /a C=!random!%%36
set string9=!str:~%C%,1!
set /a C=!random!%%36
set string10=!str:~%C%,1!
set "pass=%string1%%string2%%string3%%string4%%string5%%string6%%string7%%string8%%string9%%string10%"
echo Wygenerowane hasło: %pass%

 

 

Co to dziwne procenty, tyldy i polecenia znaczą ? Już omawiam.

Na początku powiem, co on robi. Otóż jest to fragment kodu, który odpowiada właśnie za generowanie hasła. Jeżeli byśmy się chcieli zagłębić dokładniej w jego strukturę, to będę zmuszony powiedzieć, co znaczą kolejne polecenia. A, poświecę się dla ogółu.

setLocal EnableDelayedExpansion – jeżeli mam być szczery to nie wiem co to znaczy

set str=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 – zmienna typu string. Przechowuje po znaku = wartość, na której będą wykonywane działania. W tym przypadku są do wielkie litery i cyfry.

set /a C=!random!%%36 – z pośród stringa, w którym znajduje się 36 znaków wybiera jeden dowolnie wylosowany znak.

set string1=!str:~%C%,1! – do wylosowanego znaku dodaje jeszcze numer 1. Czyli jeżeli z pierwszego polecenia zostanie wybrana litera C, to owe polecenie doda jeszcze jeden znak i ostatecznie zostanie wybrana litera D.

set „pass=%string1%%string2%%string3%%string4%%string5%%string6%%string7%%string8%%string9%%string10%”– układa kolejnego wylosowane znaki.

echo Wygenerowane hasˆo: %pass% – wyświetla wygenerowane hasło.

Jak widać, najważniejsze element programu wcale tak skomplikowanie nie działa. „Pomylona” jest tylko jego składnia.

Czas na pętle.

Pętle są nieodłączonym elementem każdego programu. Tutaj występują one z dwoma parametrami:

if %a% EQU 1 goto 10-znak

 

 

oraz

if %a% NEQ 1 goto inne

 

 

Pierwsza pętla informuje nas, że po wybraniu cyfry 1 zostanie uruchomiona procedura o nazwie 10-znak. Banalne. Jednak jeżeli byśmy wybrali inny klawisz, który nie znajduje się w menu, skrypt po prostu wywaliłby błąd i by się zakończył. Aby tego uniknąć, zastosowano do pętli if flagę NEQ. Jeżeli wybierzemy klawisz, który nie został przypisany do żadnej procedury, skrypt wyrzuci nam błąd, że wybraliśmy nieodpowiedni klawisz, ale się nie zakończy. Pojawi się tylko takie okno:

Zapisz wygenerowane hasło.

Do tego skryptu dodałem jeszcze możliwość zapisania wygenerowanego hasła jako nazwy pliku tekstowego. Za tą całą robotę odpowiadają owe linie:

:zapis
notepad.exe %pass%
echo Plik zostaˆ tam zapisany, gdzie znajduje siŠ skrypt
pause
goto menu

 

 

Jest to inaczej procedura nazwana zapis. Ona nic nadzwyczajnego nie robi. Uruchamia tylko notatnik, któremu w zmiennej %pass% przekazuje wygenerowane hasło jako nazwę nowo utworzonego pliku. Po zamknięciu notatnika zostaje wyświetlony komunikat, a następnie program powróci do głównego menu.

Czy trudno pisać takie zaawansowane skrypty dla Windows ? Nie. Przeważnie tak to jest, że kilka linijek robi całą robotę. Tutaj, przyznam, zaszalałem, ale chciałem, aby skrypt działał jak najlepiej. Mogłem sobie podarować niektóre rzeczy np. zmienną NEQ, zapis do pliku itd. Jednak jak już coś robię, to robię to porządnie.

Nie opisałem tutaj całego kodu znak po znaku, a jedynie jego najważniejsze fragmenty. Dlaczego ? Bo nie będę Wam podawał wszystkiego na tacy. Wy też trochę pogłówkujcie.

Dlaczego wywala kodowanie ? Gdyż skrypt był pisany w konsolowym narzędziu edit i notatnik źle interpretuje polskie ogonki.

Pobierz skrypt