>> ROB BOWDEN: Som Rob a Pusťme sa do toho.
Takže nezabudnite od pset spec, že budeme potrebovať na použitie
krypta funkcie.
Pre manuálové stránky, máme dve hash definovať _xopensource.
Nebojte sa o tom, prečo musíme urobiť.
A tiež hash patrí unistd.h.
>> Takže akonáhle to je z cesty, poďme sa na aktuálny program.
Prvá vec, ktorú musíme urobiť, je uistiť užívateľ zadal platné šifrovaná
heslo na príkazovom riadku.
Nezabudnite, že program má ktorý má byť spustený ako bodka trhliny lomítko, a
potom šifrované reťazec.
>> Takže tu máme kontrolu, aby sa ubezpečil že argc na dva, ak chceme
pokračovať v programe.
Pokiaľ nie je argc dve, to znamená, že buď užívateľ nezadal šifrovaná
heslo na príkazovom riadku, alebo zadať viac než len šifrované
heslo na príkazovom riadku, v ktorom prípade nevieme, čo robiť s
Argumenty príkazového riadka.
>> Takže ak argc boli dva roky, môžeme pokračovať.
A tu, budeme deklarovať variabilný zakódované.
To len tak alias pôvodných argv1 tak, že v celej tejto
Program, nemáme hovoriť argv1, ktoré potom musíte myslieť
, Čo to vlastne znamená.
>> Tak konečne, chceme overiť, že zašifrovanej heslo používateľa
vstúpil by boli skutočne zašifrované heslo.
Podľa manuálové stránky krypty, na zašifrovanej heslo musí byť 13
znakov.
Až tu si všimnite, že hash definované šifrovanie dĺžku ako 13 rokov.
Takže sme len uistiť, že dĺžka reťazca šifrované
Heslo je 13.
>> A ak to tak nie je, chceme ukončiť program.
Takže akonáhle to je z cesty, môžeme sa skutočne snaží nájsť to, čo
heslo, ktoré dal šifrovaná heslo bolo.
Tu chceme chytiť soľ od šifrovaným heslom.
Pamätajte si, že na manuálové stránky, ktoré prvé dva znaky šifrovaná
reťazec, ako tu -
50ZPJ a tak ďalej -
prvé dva znaky dávajú nás soľ, ktorá bola použitá
v krypte funkcie.
>> A tu vidíme, že soľ bola ha.
Takže chceme skopírovať prvé dve znaky, soľ dĺžka je hash
definovaná ako dve.
Musíme skopírujte prvé dva znaky do tohto poľa, soľ.
Všimnite si, že potrebujeme soľ dĺžku a jeden, pretože stále potrebujeme null
zakončenie na konci nášho soli.
>> Potom budeme deklarovať toto pole, host, dĺžky a veľkosti max
jeden, kde maximálna dĺžka je definovaná hash ôsmich rokov, pretože maximálna heslo
je osem znakov dlhé.
A budeme sa použiť k iterácii cez všetky možné reťazce, ktoré by mohli
byť platné heslá.
Takže ak platné znaky hesla boli len a, b, a c, potom
by sme iterácii, b, c, aa, ba, CA, a tak ďalej, až kým
dostaneme vidieť cccccccc -
C je osem.
>> A ak nemáme dole platný heslo, potom musíme povedať, že
šifrovaný reťazec nebol platné začať.
Takže teraz sa dostávame to, keď jeden slučka.
Všimnite si, že znamená, že je nekonečná slučka.
>> Všimnite si, že nie sú break v tejto nekonečnej slučky.
Sú vrátiť iba vyhlásenia.
Takže sme vlastne nikdy očakávať, na opustenie slučky.
Máme len očakávať, že program ukončite.
Pridal som tento tlačový vyhlásenie Vrchol tejto slučky len vytlačiť
čo náš súčasný odhad na čo je heslo.
>> A teraz, čo je táto slučka robí?
Je to opakovanie cez všetky možné reťazce ktoré by mohli byť platné hesla.
Prvá vec, ktorú budeme robiť, je sa náš súčasný odhad pre to, čo
heslo.
Vezmeme soľ, ktorá sa chytil od šifrované reťazce, a my sme
bude na zašifrovanie odhad.
To nám šifrované odhad, ktoré budeme porovnávať proti
šifrované reťazec, ktorý užívateľ zadané na príkazovom riadku.
>> Ak sú rovnaké, v tom prípade string porovnateľné vráti nulu, ak
sú rovnaké, potom asi bol heslo, ktoré generuje šifrovaný
reťazec, v tom prípade môžeme vytlačiť že ako naše heslo a späť.
Ale keby neboli rovnaké, že znamená, že náš odhad bol správny.
>> A chceme, aby iterácii ďalšie platné odhad.
Takže to je to, čo to pri slučka sa snaží robiť.
Bude to náš odhad iterácii na ďalšie platné odhad.
Všimnite si, že keď hovoríme, že osobitný charakter v našom odhade má
dosiahol symbol Max, ktorý sa tu je definovaný ako hash vlnovkou, pretože
to je najväčšia hodnota ASCII znak že používateľ môže zadať na
klávesnice, keď charakter dosiahne max symbol, potom chceme poslať
späť na minimálnu symbol, ktorý Je to priestor, opäť najnižšiu ASCII
hodnota symbol, ktorý môže používateľ zadajte na klávesnici.
>> Takže budeme nastaviť, aby sa minimálna symbolu.
A potom sme sa chystáte ísť na ďalší znak.
Tak, ako sú naše odhady bude prechádzať?
No, v prípade, že sú platné znaky a, b, a c, potom, ak sme začali s,
to bude prechádzať do B, bude to iterovat až c
c je náš max symbol, takže budeme nastaviť c späť k, minimálna symbol.
A potom budeme iterovat index na ďalší znak.
>> Takže v prípade, že pôvodný odhad bol c, ďalšie znak bude null
terminátor.
Tu dole si všimnite, že ak charakter že teraz chceme
prírastok bol null terminátor potom budeme nastaviť tak, aby
Minimálna symbol.
Takže v prípade, že odhad bol, c, potom sa naša Nový odhad bude aa.
A keď náš pôvodný odhad bol CCCC, potom náš nový odhad
bude aaaaa.
>> Takže keď dosiahnete maximálny reťazec danej dĺžky, potom sme
bude vykonávať minimálny reťazec ďalšieho dĺžky, ktorý bude
len sa všetky znaky minimálna symbol.
A teraz, čo je táto kontrola robí?
No, keď index pohyboval od ôsmej znak deviatich charakteru -
tak pridáme osem C je ako naše predchádzajúce hádať -
potom index bude sústrediť na posledný null terminátor nášho odhadu
pole, ktoré nie sú určené pre praktické Pre použitie v našej heslo.
>> Takže ak sa zameriavame na tej poslednej null terminator, potom sme nenašli
heslo, ktoré je platné len pomocou ôsmich znaky, čo znamená, že nie je žiadny
platné heslo, ktoré šifruje na daný reťazec.
A máme k tlači, že hovorí, sme nemohli nájsť platný
heslo a návrat.
Tak to while bude iterovat cez všetky možné reťazce.
>> Ak zistí, všetky zmeny, ktoré šifruje na Očakáva šifrované reťazec, bude to
návrat toto heslo.
A to, že nič nenájde, potom vráti, tlač, že
nebol schopný nájsť nič.
Teraz si všimnite, že iterácie cez všetky Možné reťazca sa pravdepodobne bude
chvíľu trvať.
Poďme sa pozrieť, ako vlastne dlho to trvá.
>> Poďme urobiť trhlinu.
No, jejda - hovorí definované odkaz na krypty.
Takže pamätajte, že pre p sady spec a aj manuálové stránky pre krypte, že sme
treba prepojiť do krypty.
Teraz, predvolený príkaz make nevie, že ste
chcete použiť túto funkciu.
>> Takže poďme skopírujte tento príkaz klienta a stačí pridať na koniec
o tom, prepojenie krypta.
Teraz ju zostavuje.
Takže poďme spustiť prasklinu na daný šifrovaný reťazec -
tak Cisárov.
Takže to bolo celkom rýchlo.
>> Všimnite si, že to skončilo na 13 rokov.
No, Caesarov zašifrovanej heslo sa stane, že je 13.
Takže poďme skúsiť zadať iné heslo.
Poďme sa Hirschhorn je šifrovaná heslo a skúste to praskanie, že.
>> Takže oznámenia sme už dosiahli tri znaky.
A my iterácia cez všetky možné tri znakové reťazce.
To znamená, že už sme sa dokončiť iterácia cez všetky možné jednu a
dva znakové reťazce.
Teraz to vyzerá, že to bude chvíľu trvať, než sa dostaneme
štyri reťazce znakov.
To môže trvať niekoľko minút.
>> Netrvalo pár minút.
Sme na štyri znakových reťazcov.
Ale teraz sa musíme iterovat cez všetky Možné štyri reťazce znakov, ktoré
že môže trvať možno 10 minút.
A potom, keď sa dostaneme päť charakter reťazca, musíme iterovat cez všetky
z tých, ktoré by mohli trvať niekoľko hodín.
A musíme iterovat cez všetky možné šesť-znakové reťazce, ktoré
môže trvať pár dní, a tak ďalej.
>> Takže to môže trvať potenciálne veľmi dlhý čas k iterácii cez všetky možné
osemmiestne a menej reťazcov.
Všimnite si, že tak, ale to nie je nevyhnutne veľmi efektívny algoritmus pre hľadanie
heslo.
Môžete si myslieť, že existuje sú lepšie spôsoby.
Napríklad heslo ZYX! 32ab asi nie je veľmi časté heslo
zatiaľ čo heslo je 12345 pravdepodobne oveľa častejšie.
>> Takže jeden spôsob, ako sa snaží nájsť heslo rýchlejšie je len pozerať
na heslá, ktoré sú častejšie.
Tak napríklad, môžeme sa pokúsiť čítať slová zo slovníka a vyskúšali všetky
tieto slová ako naše heslo háda.
Teraz, možná heslo nie je to tak jednoduché.
Možno, že užívateľ bol trochu múdra a skúste pripojením číslo
koniec slova.
>> Takže možno svoje heslo bolo password1.
Takže si môžete vyskúšať iterácie všetky slová v slovníku s jedným
pripojená na koniec.
A potom možno po tom to, že budete pripojiť dva na konci.
>> Alebo možno sa užívateľ pokúša byť ešte múdrejší, a chcú, aby ich
heslo, ktoré "hacker", ale sú chystá nahradiť všetky výskyty ŽP
s trojok.
Takže by ste mohli urobiť to taky.
Iterovat cez všetky slová v slovníku ale nahradiť znaky, ktoré
Vyzerajú ako čísla s týmito číslami.
>> Takže týmto spôsobom, môžete zachytiť aj viac heslá, ktoré sú celkom bežné.
Ale na konci, jediný spôsob, ako môžete zachytiť všetky heslá je hovado
núti iterovat cez všetky Možné reťazca.
Takže nakoniec, vy potrebujete iterovat cez všetky struny z jedného znaku na
osem znakov, ktoré môže trvať veľmi dlhá doba, ale musíte to urobiť.
>> Volám sa Rob Bowden.
A to je Crack.