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.