SHA1 crack

Ako vieme SHA1 je broken a nemáme ho používať, stále je veľa hesiel uložených ako SHA1 a aj bude. Vyrobíme preto jednoduchý password cracker. (Na implementáciu použije čisté C++, implementáciu SHA1 môžete zobrať z internetu). Ďalej sa na utilitku odkazujeme ako "sha1crack.exe".

Jednoduchý vstup (10 bodov)

Vstup jeden SHA1, brute force na hľadanie hesla (malé, veľké písmena, čísla, skúša všetky, tu musíte vymyslieť nejaké poradie ako sa budú heslá generovať aby to šlo cez všetky a začalo od najkratších a postupovalo k najdlhším). Výsledkom je nájdene heslo.

Syntax sha1crack.exe 59b7bc438df4f2c39736f84add54036f2083ef60

Možnosť zadania saltu (2,5 bodov)

Ako viete heslá sa nezvyknú ukladať priamo, ale pridáva sa k ním salt, aby to bolo odolnejšie voči slovníkovým útokom. Pri generovaní hesiel skúšaní potom tento salt skúste na začiatok hesla aj na koniec. Prepínače --salt a –S sú ekvivalentné.salt skúste na začiatok hesla aj na koniec. Prepínače --salt a –S sú ekvivalentné.

Syntax
sha1crack.exe --salt totojesalt 59b7bc438df4f2c39736f84add54036f2083ef60

sha1crack.exe -S totojesalt 59b7bc438df4f2c39736f84add54036f2083ef60

Vstup zo súboru (2,5 bodov)

Ak je na vstupe prepínač --input, alebo -I, tak sa skúšajú hashe nie z konzoly ale z tohoho súboru, kde sú oddelené novými riadkami. Výsledkom programu potom bude výpis nájdených hesiel, teda vždy dvojice hash a heslo k nemu. Pozor prepínače --input a --salt môžu byť aj naraz špecifikované, to je vlastne taká téma, že všetky prepínače sa môžu kombinovať. input, alebo -I, tak sa skúšajú hashe nie z konzoly ale z tohoho súboru, kde sú oddelené novými riadkami. Výsledkom programu potom bude výpis nájdených hesiel, teda vždy dvojice hash a heslo k nemu. Pozor prepínače --input a --salt môžu byť aj naraz špecifikované, to je vlastne taká téma, že všetky prepínače sa môžu kombinovať.

Možnosť zadania masky (10 bodov)

Maska určuje aké je heslo dlhé a aké asi znaky obsahuje. Podporované sekvencie sú

·         \A - veľké písmená

·         \a - malé písmená

·         \d - číslice

·         ? - čokoľvek (jeden znak, či už veľké, malé písmeno, alebo číslica)

·         Znak bez \, teda priamo napríklad A určuje, že na tejto pozícií je priamo A

Napríklad, "\AB\a?" sú všetky heslá, ktoré začínajú veľkým písmenom, potom je znak B, potom malé písmeno a potom hocičo. BBaX to spĺňa, ale ABBA nie, ani AbbA. BBaX to spĺňa, ale ABBA nie, ani AbbA.

Maska \A\d\d\d\d skúša iba hesla začínajúce veľkým písmenom a potom štyrmi číslicami.

Prepínač, ktorý toto aktivuje je, --pattern, alebo -P.

Podpora viacvláknového spracovávania (7 bodov)

Po zadaní prepínača -MT sa využije viacero vlákien na počítanie hashov, prípadne masiek hashov.

Špecifikovania slovníka (5bodov)

Pomocou prepínačov -D, alebo --dictionary, vieme zadať cestu k súboru, kde budú heslá (každé na jednom riadku), ktoré sa budú skúšat na začiatku pred brute force searchom.

Priebežný výpis na konzolu (3body)

Program nás informuje o tom či už skúsil slovník, aké aktuálne heslo skúša, koľko hesiel skúša v priemere za sekundu, koľko doteraz hesiel našiel (ak sa bavíme o vstupe zo súboru). Toto ale samozrejme nerobí po každom heslo, ale povedzme po 10k-1M, podľa toho ako rýchlo vaša aplikácia pôjde, aby to nerobil častejšie ako raz za 5sekúnd.

Rozšírená možnosť masky (10bodov)

Vieme zadať opakovania (podpora iba formát {x, y}) a wildcard *. Teda napríklad \A{0,3}\a* znamená najprv maximálne tri veľké písmená a potom ľubovoľne veľa malých. ?* je vlastne default, lebo je to ľubovoľne veľa hocakých písmen a číslic.

Tu pozor na patterny ako

\a*\d*

V nich treba zacať od najkratších stringov a pokračovať k dlhším. Takže najprv vyskúšať všetky jednoznakové, potom dvojznakové atď reťazce, ktoré spĺňajú masku.