1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Ma olen Rob ja hakkame lõhenemist. 3 00:00:15,890 --> 00:00:19,390 Nii mäletan pset spec et me ei kavatse olla kellel on vaja kasutada 4 00:00:19,390 --> 00:00:20,890 crypt funktsiooni. 5 00:00:20,890 --> 00:00:26,330 Sest mees leheküljel on kaks hash määratleda _xopensource. 6 00:00:26,330 --> 00:00:28,290 Ära muretse, miks me peame seda tegema. 7 00:00:28,290 --> 00:00:31,550 Ja ka hash hulka unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Nii et kui see välja viis, lähme saada tegelik programm. 9 00:00:35,920 --> 00:00:39,570 Esimene asi, mida me peame tegema, on veenduge, et kasutaja sisestatud kehtiv krüpteeritud 10 00:00:39,570 --> 00:00:41,520 UUS käsurida. 11 00:00:41,520 --> 00:00:46,050 Pea meeles, et programm peaks tuleb käivitada nagu dot kaldkriipsuga crack, ja 12 00:00:46,050 --> 00:00:48,120 siis krüpteeritud string. 13 00:00:48,120 --> 00:00:52,990 >> Nii et siin me kontrollida, et veenduda et argc kahele, kui tahame 14 00:00:52,990 --> 00:00:54,380 jätkata programmi. 15 00:00:54,380 --> 00:00:58,830 Kui argc ei ole kaks, mis tähendab kas kasutaja ei sisesta krüpteeritud 16 00:00:58,830 --> 00:01:02,560 UUS käsurida või nad kantakse üle ainult krüpteeritud 17 00:01:02,560 --> 00:01:05,379 UUS käsurida, kus puhul me ei tea, mida teha 18 00:01:05,379 --> 00:01:07,660 käsurea argumente. 19 00:01:07,660 --> 00:01:11,390 >> Nii et kui argc oli kaks, saame jätkata. 20 00:01:11,390 --> 00:01:14,160 Ja siin me kuulutada muutuja krüpteeritud. 21 00:01:14,160 --> 00:01:17,650 See on lihtsalt läheb alias originaal argv1 nii, et kogu selle 22 00:01:17,650 --> 00:01:20,690 programm, me ei pea seda kutsuda argv1, mis siis sa pead mõtlema 23 00:01:20,690 --> 00:01:22,950 kohta, mida see tegelikult tähendab. 24 00:01:22,950 --> 00:01:27,180 >> Nii et lõpuks, me tahame, et kinnitada, et krüpteeritud parool kasutaja 25 00:01:27,180 --> 00:01:30,840 sisestatud oleks tegelikult olnud krüpteeritud parool. 26 00:01:30,840 --> 00:01:35,120 Per mees leheküljele krüpt, krüpteeritud parool peab olema 13 27 00:01:35,120 --> 00:01:36,440 märki. 28 00:01:36,440 --> 00:01:41,500 Siin üleval, märkate, et me hash määratletud krüptida pikkusega 13. 29 00:01:41,500 --> 00:01:46,140 Nii et me lihtsalt tagada, et string pikkusega krüpteeritud 30 00:01:46,140 --> 00:01:49,090 parool on 13. 31 00:01:49,090 --> 00:01:52,280 >> Ja kui see ei ole, me tahame programmist väljumiseks. 32 00:01:52,280 --> 00:01:56,470 Nii et kui see on välja Muide, saame nüüd tegelikult proovida leida seda, mida 33 00:01:56,470 --> 00:02:00,410 parooli, mis andis krüpteeritud parool oli. 34 00:02:00,410 --> 00:02:04,870 Siin tahame haarata soola alates krüpteeritud parool. 35 00:02:04,870 --> 00:02:08,930 Pea meeles, et iga mees lehel, et Esimesed kaks märki krüpteeritud 36 00:02:08,930 --> 00:02:10,590 string, meeldib siin - 37 00:02:10,590 --> 00:02:12,770 50ZPJ ja nii edasi - 38 00:02:12,770 --> 00:02:16,170 esimesed kaks tähemärki anda meile sool, mida kasutati 39 00:02:16,170 --> 00:02:18,080 aastal krüpt funktsioon. 40 00:02:18,080 --> 00:02:21,740 >> Ja siin me näeme, et sool oli ha. 41 00:02:21,740 --> 00:02:27,610 Nii et me tahame, et kopeerida esimese kahe tegelased, soola pikkus on hash 42 00:02:27,610 --> 00:02:30,230 määratletud kui kaks. 43 00:02:30,230 --> 00:02:35,970 Meil on kopeerida esimesed kaks tähemärki sellesse massiiv, sool. 44 00:02:35,970 --> 00:02:39,340 Pange tähele, et meil on vaja soola pikkus pluss üks, sest meil on vaja veel null 45 00:02:39,340 --> 00:02:42,440 terminaator lõpus meie sool. 46 00:02:42,440 --> 00:02:46,940 >> Siis me kuulutame selle massiivi külaline, suurus max pikkus pluss 47 00:02:46,940 --> 00:02:51,930 üks, kus max pikkus on hash määratletud kui kaheksa, kuna maksimaalne salasõna 48 00:02:51,930 --> 00:02:55,090 on kaheksa märki. 49 00:02:55,090 --> 00:02:59,860 Ja me ei kavatse kasutada seda korrata kõikvõimalike stringe, mis võiks 50 00:02:59,860 --> 00:03:01,430 kehtivad paroolid. 51 00:03:01,430 --> 00:03:07,720 Nii et kui kehtiv tähemärki parool olid just a, b ja c, siis 52 00:03:07,720 --> 00:03:14,970 oleksime Käi a, b, c, aa, ba, ca, ja nii edasi, kuni 53 00:03:14,970 --> 00:03:16,690 saame näha cccccccc - 54 00:03:16,690 --> 00:03:19,600 kaheksa c on. 55 00:03:19,600 --> 00:03:23,620 >> Ja kui me ei ole alla kehtiva salasõna, siis peame ütlema, et 56 00:03:23,620 --> 00:03:26,590 krüpteeritud string ei olnud kehtiv alustada. 57 00:03:26,590 --> 00:03:29,970 Nüüd jõuame selle ajal 1 silmus. 58 00:03:29,970 --> 00:03:33,100 Pange tähele, et tähendab, et see lõputu silmuse. 59 00:03:33,100 --> 00:03:36,430 >> Teatis ei ole murda avaldus sees see lõputu silmuse. 60 00:03:36,430 --> 00:03:38,570 Seal on ainult tagasi avaldustega. 61 00:03:38,570 --> 00:03:41,210 Nii et me tegelikult ei oodata silmusest väljumiseks. 62 00:03:41,210 --> 00:03:44,750 Meil on ainult oodata, et väljuda programmist. 63 00:03:44,750 --> 00:03:48,220 Olen lisanud seda print avaldus Selle peale silmuse lihtsalt välja printida 64 00:03:48,220 --> 00:03:51,790 mida meie praegune oletus Mis on parool. 65 00:03:51,790 --> 00:03:53,630 >> Nüüd, mis on see loop teed? 66 00:03:53,630 --> 00:03:58,330 See silmukoiminen kõikvõimalike stringe mis võib olla kehtiv paroole. 67 00:03:58,330 --> 00:04:02,700 Esimene asi, mida me teeme, on võtta meie praegune oletusega, mida 68 00:04:02,700 --> 00:04:03,920 parool. 69 00:04:03,920 --> 00:04:07,230 Võtame sool et me haarasid krüpteeritud string, ja me oleme 70 00:04:07,230 --> 00:04:09,850 kavatse krüpteerimiseks oletus. 71 00:04:09,850 --> 00:04:14,760 See annab meile krüptitud oletus, mis me võrreldakse 72 00:04:14,760 --> 00:04:18,810 krüpteeritud string, et kasutaja sisestatakse käsurealt. 73 00:04:18,810 --> 00:04:23,030 >> Kui need on samad, mille puhul string võrreldav naaseb null, kui 74 00:04:23,030 --> 00:04:28,050 nad sama, siis arvan, et oli parooli, mis loodud krüpteeritud 75 00:04:28,050 --> 00:04:33,520 string, mille puhul saame trükkida et kui meie parool ja tagasi. 76 00:04:33,520 --> 00:04:37,520 Aga kui nad ei ole sama, mis tähendab, et meie oletus on vale. 77 00:04:37,520 --> 00:04:43,250 >> Ja me tahame kinnitada, et Järgmise kehtiv oletus. 78 00:04:43,250 --> 00:04:46,410 Nii see on, mida see samas loop üritab teha. 79 00:04:46,410 --> 00:04:51,760 See saab korrata meie oletus Järgmise kehtiv oletus. 80 00:04:51,760 --> 00:04:56,080 Pange tähele, et kui me ütleme, et eelkõige märk meie oletus on 81 00:04:56,080 --> 00:05:01,770 jõudnud max sümbol, mis siin on hash määratletud tilde, kuna 82 00:05:01,770 --> 00:05:05,710 mis on suurim ASCII väärtus iseloomu et kasutaja saab sisestada aadressil 83 00:05:05,710 --> 00:05:11,210 klaviatuur, kui iseloomu jõuab max sümbol, siis tahame saata 84 00:05:11,210 --> 00:05:17,150 see tagasi minimaalse sümbol, mis on ruumi jälle madalaim ASCII 85 00:05:17,150 --> 00:05:20,800 väärtuse sümbol, mida kasutaja saab sisesta klaviatuurilt. 86 00:05:20,800 --> 00:05:22,940 >> Nii et me ei kavatse kehtestada, et minimaalse sümbol. 87 00:05:22,940 --> 00:05:25,720 Ja siis me läheme järgmisele iseloomu. 88 00:05:25,720 --> 00:05:28,730 Niisiis, kuidas on meie oletused kavatse korrata? 89 00:05:28,730 --> 00:05:33,685 Noh, kui kehtiv tegelased on a, b, ja c, siis kui me alustasime, 90 00:05:33,685 --> 00:05:36,630 see saab kinnitada, et b, siis see korrata, et c. 91 00:05:36,630 --> 00:05:44,360 c on meie max sümbol, nii me seada c tagasi, minimaalne sümbol. 92 00:05:44,360 --> 00:05:48,100 Ja siis korrata indeks järgmine sümbol. 93 00:05:48,100 --> 00:05:53,920 >> Nii et kui algne oletus oli c, järgmisele iseloomu saab olema null 94 00:05:53,920 --> 00:05:55,560 terminaator. 95 00:05:55,560 --> 00:06:00,670 Siin all märgata, et kui märk et tahame nüüd 96 00:06:00,670 --> 00:06:04,690 juurdekasv oli null terminaator siis me ei kavatse seada see 97 00:06:04,690 --> 00:06:06,260 miinimum sümbol. 98 00:06:06,260 --> 00:06:11,431 Nii et kui oletus oli c, siis meie uus oletus saab olema aa. 99 00:06:11,431 --> 00:06:16,050 Ja kui meie algne oletus oli cccc, siis meie uus oletus 100 00:06:16,050 --> 00:06:18,380 saab olema aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Nii et kui me jõuame maksimaalne string teatava pikkusega, siis oleme 102 00:06:24,430 --> 00:06:29,090 kavatse rakendada minimaalselt string järgmise pikkus, mis kestab 103 00:06:29,090 --> 00:06:34,420 lihtsalt kõik tegelased miinimum sümbol. 104 00:06:34,420 --> 00:06:36,970 Nüüd, mis on see kontroll siin teed? 105 00:06:36,970 --> 00:06:42,780 Noh, kui indeks liikunud kaheksas märgi üheksa iseloomu - 106 00:06:42,780 --> 00:06:46,460 nii me lisada kaheksa c on nagu meie eelmine arvan - 107 00:06:46,460 --> 00:06:51,270 siis indeks läheb keskenduda viimane null terminaator meie oletus 108 00:06:51,270 --> 00:06:57,990 massiiv, mis ei ole mõeldud tegelikult kasutada oma parool. 109 00:06:57,990 --> 00:07:03,530 >> Nii et kui me oleme keskendunud, et viimane null terminaator siis me ei leidnud 110 00:07:03,530 --> 00:07:07,750 parool, mis on kehtiv, kasutades ainult kaheksa märki, mis tähendab, et puudub 111 00:07:07,750 --> 00:07:10,550 kehtiv parool, mis krüpteerib et antud stringi. 112 00:07:10,550 --> 00:07:13,520 Ja meil on trükkida seda, öeldes: me ei suutnud leida kehtiv 113 00:07:13,520 --> 00:07:16,100 parooli ja tagasi. 114 00:07:16,100 --> 00:07:20,280 Nii et see, kui loop läheb itereerima kõikvõimalike stringe. 115 00:07:20,280 --> 00:07:24,640 >> Kui ta leiab, et krüpteerib et oodata krüpteeritud string, siis see 116 00:07:24,640 --> 00:07:26,190 tagasi, et parool. 117 00:07:26,190 --> 00:07:29,610 Ja ta ei leia midagi, siis ta naaseb, trükkimine, et seda 118 00:07:29,610 --> 00:07:31,910 ei suutnud leida midagi. 119 00:07:31,910 --> 00:07:39,220 Nüüd teate, et iterating üle kõik võimalik stringid on ilmselt läheb 120 00:07:39,220 --> 00:07:40,420 aega võtta. 121 00:07:40,420 --> 00:07:43,590 Olgem tegelikult näha, kuidas kaua see aega võtab. 122 00:07:43,590 --> 00:07:47,230 >> Teeme crack. 123 00:07:47,230 --> 00:07:51,050 Noh, oops - ta ütleb undefined viide krüpt. 124 00:07:51,050 --> 00:07:55,330 Seega pidage meeles, et p seab spec ja ka man-leheküljelt krüpt, et me 125 00:07:55,330 --> 00:07:58,130 pead lingi krüpt. 126 00:07:58,130 --> 00:08:01,130 Nüüd vaikimisi käsk make ei tea, et sa 127 00:08:01,130 --> 00:08:03,010 soovite kasutada seda funktsiooni. 128 00:08:03,010 --> 00:08:09,680 >> Teeme kopeeri see klient käsk ja lihtsalt lisada lõppu 129 00:08:09,680 --> 00:08:13,300 see, mis ühendab krüpt. 130 00:08:13,300 --> 00:08:14,820 Nüüd koostab. 131 00:08:14,820 --> 00:08:23,880 Niisiis olgem joosta pragu antud krüpteeritud string - 132 00:08:23,880 --> 00:08:25,130 nii Keisri. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Nii et oli päris kiire. 135 00:08:30,790 --> 00:08:33,230 >> Pange tähele, et see lõppes 13. 136 00:08:33,230 --> 00:08:38,240 Noh, Caesari krüpteeritud parool juhtub olema 13. 137 00:08:38,240 --> 00:08:41,650 Seega proovime teise parooliga. 138 00:08:41,650 --> 00:08:45,830 Võtame Hirschhorn on krüpteeritud parool ja proovige lõhenemist et. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Nii märkate oleme juba jõudnud kolm märki. 141 00:08:55,110 --> 00:08:58,660 Ja me iterating üle kõik võimalik Kolme märgijadadena. 142 00:08:58,660 --> 00:09:01,420 See tähendab, et me oleme juba lõpetada iterating kõikvõimalike üks ja 143 00:09:01,420 --> 00:09:04,660 kaks märgijada. 144 00:09:04,660 --> 00:09:09,180 Nüüd tundub, et see läheb võtab aega, enne kui jõuame 145 00:09:09,180 --> 00:09:10,580 nelja-märgijadadena. 146 00:09:10,580 --> 00:09:14,680 See võib võtta paar minutit. 147 00:09:14,680 --> 00:09:16,055 >> Ta ei võta paar minutit. 148 00:09:16,055 --> 00:09:18,450 Me oleme neli-märgijada. 149 00:09:18,450 --> 00:09:22,800 Aga nüüd on meil vaja korrata üle kõik võimalik nelja-märgijada, mis 150 00:09:22,800 --> 00:09:26,000 mis võib kesta ehk 10 minutit. 151 00:09:26,000 --> 00:09:28,720 Ja siis, kui me jõuame viie iseloomu stringid, peame Käi kõik 152 00:09:28,720 --> 00:09:31,450 Nende hulk, kes võivad võtta paar tundi. 153 00:09:31,450 --> 00:09:34,080 Ja meil on vaja korrata üle kõik võimalik Kuue märgijada, mis 154 00:09:34,080 --> 00:09:36,560 võib võtta paar päeva ja nii edasi. 155 00:09:36,560 --> 00:09:41,380 >> Nii et see võiks olla väga pikk aeg korrata üle kõik võimalik 156 00:09:41,380 --> 00:09:44,850 kaheksa-kohaline ja vähem stringe. 157 00:09:44,850 --> 00:09:50,600 Nii teate, et see ei ole tingimata väga tõhus algoritm leidmiseks 158 00:09:50,600 --> 00:09:51,860 UUS. 159 00:09:51,860 --> 00:09:54,540 Võib arvata, et seal on paremaid viise. 160 00:09:54,540 --> 00:10:02,230 Näiteks salasõna zyx! 32AB ilmselt ei ole väga levinud parool 161 00:10:02,230 --> 00:10:06,440 arvestades salasõna 12345 ilmselt palju rohkem ühist. 162 00:10:06,440 --> 00:10:13,570 >> Nii et üks viis, püüdes leida parool kiiremini on lihtsalt vaadata 163 00:10:13,570 --> 00:10:15,560 kell paroole, mis on rohkem levinud. 164 00:10:15,560 --> 00:10:20,480 Nii näiteks saame proovida lugeda sõnu alates sõnastik ja proovida kõik 165 00:10:20,480 --> 00:10:24,860 need sõnad on meie salasõna oletused. 166 00:10:24,860 --> 00:10:29,210 Nüüd äkki parool ei ole nii lihtne. 167 00:10:29,210 --> 00:10:32,600 Võibolla kasutaja oli mõnevõrra tark ja proovige lisades numbri 168 00:10:32,600 --> 00:10:34,220 sõna lõpus. 169 00:10:34,220 --> 00:10:37,000 >> Ehk oma parool oli password1. 170 00:10:37,000 --> 00:10:41,520 Nii saad proovida iterating üle kõik sõnad sõnastikus koos ühe 171 00:10:41,520 --> 00:10:43,210 lisatud lõpuni. 172 00:10:43,210 --> 00:10:47,360 Ja siis võib-olla pärast seda, et sul lisab kaks kuni lõpuni. 173 00:10:47,360 --> 00:10:50,240 >> Või äkki kasutaja üritab olla isegi targem, ja nad tahavad, et nende 174 00:10:50,240 --> 00:10:54,980 parool on "häkker", kuid nad kavatse asendada kõik juhtumid e on 175 00:10:54,980 --> 00:10:56,600 koos kolmekesi. 176 00:10:56,600 --> 00:10:58,440 Nii et sa võiksid seda teha ka. 177 00:10:58,440 --> 00:11:02,100 Käi kõik sõnad sõnastikust aga asendada märkide 178 00:11:02,100 --> 00:11:04,790 nägema numbrid need numbrid. 179 00:11:04,790 --> 00:11:09,670 >> Nii et see tee, siis võib jõuda isegi rohkem paroole, mis on üsna tavaline. 180 00:11:09,670 --> 00:11:14,690 Aga lõppude lõpuks, ainult nii saab lüüa kõik paroolid on loomalik 181 00:11:14,690 --> 00:11:17,340 sundida Käi kõik võimalik stringe. 182 00:11:17,340 --> 00:11:22,100 Nii et lõpuks, sa ei pea korrata üle kogu strings ühe märgi 183 00:11:22,100 --> 00:11:28,110 kaheksa tähemärki, mis võib võtta väga pikka aega, aga sa pead seda tegema. 184 00:11:28,110 --> 00:11:30,024 >> Minu nimi on Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Ja see on crack. 186 00:11:31,425 --> 00:11:36,533