1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: aš Robas ir Leiskite gauti skilinėjimą. 3 00:00:15,890 --> 00:00:19,390 Taigi nepamirškite iš pset spec, kad mes ketiname būti, kuriems reikia naudoti 4 00:00:19,390 --> 00:00:20,890 kripta funkcija. 5 00:00:20,890 --> 00:00:26,330 Dėl žinyno puslapyje, mes turime du maišos apibrėžti _xopensource. 6 00:00:26,330 --> 00:00:28,290 Nesijaudinkite apie tai, kodėl mes turime tai padaryti. 7 00:00:28,290 --> 00:00:31,550 O taip pat maišos yra unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Taigi, kai tai iš kelio, galime patekti į faktinį programos. 9 00:00:35,920 --> 00:00:39,570 Pirmas dalykas, kurį turime padaryti, tai įsitikinkite, kad vartotojas įveda galioja šifruojamas 10 00:00:39,570 --> 00:00:41,520 slaptažodis į komandų eilutę. 11 00:00:41,520 --> 00:00:46,050 Atminkite, kad programa turėtų būti paleisti kaip dot slash crack, ir 12 00:00:46,050 --> 00:00:48,120 tada užšifruoti eilutę. 13 00:00:48,120 --> 00:00:52,990 >> Taigi čia mes patikrinti, įsitikinkite, kad kad argc iki dviejų, jei norime 14 00:00:52,990 --> 00:00:54,380 tęsti programą. 15 00:00:54,380 --> 00:00:58,830 Jei argc nėra du, tai reiškia, kad arba vartotojas neįtraukė šifruojamas 16 00:00:58,830 --> 00:01:02,560 slaptažodis į komandų eilutę, ar jie įrašytas daugiau nei tiesiog užkoduota 17 00:01:02,560 --> 00:01:05,379 slaptažodis į komandų eilutę, kurioje atveju mes nežinome, ką daryti su 18 00:01:05,379 --> 00:01:07,660 komandinės eilutės argumentai. 19 00:01:07,660 --> 00:01:11,390 >> Taigi, jei argc buvo du, galime tęsti. 20 00:01:11,390 --> 00:01:14,160 Ir čia mes ketiname paskelbti kintamasis šifruojamas. 21 00:01:14,160 --> 00:01:17,650 Tai tik ketina alias originalių argv1 kad per šį 22 00:01:17,650 --> 00:01:20,690 programa, mes neturime jį vadinti argv1, kuris tada jūs turite galvoti 23 00:01:20,690 --> 00:01:22,950 apie ką tai iš tikrųjų reiškia. 24 00:01:22,950 --> 00:01:27,180 >> Taigi pagaliau mes norime patvirtinti, kad Šifruotas slaptažodis vartotojas 25 00:01:27,180 --> 00:01:30,840 įrašytas galėjo iš tikrųjų buvo užšifruotos slaptažodį. 26 00:01:30,840 --> 00:01:35,120 Vienam žmogaus puslapyje kriptoje, kad Šifruotas slaptažodis turi būti 13 27 00:01:35,120 --> 00:01:36,440 simbolių ilgio. 28 00:01:36,440 --> 00:01:41,500 Iki čia, pastebėsite, kad mes maišos apibrėžta užšifruoti ilgis 13 metų. 29 00:01:41,500 --> 00:01:46,140 Taigi mes tiesiog įsitikinkite, kad eilutės ilgis ir saugiame 30 00:01:46,140 --> 00:01:49,090 slaptažodis 13. 31 00:01:49,090 --> 00:01:52,280 >> Ir jei tai nėra, mes norime išeiti iš programos. 32 00:01:52,280 --> 00:01:56,470 Taigi, kai tai iš kelio, mes galime dabar tikrai pabandykite rasti tai, ko 33 00:01:56,470 --> 00:02:00,410 slaptažodis, kuris davė šifruojamas slaptažodis. 34 00:02:00,410 --> 00:02:04,870 Čia norime patraukti druskos iš užšifruotos slaptažodį. 35 00:02:04,870 --> 00:02:08,930 Atminkite, kad vienam žinyno puslapyje, kad Pirmi du simboliai užšifruoti 36 00:02:08,930 --> 00:02:10,590 Styga, kaip čia - 37 00:02:10,590 --> 00:02:12,770 50ZPJ ir tt - 38 00:02:12,770 --> 00:02:16,170 Pirmi du simboliai suteikti mums druska, kuri buvo naudojama 39 00:02:16,170 --> 00:02:18,080 iš kriptų funkcija. 40 00:02:18,080 --> 00:02:21,740 >> Ir čia matome, kad druska buvo ha. 41 00:02:21,740 --> 00:02:27,610 Taigi, mes norime kopijuoti pirmieji du ženklai, druska ilgis yra maišos 42 00:02:27,610 --> 00:02:30,230 apibrėžiamas kaip dviejų. 43 00:02:30,230 --> 00:02:35,970 Mes turime kopijuoti Pirmi du simboliai į šio masyvo, druska. 44 00:02:35,970 --> 00:02:39,340 Atkreipkite dėmesį, kad mes turime druskos ilgis plius vienas, nes mes vis dar reikia null 45 00:02:39,340 --> 00:02:42,440 terminatorius ne mūsų druska pabaigos. 46 00:02:42,440 --> 00:02:46,940 >> Tada mes ketiname paskelbti šiame masyve, svečių, iš dydžio max ilgis plius 47 00:02:46,940 --> 00:02:51,930 vienas, kur maks ilgis yra maišos apibrėžta kaip aštuonių, nes didžiausia slaptažodį 48 00:02:51,930 --> 00:02:55,090 yra aštuonių simbolių ilgio. 49 00:02:55,090 --> 00:02:59,860 Ir mes ketiname naudoti šį pakartoti per visas įmanomas eilutes, kuriose galėtų 50 00:02:59,860 --> 00:03:01,430 Teisėti slaptažodžius. 51 00:03:01,430 --> 00:03:07,720 Taigi, jei galioja simbolių slaptažodžiu buvo tik a, b, ir c, tada 52 00:03:07,720 --> 00:03:14,970 mes norėtume pakartoti per, b, c, aa, BA, CA, ir taip toliau, kol 53 00:03:14,970 --> 00:03:16,690 mes turime pamatyti cccccccc - 54 00:03:16,690 --> 00:03:19,600 aštuonių C ". 55 00:03:19,600 --> 00:03:23,620 >> Ir jei mes turime ne žemyn galioja slaptažodis, tada mes turime pasakyti, kad 56 00:03:23,620 --> 00:03:26,590 užšifruotos eilutė nebuvo galioja nuo pat pradžių. 57 00:03:26,590 --> 00:03:29,970 Taigi dabar mes pasiekiame tai, o 1 kilpa. 58 00:03:29,970 --> 00:03:33,100 Atkreipkite dėmesį, kad reiškia, kad jis begalinis ciklas. 59 00:03:33,100 --> 00:03:36,430 >> Šioje duombazėje yra pateikti ne pertrauka apsauga viduje šios begalinis ciklas. 60 00:03:36,430 --> 00:03:38,570 Yra tik grįžti pareiškimus. 61 00:03:38,570 --> 00:03:41,210 Taigi, mes niekada iš tikrųjų tikėtis , kad išeitumėte iš kilpą. 62 00:03:41,210 --> 00:03:44,750 Mes tik tikimės, kad išeitumėte iš programos. 63 00:03:44,750 --> 00:03:48,220 Aš pridėjo šį spausdinimo pareiškimą viršuje šio kilpa tiesiog atsispausdinti 64 00:03:48,220 --> 00:03:51,790 kas mūsų dabartinis atspėti kas slaptažodis. 65 00:03:51,790 --> 00:03:53,630 >> Dabar, kas yra šis ciklas darai? 66 00:03:53,630 --> 00:03:58,330 Tai padarę per visas įmanomas eilutes kad galėtų būti galioja slaptažodžius. 67 00:03:58,330 --> 00:04:02,700 Pirmas dalykas, mes ketiname padaryti, tai atsižvelgti į mūsų dabartinę atspėti, ką 68 00:04:02,700 --> 00:04:03,920 slaptažodis. 69 00:04:03,920 --> 00:04:07,230 Mes priimsime druska, kad mes įsikabinti nuo užšifruoti eilutę, ir mes 70 00:04:07,230 --> 00:04:09,850 ketina šifruoti atspėti. 71 00:04:09,850 --> 00:04:14,760 Tai suteiks mums šifruotą atspėti, kurios mes ketiname palyginti su 72 00:04:14,760 --> 00:04:18,810 užšifruotos eilutė, vartotojo įrašytas į komandų eilutę. 73 00:04:18,810 --> 00:04:23,030 >> Jei jie yra tas pats, tokiu atveju eilutė palyginama sugrįš nulis, jei 74 00:04:23,030 --> 00:04:28,050 jie patys, tada manau, buvo slaptažodis, sukurtas šifruojamas 75 00:04:28,050 --> 00:04:33,520 seka, tokiu atveju mes galime atspausdinti kad mūsų slaptažodžiu ir atgal. 76 00:04:33,520 --> 00:04:37,520 Bet jei jie buvo ne tas pats, kad reiškia, kad mūsų spėjimas buvo neteisingas. 77 00:04:37,520 --> 00:04:43,250 >> Ir mes norime pakartoti, kad Kitas galioja spėjimas. 78 00:04:43,250 --> 00:04:46,410 Taigi tai, kas tai, o kilpa bando daryti. 79 00:04:46,410 --> 00:04:51,760 Ji ketina pakartoti mūsų spėjimą į kitą galiojantį atspėti. 80 00:04:51,760 --> 00:04:56,080 Atkreipkite dėmesį, kad kai sakome, kad ypač veikėjas mūsų atspėti turi 81 00:04:56,080 --> 00:05:01,770 pasiekė maksimalų simbolį, kuris čia yra maišos apibrėžiamas kaip tildė, nes 82 00:05:01,770 --> 00:05:05,710 tai didžiausia ASCII reikšmė pobūdis kad vartotojas gali įvesti ne 83 00:05:05,710 --> 00:05:11,210 klaviatūra, kai personažas pasiekia maks simbolis, tada mes norime siųsti 84 00:05:11,210 --> 00:05:17,150 jį atgal iki minimalaus simbolis, kuris yra erdvė, vėl mažiausias ASCII 85 00:05:17,150 --> 00:05:20,800 vertė simbolis, vartotojas gali įvesti į klaviatūrą. 86 00:05:20,800 --> 00:05:22,940 >> Taigi, mes ketiname nustatyti, kad minimalaus simboliu. 87 00:05:22,940 --> 00:05:25,720 Ir tada mes ketiname eiti prie kito simbolio. 88 00:05:25,720 --> 00:05:28,730 Taigi, kaip yra mūsų spėlionės ketina pakartoti? 89 00:05:28,730 --> 00:05:33,685 Na, jei galiojantys ženklai yra a, b, ir C, tada, jei mes pradėjome, 90 00:05:33,685 --> 00:05:36,630 jis bus pakartoti, kad b, jis bus pakartoti C. 91 00:05:36,630 --> 00:05:44,360 C yra mūsų maks simbolis, todėl mes nustatyti c atgal, minimalus simbolis. 92 00:05:44,360 --> 00:05:48,100 Ir tada mes pakartoti puslapis prie kito simbolio. 93 00:05:48,100 --> 00:05:53,920 >> Taigi, jei originalus spėjimas buvo c, kitas simbolis bus niekinis 94 00:05:53,920 --> 00:05:55,560 terminatorius. 95 00:05:55,560 --> 00:06:00,670 Žemyn čia pastebėti, kad jei personažas kad dabar mes norime 96 00:06:00,670 --> 00:06:04,690 prieaugis buvo niekinis terminatorius, tada mes ketiname nustatyti, kad jis 97 00:06:04,690 --> 00:06:06,260 Minimalus simbolis. 98 00:06:06,260 --> 00:06:11,431 Taigi, jei spėjimas buvo c, tada mūsų Naujas spėjimas bus aa. 99 00:06:11,431 --> 00:06:16,050 Ir jei mūsų originalus Spėjote cccc, tada mūsų naujas spėjimas 100 00:06:16,050 --> 00:06:18,380 bus aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Taigi, kai mes pasiekti maksimalų eilutę tam tikro ilgio, tada mes 102 00:06:24,430 --> 00:06:29,090 ketina įgyvendinti iki minimalaus eilutę Kito ilgio, kuris bus 103 00:06:29,090 --> 00:06:34,420 tiesiog visi personažai Minimalus simbolis. 104 00:06:34,420 --> 00:06:36,970 Dabar, kas yra šis žymės čia darai? 105 00:06:36,970 --> 00:06:42,780 Na, jei puslapis persikėlė iš aštuntas simbolį į devynių pobūdžio - 106 00:06:42,780 --> 00:06:46,460 todėl mes pridėti aštuonių C "kaip mūsų ankstesnių atspėti - 107 00:06:46,460 --> 00:06:51,270 tada indeksas ketina sutelkti dėmesį į paskutinis null terminatorius mūsų spėjimą 108 00:06:51,270 --> 00:06:57,990 masyvas, kuris nėra skirtas, kad iš tikrųjų būti naudojamas mūsų slaptažodžiu. 109 00:06:57,990 --> 00:07:03,530 >> Taigi, jei mes sutelktas į pastarojo null terminatorius, tada mes neradau 110 00:07:03,530 --> 00:07:07,750 slaptažodis tai galioja naudojant tik aštuonių simbolių, o tai reiškia nėra 111 00:07:07,750 --> 00:07:10,550 galiojantį slaptažodį, kad užšifruoja į nurodytą eilutę. 112 00:07:10,550 --> 00:07:13,520 Ir mes turime spausdinti, kad sakydami mes negalėjome rasti teisingą 113 00:07:13,520 --> 00:07:16,100 slaptažodį ir grįžti. 114 00:07:16,100 --> 00:07:20,280 Taigi tai while cikle ketina pakartoti per visas įmanomas eilutes. 115 00:07:20,280 --> 00:07:24,640 >> Jei randa, kad užšifruoja į Tikimasi, saugiame eilutę, jis bus 116 00:07:24,640 --> 00:07:26,190 grįžti tą slaptažodį. 117 00:07:26,190 --> 00:07:29,610 Ir tai jis neranda nieko, tada jis grįš, spausdinimo, kad 118 00:07:29,610 --> 00:07:31,910 negalėjo rasti nieko. 119 00:07:31,910 --> 00:07:39,220 Dabar, pastebėsite, kad Iteracja virš visų galimi stygos tikriausiai bus 120 00:07:39,220 --> 00:07:40,420 užtrukti. 121 00:07:40,420 --> 00:07:43,590 Leiskite pamatyti, kaip iš tikrųjų ilgai, kad užtrunka. 122 00:07:43,590 --> 00:07:47,230 >> Kurkime įtrūkimai. 123 00:07:47,230 --> 00:07:51,050 Na, oops - ji sako, neapibrėžta nuoroda į kriptoje. 124 00:07:51,050 --> 00:07:55,330 Taigi atminkite, už p nustato spec ir Taip pat vyras puslapis kriptoje, kad mes 125 00:07:55,330 --> 00:07:58,130 reikia susieti į kriptoje. 126 00:07:58,130 --> 00:08:01,130 Dabar nutylėjimą padaryti komandą nežino, kad jūs 127 00:08:01,130 --> 00:08:03,010 norite naudoti šią funkciją. 128 00:08:03,010 --> 00:08:09,680 >> Taigi galime nukopijuoti šį klientą komandą ir tiesiog pridėti prie pabaigos 129 00:08:09,680 --> 00:08:13,300 jo, susiejimas kripta. 130 00:08:13,300 --> 00:08:14,820 Dabar ji kaupia. 131 00:08:14,820 --> 00:08:23,880 Taigi tegul paleisti crack ant suteikta užšifruotos eilutė - 132 00:08:23,880 --> 00:08:25,130 taip Cezario. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Taigi, tai buvo gana greitai. 135 00:08:30,790 --> 00:08:33,230 >> Atkreipkite dėmesį, kad tai baigėsi 13. 136 00:08:33,230 --> 00:08:38,240 Na, Cezario užšifruotos slaptažodį būna, kad 13. 137 00:08:38,240 --> 00:08:41,650 Taigi pabandykime kitą slaptažodį. 138 00:08:41,650 --> 00:08:45,830 Paimkime Hirschhorn yra užkoduota slaptažodis ir pabandyti krekingo tai. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Taigi pastebėsite mes jau pasiekė trys simboliai. 141 00:08:55,110 --> 00:08:58,660 Ir mes iteravimu per visas įmanomas trijų ženklų eilutės. 142 00:08:58,660 --> 00:09:01,420 Tai reiškia, kad mes jau baigti iteravimu per visą įmanomą vieną ir 143 00:09:01,420 --> 00:09:04,660 dviejų rašmenų eilutėse. 144 00:09:04,660 --> 00:09:09,180 Dabar, atrodo, kad tai vyksta užtrukti, kol mes pasiekti 145 00:09:09,180 --> 00:09:10,580 keturių ženklų eilutės. 146 00:09:10,580 --> 00:09:14,680 Tai gali užtrukti keletą minučių. 147 00:09:14,680 --> 00:09:16,055 >> Ji neatsižvelgė keletą minučių. 148 00:09:16,055 --> 00:09:18,450 Mes ant keturių simbolių eilutes. 149 00:09:18,450 --> 00:09:22,800 Bet dabar, mes turime pakartoti per visus galimi keturių rašmenų eilutėse, kurios 150 00:09:22,800 --> 00:09:26,000 kad galėtų imtis, gal 10 minučių. 151 00:09:26,000 --> 00:09:28,720 Ir tada, kai mes pasiekti penkis charakterį stygos, turime pakartoti per visus 152 00:09:28,720 --> 00:09:31,450 iš tų, kurie gali užtrukti porą valandų. 153 00:09:31,450 --> 00:09:34,080 Ir mes turime kartoti per visas įmanomas šešių simbolių sekas, kurios 154 00:09:34,080 --> 00:09:36,560 gali užtrukti keletą dienų ir pan. 155 00:09:36,560 --> 00:09:41,380 >> Taigi ji galėtų imtis potencialiai labai ilgas laikas kartoti per visas įmanomas 156 00:09:41,380 --> 00:09:44,850 aštuonių ženklų ir mažiau stygos. 157 00:09:44,850 --> 00:09:50,600 Taigi, pastebėsite, kad tai nebūtinai labai efektyvus algoritmas rasti 158 00:09:50,600 --> 00:09:51,860 slaptažodis. 159 00:09:51,860 --> 00:09:54,540 Jūs manote, kad yra yra geresnių būdų. 160 00:09:54,540 --> 00:10:02,230 Pavyzdžiui, slaptažodis ZYX! 32AB tikriausiai nėra labai dažnas slaptažodis 161 00:10:02,230 --> 00:10:06,440 o slaptažodis 12345 yra tikriausiai daug labiau paplitęs. 162 00:10:06,440 --> 00:10:13,570 >> Taigi vienas iš būdų bando rasti slaptažodį greičiau yra tiesiog ieškoti 163 00:10:13,570 --> 00:10:15,560 ne slaptažodžiai, kurie yra labiau paplitęs. 164 00:10:15,560 --> 00:10:20,480 Taigi, pavyzdžiui, mes galime pabandyti skaityti žodžius iš žodyno ir pabandyti visus 165 00:10:20,480 --> 00:10:24,860 tie kaip mūsų slaptažodžių spėlionės žodžiai. 166 00:10:24,860 --> 00:10:29,210 Dabar, gal slaptažodis nėra taip paprasta. 167 00:10:29,210 --> 00:10:32,600 Gal vartotojo buvo šiek tiek protingas ir bandyti papildymo numerį 168 00:10:32,600 --> 00:10:34,220 žodžio pabaiga. 169 00:10:34,220 --> 00:10:37,000 >> Taigi, galbūt jų buvo slaptažodis hasło1. 170 00:10:37,000 --> 00:10:41,520 Taigi galite pabandyti iteravimu per visas žodžius į su vienu žodyną 171 00:10:41,520 --> 00:10:43,210 pridedamas prie jo pabaigos. 172 00:10:43,210 --> 00:10:47,360 Ir tada gal atlikę, kad jums pridėti du prie pabaigos. 173 00:10:47,360 --> 00:10:50,240 >> O gal vartotojas bando būti net daugiau protingas, ir jie nori, kad jų 174 00:10:50,240 --> 00:10:54,980 slaptažodis turi būti "hakeris", tačiau jie ketina pakeisti visus E-ųjų atvejus 175 00:10:54,980 --> 00:10:56,600 su trise. 176 00:10:56,600 --> 00:10:58,440 Taigi jums gali tai padaryti taip pat. 177 00:10:58,440 --> 00:11:02,100 Pakartoti per visus žodžius žodyne bet pakeisti simbolius, 178 00:11:02,100 --> 00:11:04,790 atrodo numerius su tų skaičių. 179 00:11:04,790 --> 00:11:09,670 >> Taigi šiuo būdu, galite sugauti net daugiau slaptažodžius, kurie yra gana dažni. 180 00:11:09,670 --> 00:11:14,690 Bet, galų gale, vienintelis būdas galite fiksuoti visus slaptažodžius yra brute 181 00:11:14,690 --> 00:11:17,340 priversti pakartoti per visus galimi eilutės. 182 00:11:17,340 --> 00:11:22,100 Taigi, galų gale, jums reikia pakartoti per visas eilutes iš vieno simbolio, 183 00:11:22,100 --> 00:11:28,110 aštuonių simbolių, kurie gali imtis labai ilgą laiką, bet jūs turite tai padaryti. 184 00:11:28,110 --> 00:11:30,024 >> Mano vardas yra Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Ir tai yra įtrūkimai. 186 00:11:31,425 --> 00:11:36,533