1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Som Rob a Pusťme sa do toho. 3 00:00:15,890 --> 00:00:19,390 Takže nezabudnite od pset spec, že budeme potrebovať na použitie 4 00:00:19,390 --> 00:00:20,890 krypta funkcie. 5 00:00:20,890 --> 00:00:26,330 Pre manuálové stránky, máme dve hash definovať _xopensource. 6 00:00:26,330 --> 00:00:28,290 Nebojte sa o tom, prečo musíme urobiť. 7 00:00:28,290 --> 00:00:31,550 A tiež hash patrí unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Takže akonáhle to je z cesty, poďme sa na aktuálny program. 9 00:00:35,920 --> 00:00:39,570 Prvá vec, ktorú musíme urobiť, je uistiť užívateľ zadal platné šifrovaná 10 00:00:39,570 --> 00:00:41,520 heslo na príkazovom riadku. 11 00:00:41,520 --> 00:00:46,050 Nezabudnite, že program má ktorý má byť spustený ako bodka trhliny lomítko, a 12 00:00:46,050 --> 00:00:48,120 potom šifrované reťazec. 13 00:00:48,120 --> 00:00:52,990 >> Takže tu máme kontrolu, aby sa ubezpečil že argc na dva, ak chceme 14 00:00:52,990 --> 00:00:54,380 pokračovať v programe. 15 00:00:54,380 --> 00:00:58,830 Pokiaľ nie je argc dve, to znamená, že buď užívateľ nezadal šifrovaná 16 00:00:58,830 --> 00:01:02,560 heslo na príkazovom riadku, alebo zadať viac než len šifrované 17 00:01:02,560 --> 00:01:05,379 heslo na príkazovom riadku, v ktorom prípade nevieme, čo robiť s 18 00:01:05,379 --> 00:01:07,660 Argumenty príkazového riadka. 19 00:01:07,660 --> 00:01:11,390 >> Takže ak argc boli dva roky, môžeme pokračovať. 20 00:01:11,390 --> 00:01:14,160 A tu, budeme deklarovať variabilný zakódované. 21 00:01:14,160 --> 00:01:17,650 To len tak alias pôvodných argv1 tak, že v celej tejto 22 00:01:17,650 --> 00:01:20,690 Program, nemáme hovoriť argv1, ktoré potom musíte myslieť 23 00:01:20,690 --> 00:01:22,950 , Čo to vlastne znamená. 24 00:01:22,950 --> 00:01:27,180 >> Tak konečne, chceme overiť, že zašifrovanej heslo používateľa 25 00:01:27,180 --> 00:01:30,840 vstúpil by boli skutočne zašifrované heslo. 26 00:01:30,840 --> 00:01:35,120 Podľa manuálové stránky krypty, na zašifrovanej heslo musí byť 13 27 00:01:35,120 --> 00:01:36,440 znakov. 28 00:01:36,440 --> 00:01:41,500 Až tu si všimnite, že hash definované šifrovanie dĺžku ako 13 rokov. 29 00:01:41,500 --> 00:01:46,140 Takže sme len uistiť, že dĺžka reťazca šifrované 30 00:01:46,140 --> 00:01:49,090 Heslo je 13. 31 00:01:49,090 --> 00:01:52,280 >> A ak to tak nie je, chceme ukončiť program. 32 00:01:52,280 --> 00:01:56,470 Takže akonáhle to je z cesty, môžeme sa skutočne snaží nájsť to, čo 33 00:01:56,470 --> 00:02:00,410 heslo, ktoré dal šifrovaná heslo bolo. 34 00:02:00,410 --> 00:02:04,870 Tu chceme chytiť soľ od šifrovaným heslom. 35 00:02:04,870 --> 00:02:08,930 Pamätajte si, že na manuálové stránky, ktoré prvé dva znaky šifrovaná 36 00:02:08,930 --> 00:02:10,590 reťazec, ako tu - 37 00:02:10,590 --> 00:02:12,770 50ZPJ a tak ďalej - 38 00:02:12,770 --> 00:02:16,170 prvé dva znaky dávajú nás soľ, ktorá bola použitá 39 00:02:16,170 --> 00:02:18,080 v krypte funkcie. 40 00:02:18,080 --> 00:02:21,740 >> A tu vidíme, že soľ bola ha. 41 00:02:21,740 --> 00:02:27,610 Takže chceme skopírovať prvé dve znaky, soľ dĺžka je hash 42 00:02:27,610 --> 00:02:30,230 definovaná ako dve. 43 00:02:30,230 --> 00:02:35,970 Musíme skopírujte prvé dva znaky do tohto poľa, soľ. 44 00:02:35,970 --> 00:02:39,340 Všimnite si, že potrebujeme soľ dĺžku a jeden, pretože stále potrebujeme null 45 00:02:39,340 --> 00:02:42,440 zakončenie na konci nášho soli. 46 00:02:42,440 --> 00:02:46,940 >> Potom budeme deklarovať toto pole, host, dĺžky a veľkosti max 47 00:02:46,940 --> 00:02:51,930 jeden, kde maximálna dĺžka je definovaná hash ôsmich rokov, pretože maximálna heslo 48 00:02:51,930 --> 00:02:55,090 je osem znakov dlhé. 49 00:02:55,090 --> 00:02:59,860 A budeme sa použiť k iterácii cez všetky možné reťazce, ktoré by mohli 50 00:02:59,860 --> 00:03:01,430 byť platné heslá. 51 00:03:01,430 --> 00:03:07,720 Takže ak platné znaky hesla boli len a, b, a c, potom 52 00:03:07,720 --> 00:03:14,970 by sme iterácii, b, c, aa, ba, CA, a tak ďalej, až kým 53 00:03:14,970 --> 00:03:16,690 dostaneme vidieť cccccccc - 54 00:03:16,690 --> 00:03:19,600 C je osem. 55 00:03:19,600 --> 00:03:23,620 >> A ak nemáme dole platný heslo, potom musíme povedať, že 56 00:03:23,620 --> 00:03:26,590 šifrovaný reťazec nebol platné začať. 57 00:03:26,590 --> 00:03:29,970 Takže teraz sa dostávame to, keď jeden slučka. 58 00:03:29,970 --> 00:03:33,100 Všimnite si, že znamená, že je nekonečná slučka. 59 00:03:33,100 --> 00:03:36,430 >> Všimnite si, že nie sú break v tejto nekonečnej slučky. 60 00:03:36,430 --> 00:03:38,570 Sú vrátiť iba vyhlásenia. 61 00:03:38,570 --> 00:03:41,210 Takže sme vlastne nikdy očakávať, na opustenie slučky. 62 00:03:41,210 --> 00:03:44,750 Máme len očakávať, že program ukončite. 63 00:03:44,750 --> 00:03:48,220 Pridal som tento tlačový vyhlásenie Vrchol tejto slučky len vytlačiť 64 00:03:48,220 --> 00:03:51,790 čo náš súčasný odhad na čo je heslo. 65 00:03:51,790 --> 00:03:53,630 >> A teraz, čo je táto slučka robí? 66 00:03:53,630 --> 00:03:58,330 Je to opakovanie cez všetky možné reťazce ktoré by mohli byť platné hesla. 67 00:03:58,330 --> 00:04:02,700 Prvá vec, ktorú budeme robiť, je sa náš súčasný odhad pre to, čo 68 00:04:02,700 --> 00:04:03,920 heslo. 69 00:04:03,920 --> 00:04:07,230 Vezmeme soľ, ktorá sa chytil od šifrované reťazce, a my sme 70 00:04:07,230 --> 00:04:09,850 bude na zašifrovanie odhad. 71 00:04:09,850 --> 00:04:14,760 To nám šifrované odhad, ktoré budeme porovnávať proti 72 00:04:14,760 --> 00:04:18,810 šifrované reťazec, ktorý užívateľ zadané na príkazovom riadku. 73 00:04:18,810 --> 00:04:23,030 >> Ak sú rovnaké, v tom prípade string porovnateľné vráti nulu, ak 74 00:04:23,030 --> 00:04:28,050 sú rovnaké, potom asi bol heslo, ktoré generuje šifrovaný 75 00:04:28,050 --> 00:04:33,520 reťazec, v tom prípade môžeme vytlačiť že ako naše heslo a späť. 76 00:04:33,520 --> 00:04:37,520 Ale keby neboli rovnaké, že znamená, že náš odhad bol správny. 77 00:04:37,520 --> 00:04:43,250 >> A chceme, aby iterácii ďalšie platné odhad. 78 00:04:43,250 --> 00:04:46,410 Takže to je to, čo to pri slučka sa snaží robiť. 79 00:04:46,410 --> 00:04:51,760 Bude to náš odhad iterácii na ďalšie platné odhad. 80 00:04:51,760 --> 00:04:56,080 Všimnite si, že keď hovoríme, že osobitný charakter v našom odhade má 81 00:04:56,080 --> 00:05:01,770 dosiahol symbol Max, ktorý sa tu je definovaný ako hash vlnovkou, pretože 82 00:05:01,770 --> 00:05:05,710 to je najväčšia hodnota ASCII znak že používateľ môže zadať na 83 00:05:05,710 --> 00:05:11,210 klávesnice, keď charakter dosiahne max symbol, potom chceme poslať 84 00:05:11,210 --> 00:05:17,150 späť na minimálnu symbol, ktorý Je to priestor, opäť najnižšiu ASCII 85 00:05:17,150 --> 00:05:20,800 hodnota symbol, ktorý môže používateľ zadajte na klávesnici. 86 00:05:20,800 --> 00:05:22,940 >> Takže budeme nastaviť, aby sa minimálna symbolu. 87 00:05:22,940 --> 00:05:25,720 A potom sme sa chystáte ísť na ďalší znak. 88 00:05:25,720 --> 00:05:28,730 Tak, ako sú naše odhady bude prechádzať? 89 00:05:28,730 --> 00:05:33,685 No, v prípade, že sú platné znaky a, b, a c, potom, ak sme začali s, 90 00:05:33,685 --> 00:05:36,630 to bude prechádzať do B, bude to iterovat až c 91 00:05:36,630 --> 00:05:44,360 c je náš max symbol, takže budeme nastaviť c späť k, minimálna symbol. 92 00:05:44,360 --> 00:05:48,100 A potom budeme iterovat index na ďalší znak. 93 00:05:48,100 --> 00:05:53,920 >> Takže v prípade, že pôvodný odhad bol c, ďalšie znak bude null 94 00:05:53,920 --> 00:05:55,560 terminátor. 95 00:05:55,560 --> 00:06:00,670 Tu dole si všimnite, že ak charakter že teraz chceme 96 00:06:00,670 --> 00:06:04,690 prírastok bol null terminátor potom budeme nastaviť tak, aby 97 00:06:04,690 --> 00:06:06,260 Minimálna symbol. 98 00:06:06,260 --> 00:06:11,431 Takže v prípade, že odhad bol, c, potom sa naša Nový odhad bude aa. 99 00:06:11,431 --> 00:06:16,050 A keď náš pôvodný odhad bol CCCC, potom náš nový odhad 100 00:06:16,050 --> 00:06:18,380 bude aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Takže keď dosiahnete maximálny reťazec danej dĺžky, potom sme 102 00:06:24,430 --> 00:06:29,090 bude vykonávať minimálny reťazec ďalšieho dĺžky, ktorý bude 103 00:06:29,090 --> 00:06:34,420 len sa všetky znaky minimálna symbol. 104 00:06:34,420 --> 00:06:36,970 A teraz, čo je táto kontrola robí? 105 00:06:36,970 --> 00:06:42,780 No, keď index pohyboval od ôsmej znak deviatich charakteru - 106 00:06:42,780 --> 00:06:46,460 tak pridáme osem C je ako naše predchádzajúce hádať - 107 00:06:46,460 --> 00:06:51,270 potom index bude sústrediť na posledný null terminátor nášho odhadu 108 00:06:51,270 --> 00:06:57,990 pole, ktoré nie sú určené pre praktické Pre použitie v našej heslo. 109 00:06:57,990 --> 00:07:03,530 >> Takže ak sa zameriavame na tej poslednej null terminator, potom sme nenašli 110 00:07:03,530 --> 00:07:07,750 heslo, ktoré je platné len pomocou ôsmich znaky, čo znamená, že nie je žiadny 111 00:07:07,750 --> 00:07:10,550 platné heslo, ktoré šifruje na daný reťazec. 112 00:07:10,550 --> 00:07:13,520 A máme k tlači, že hovorí, sme nemohli nájsť platný 113 00:07:13,520 --> 00:07:16,100 heslo a návrat. 114 00:07:16,100 --> 00:07:20,280 Tak to while bude iterovat cez všetky možné reťazce. 115 00:07:20,280 --> 00:07:24,640 >> Ak zistí, všetky zmeny, ktoré šifruje na Očakáva šifrované reťazec, bude to 116 00:07:24,640 --> 00:07:26,190 návrat toto heslo. 117 00:07:26,190 --> 00:07:29,610 A to, že nič nenájde, potom vráti, tlač, že 118 00:07:29,610 --> 00:07:31,910 nebol schopný nájsť nič. 119 00:07:31,910 --> 00:07:39,220 Teraz si všimnite, že iterácie cez všetky Možné reťazca sa pravdepodobne bude 120 00:07:39,220 --> 00:07:40,420 chvíľu trvať. 121 00:07:40,420 --> 00:07:43,590 Poďme sa pozrieť, ako vlastne dlho to trvá. 122 00:07:43,590 --> 00:07:47,230 >> Poďme urobiť trhlinu. 123 00:07:47,230 --> 00:07:51,050 No, jejda - hovorí definované odkaz na krypty. 124 00:07:51,050 --> 00:07:55,330 Takže pamätajte, že pre p sady spec a aj manuálové stránky pre krypte, že sme 125 00:07:55,330 --> 00:07:58,130 treba prepojiť do krypty. 126 00:07:58,130 --> 00:08:01,130 Teraz, predvolený príkaz make nevie, že ste 127 00:08:01,130 --> 00:08:03,010 chcete použiť túto funkciu. 128 00:08:03,010 --> 00:08:09,680 >> Takže poďme skopírujte tento príkaz klienta a stačí pridať na koniec 129 00:08:09,680 --> 00:08:13,300 o tom, prepojenie krypta. 130 00:08:13,300 --> 00:08:14,820 Teraz ju zostavuje. 131 00:08:14,820 --> 00:08:23,880 Takže poďme spustiť prasklinu na daný šifrovaný reťazec - 132 00:08:23,880 --> 00:08:25,130 tak Cisárov. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Takže to bolo celkom rýchlo. 135 00:08:30,790 --> 00:08:33,230 >> Všimnite si, že to skončilo na 13 rokov. 136 00:08:33,230 --> 00:08:38,240 No, Caesarov zašifrovanej heslo sa stane, že je 13. 137 00:08:38,240 --> 00:08:41,650 Takže poďme skúsiť zadať iné heslo. 138 00:08:41,650 --> 00:08:45,830 Poďme sa Hirschhorn je šifrovaná heslo a skúste to praskanie, že. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Takže oznámenia sme už dosiahli tri znaky. 141 00:08:55,110 --> 00:08:58,660 A my iterácia cez všetky možné tri znakové reťazce. 142 00:08:58,660 --> 00:09:01,420 To znamená, že už sme sa dokončiť iterácia cez všetky možné jednu a 143 00:09:01,420 --> 00:09:04,660 dva znakové reťazce. 144 00:09:04,660 --> 00:09:09,180 Teraz to vyzerá, že to bude chvíľu trvať, než sa dostaneme 145 00:09:09,180 --> 00:09:10,580 štyri reťazce znakov. 146 00:09:10,580 --> 00:09:14,680 To môže trvať niekoľko minút. 147 00:09:14,680 --> 00:09:16,055 >> Netrvalo pár minút. 148 00:09:16,055 --> 00:09:18,450 Sme na štyri znakových reťazcov. 149 00:09:18,450 --> 00:09:22,800 Ale teraz sa musíme iterovat cez všetky Možné štyri reťazce znakov, ktoré 150 00:09:22,800 --> 00:09:26,000 že môže trvať možno 10 minút. 151 00:09:26,000 --> 00:09:28,720 A potom, keď sa dostaneme päť charakter reťazca, musíme iterovat cez všetky 152 00:09:28,720 --> 00:09:31,450 z tých, ktoré by mohli trvať niekoľko hodín. 153 00:09:31,450 --> 00:09:34,080 A musíme iterovat cez všetky možné šesť-znakové reťazce, ktoré 154 00:09:34,080 --> 00:09:36,560 môže trvať pár dní, a tak ďalej. 155 00:09:36,560 --> 00:09:41,380 >> Takže to môže trvať potenciálne veľmi dlhý čas k iterácii cez všetky možné 156 00:09:41,380 --> 00:09:44,850 osemmiestne a menej reťazcov. 157 00:09:44,850 --> 00:09:50,600 Všimnite si, že tak, ale to nie je nevyhnutne veľmi efektívny algoritmus pre hľadanie 158 00:09:50,600 --> 00:09:51,860 heslo. 159 00:09:51,860 --> 00:09:54,540 Môžete si myslieť, že existuje sú lepšie spôsoby. 160 00:09:54,540 --> 00:10:02,230 Napríklad heslo ZYX! 32ab asi nie je veľmi časté heslo 161 00:10:02,230 --> 00:10:06,440 zatiaľ čo heslo je 12345 pravdepodobne oveľa častejšie. 162 00:10:06,440 --> 00:10:13,570 >> Takže jeden spôsob, ako sa snaží nájsť heslo rýchlejšie je len pozerať 163 00:10:13,570 --> 00:10:15,560 na heslá, ktoré sú častejšie. 164 00:10:15,560 --> 00:10:20,480 Tak napríklad, môžeme sa pokúsiť čítať slová zo slovníka a vyskúšali všetky 165 00:10:20,480 --> 00:10:24,860 tieto slová ako naše heslo háda. 166 00:10:24,860 --> 00:10:29,210 Teraz, možná heslo nie je to tak jednoduché. 167 00:10:29,210 --> 00:10:32,600 Možno, že užívateľ bol trochu múdra a skúste pripojením číslo 168 00:10:32,600 --> 00:10:34,220 koniec slova. 169 00:10:34,220 --> 00:10:37,000 >> Takže možno svoje heslo bolo password1. 170 00:10:37,000 --> 00:10:41,520 Takže si môžete vyskúšať iterácie všetky slová v slovníku s jedným 171 00:10:41,520 --> 00:10:43,210 pripojená na koniec. 172 00:10:43,210 --> 00:10:47,360 A potom možno po tom to, že budete pripojiť dva na konci. 173 00:10:47,360 --> 00:10:50,240 >> Alebo možno sa užívateľ pokúša byť ešte múdrejší, a chcú, aby ich 174 00:10:50,240 --> 00:10:54,980 heslo, ktoré "hacker", ale sú chystá nahradiť všetky výskyty ŽP 175 00:10:54,980 --> 00:10:56,600 s trojok. 176 00:10:56,600 --> 00:10:58,440 Takže by ste mohli urobiť to taky. 177 00:10:58,440 --> 00:11:02,100 Iterovat cez všetky slová v slovníku ale nahradiť znaky, ktoré 178 00:11:02,100 --> 00:11:04,790 Vyzerajú ako čísla s týmito číslami. 179 00:11:04,790 --> 00:11:09,670 >> Takže týmto spôsobom, môžete zachytiť aj viac heslá, ktoré sú celkom bežné. 180 00:11:09,670 --> 00:11:14,690 Ale na konci, jediný spôsob, ako môžete zachytiť všetky heslá je hovado 181 00:11:14,690 --> 00:11:17,340 núti iterovat cez všetky Možné reťazca. 182 00:11:17,340 --> 00:11:22,100 Takže nakoniec, vy potrebujete iterovat cez všetky struny z jedného znaku na 183 00:11:22,100 --> 00:11:28,110 osem znakov, ktoré môže trvať veľmi dlhá doba, ale musíte to urobiť. 184 00:11:28,110 --> 00:11:30,024 >> Volám sa Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 A to je Crack. 186 00:11:31,425 --> 00:11:36,533