1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB Bowden: Es esmu Rob, un pieņemsim get plaisāšanu. 3 00:00:15,890 --> 00:00:19,390 Līdz ar to atcerēties no PSET spec, ka mēs ejam, lai būtu nepieciešams, lai izmantotu 4 00:00:19,390 --> 00:00:20,890 kapenes funkciju. 5 00:00:20,890 --> 00:00:26,330 Attiecībā uz cilvēka lapā, mums ir divas hash definēt _xopensource. 6 00:00:26,330 --> 00:00:28,290 Neuztraucieties par to, kāpēc mums ir nepieciešams, lai to izdarītu. 7 00:00:28,290 --> 00:00:31,550 Un arī hash ietver unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Tātad, kad tas ir no tā, pieņemsim nokļūt faktisko programmu. 9 00:00:35,920 --> 00:00:39,570 Pirmā lieta, kas mums jādara, ir pārliecināties, lietotājs ievadījis derīgu šifrēts 10 00:00:39,570 --> 00:00:41,520 parole pie komandrindas. 11 00:00:41,520 --> 00:00:46,050 Atcerieties, ka programma ir paredzēts palaist, piemēram, dot slīpsvītra kreka, un 12 00:00:46,050 --> 00:00:48,120 tad šifrētu virkni. 13 00:00:48,120 --> 00:00:52,990 >> Tāpēc šeit mēs esam pārbaudi, lai pārliecinātos, ka kas argc uz divām, ja mēs vēlamies, lai 14 00:00:52,990 --> 00:00:54,380 turpināt ar programmu. 15 00:00:54,380 --> 00:00:58,830 Ja argc ir ne divi, kas ir vai nu lietotājs nav ievadiet šifrēts 16 00:00:58,830 --> 00:01:02,560 parole pie komandrindas, vai arī tie ievadīti vairāk nekā tikai šifrētu 17 00:01:02,560 --> 00:01:05,379 parole pie komandrindas, kurā ja mēs nezinām, ko darīt ar 18 00:01:05,379 --> 00:01:07,660 komandrindas argumentus. 19 00:01:07,660 --> 00:01:11,390 >> Tātad, ja argc bija divi, mēs varam turpināt. 20 00:01:11,390 --> 00:01:14,160 Un šeit mēs esam gatavojas paziņot mainīgo šifrēta. 21 00:01:14,160 --> 00:01:17,650 Tas ir tikai gatavojas alias sākotnējo argv1 tā, ka visā šajā 22 00:01:17,650 --> 00:01:20,690 programmu, mums nav, lai izsauktu to argv1, kas tad jums ir jādomā 23 00:01:20,690 --> 00:01:22,950 par to, ko tas patiesībā nozīmē. 24 00:01:22,950 --> 00:01:27,180 >> Tātad beidzot, mēs vēlamies, lai apstiprinātu, ka šifrētu paroles lietotājs 25 00:01:27,180 --> 00:01:30,840 ieraksta varēja faktiski ir šifrētu paroli. 26 00:01:30,840 --> 00:01:35,120 Vienu vīrieti lapā kapenes, kas šifrētu paroli jābūt 13 27 00:01:35,120 --> 00:01:36,440 rakstzīmes garš. 28 00:01:36,440 --> 00:01:41,500 Šeit, ievērosiet, ka mēs hash definēta šifrētu garumu no 13. 29 00:01:41,500 --> 00:01:46,140 Tāpēc mēs esam tikai pārliecinoties, ka virknes garums šifrētu 30 00:01:46,140 --> 00:01:49,090 parole ir 13. 31 00:01:49,090 --> 00:01:52,280 >> Un, ja tā nav, mēs gribam lai izietu no programmas. 32 00:01:52,280 --> 00:01:56,470 Tātad, kad tas ir no tā, mēs varam tagad faktiski mēģināt atrast to, ko 33 00:01:56,470 --> 00:02:00,410 parole, kas deva šifrētu parole bija. 34 00:02:00,410 --> 00:02:04,870 Lūk, mēs vēlamies, lai greifers sāls no šifrētu paroli. 35 00:02:04,870 --> 00:02:08,930 Atcerieties, vienu man lapu, ka pirmās divas zīmes šifrēta 36 00:02:08,930 --> 00:02:10,590 virknes, piemēram, šeit - 37 00:02:10,590 --> 00:02:12,770 50ZPJ un tā tālāk - 38 00:02:12,770 --> 00:02:16,170 pirmās divas zīmes sniedz mums sāls, kas tika izmantots 39 00:02:16,170 --> 00:02:18,080 in Kapenes funkciju. 40 00:02:18,080 --> 00:02:21,740 >> Un šeit mēs redzam, ka sāls ir ha. 41 00:02:21,740 --> 00:02:27,610 Tāpēc mēs vēlamies, lai kopētu pirmās divas rakstzīmes, sāls garums ir hash 42 00:02:27,610 --> 00:02:30,230 definēta kā divi. 43 00:02:30,230 --> 00:02:35,970 Mums ir kopēt pirmās divas zīmes šajā masīvs, sāls. 44 00:02:35,970 --> 00:02:39,340 Ievērojiet, ka mums ir nepieciešams, sāls garumu plus viens, jo mums joprojām ir nepieciešama null 45 00:02:39,340 --> 00:02:42,440 terminators beigās mūsu sāls. 46 00:02:42,440 --> 00:02:46,940 >> Tad mēs ejam, lai paziņot šo masīvu, viesu, no to lieluma maksimālais garums plus 47 00:02:46,940 --> 00:02:51,930 viens, kur max garums ir hash definēts kā astoņi, jo maksimālais parole 48 00:02:51,930 --> 00:02:55,090 ir astoņas rakstzīmes. 49 00:02:55,090 --> 00:02:59,860 Un mēs esam gatavojas izmantot šo atkārtot pār visu iespējamo virknes, kas varētu 50 00:02:59,860 --> 00:03:01,430 ir derīgas paroles. 51 00:03:01,430 --> 00:03:07,720 Tātad, ja spēkā rakstzīmes paroli bija tikai a, b, un c, pēc tam 52 00:03:07,720 --> 00:03:14,970 mēs varētu atkārtot vairāk, b, c, aa, ba, ca, un tā tālāk, līdz brīdim, kad 53 00:03:14,970 --> 00:03:16,690 mēs redzēt cccccccc - 54 00:03:16,690 --> 00:03:19,600 astoņi C ir. 55 00:03:19,600 --> 00:03:23,620 >> Un, ja mēs ne uz leju derīgs parole, tad mums ir jāsaka, ka 56 00:03:23,620 --> 00:03:26,590 šifrētu virkni nebija derīga, lai sāktu ar. 57 00:03:26,590 --> 00:03:29,970 Tāpēc tagad, mēs sasniedzam to, kamēr 1 cilpa. 58 00:03:29,970 --> 00:03:33,100 Ievērojiet, tas nozīmē, ka tā ir bezgalīga cilpa. 59 00:03:33,100 --> 00:03:36,430 >> Paziņojums nepastāv pārtraukuma paziņojumu iekšpuses šo bezgalīgu cilpu. 60 00:03:36,430 --> 00:03:38,570 Ir tikai atgrieztos paziņojumus. 61 00:03:38,570 --> 00:03:41,210 Tāpēc mēs nekad faktiski sagaidām lai izietu cilpa. 62 00:03:41,210 --> 00:03:44,750 Mēs tikai gaidīt, lai izietu no programmas. 63 00:03:44,750 --> 00:03:48,220 Es esmu pievienojis šo drukas paziņojumu top šīs cilpas vienkārši izdrukāt 64 00:03:48,220 --> 00:03:51,790 ko mūsu pašreizējā minējums pie kāda parole. 65 00:03:51,790 --> 00:03:53,630 >> Tagad to, kas ir šī cilpa dara? 66 00:03:53,630 --> 00:03:58,330 Tas ir looping nekā visas iespējamās virknes kas varētu būt derīgi paroles. 67 00:03:58,330 --> 00:04:02,700 Pirmā lieta, ko mēs gatavojamies darīt, ir veikt mūsu pašreizējās minējums par to, ko 68 00:04:02,700 --> 00:04:03,920 parole. 69 00:04:03,920 --> 00:04:07,230 Mēs ņemšu sāls, ko mēs satvert šifrētu virkni, un mēs esam 70 00:04:07,230 --> 00:04:09,850 gatavojas, lai šifrētu minējums. 71 00:04:09,850 --> 00:04:14,760 Tas dos mums šifrētu uzminēt, ko mēs ejam, lai salīdzinātu pret 72 00:04:14,760 --> 00:04:18,810 šifrētu virkni, ka lietotājs ieraksta pie komandrindas. 73 00:04:18,810 --> 00:04:23,030 >> Ja tie ir tie paši, un tādā gadījumā stīgu salīdzināšanas atgriezīsies nulle, ja 74 00:04:23,030 --> 00:04:28,050 viņi paši, tad domāju, bija parole, kas rada šifrētu 75 00:04:28,050 --> 00:04:33,520 string, tādā gadījumā mēs varam drukāt ka mūsu paroli un atpakaļ. 76 00:04:33,520 --> 00:04:37,520 Bet, ja tie nav vienādi, ka nozīmē, ka mūsu minējums ir nepareizs. 77 00:04:37,520 --> 00:04:43,250 >> Un mēs vēlamies atkārtot, lai nākamais spēkā minējums. 78 00:04:43,250 --> 00:04:46,410 Tātad tas, ko šajā laikā cilpa mēģina darīt. 79 00:04:46,410 --> 00:04:51,760 Tas būs atkārtot mūsu minējums uz nākamo spēkā minējums. 80 00:04:51,760 --> 00:04:56,080 Ievērojiet, ka tad, kad mēs sakām, ka īpaši raksturs mūsu minējums ir 81 00:04:56,080 --> 00:05:01,770 sasniedzis max simbolu, kas izveidota šeit ir Hash definēta kā Tilde, jo 82 00:05:01,770 --> 00:05:05,710 tas ir lielākais ASCII vērtību rakstzīmju ka lietotājs var ievadīt pie 83 00:05:05,710 --> 00:05:11,210 tastatūra, kad raksturs sasniedz max simbols, tad mēs vēlamies, lai nosūtītu 84 00:05:11,210 --> 00:05:17,150 tas atpakaļ uz minimālo simbolu, kas ir telpa, atkal zemākais ASCII 85 00:05:17,150 --> 00:05:20,800 vērtību simbols, lietotājs var ievadīt pie tastatūras. 86 00:05:20,800 --> 00:05:22,940 >> Tātad, mēs esam gatavojas noteikt, ka līdz minimālajai simbolu. 87 00:05:22,940 --> 00:05:25,720 Un tad mēs ejam, lai dotos uz nākamo raksturu. 88 00:05:25,720 --> 00:05:28,730 Tātad, cik ir mūsu guesses gatavojas atkārtot? 89 00:05:28,730 --> 00:05:33,685 Nu, ja derīgie simboli ir a, b, un c, pēc tam, ja mēs sākās ar, 90 00:05:33,685 --> 00:05:36,630 tas būs atkārtot, lai b, tas būs atkārtot līdz c. 91 00:05:36,630 --> 00:05:44,360 c ir mūsu max simbols, tāpēc mēs noteikti c atpakaļ uz, minimālu simbolu. 92 00:05:44,360 --> 00:05:48,100 Un tad mēs atkārtot indeksu pie nākamās rakstzīmes. 93 00:05:48,100 --> 00:05:53,920 >> Tātad, ja sākotnējais minējums bija c, nākamais raksturs būs null 94 00:05:53,920 --> 00:05:55,560 terminators. 95 00:05:55,560 --> 00:06:00,670 Šeit lejā, ievērosiet, ka, ja raksturs ka mēs tagad gribam 96 00:06:00,670 --> 00:06:04,690 pieaugums bija null terminatora, tad mēs ejam, lai uzstādītu to uz 97 00:06:04,690 --> 00:06:06,260 Minimālais simbolu. 98 00:06:06,260 --> 00:06:11,431 Tātad, ja minējums ir c, tad mūsu Jaunā minējums būs aa. 99 00:06:11,431 --> 00:06:16,050 Un, ja mūsu sākotnējais minējums bija CCCC, tad mūsu jaunā minējums 100 00:06:16,050 --> 00:06:18,380 būs AAAAA. 101 00:06:18,380 --> 00:06:24,430 >> Tātad, ja mēs sasniedzam maksimālo virkni no konkrētā garuma, tad mēs esam 102 00:06:24,430 --> 00:06:29,090 gatavojas īstenot līdz minimumam virkni no nākamā garumu, kas 103 00:06:29,090 --> 00:06:34,420 vienkārši visi varoņi minimālais simbolu. 104 00:06:34,420 --> 00:06:36,970 Tagad to, kas ir šajā pārbaudē dara šeit? 105 00:06:36,970 --> 00:06:42,780 Nu, ja indekss pārcelts no astotās raksturs deviņu raksturs - 106 00:06:42,780 --> 00:06:46,460 tāpēc mēs pievienojam astoņas C-kā mūsu iepriekšējā guess - 107 00:06:46,460 --> 00:06:51,270 tad indekss ir gatavojas koncentrēties uz pēdējā null terminators no mūsu minējums 108 00:06:51,270 --> 00:06:57,990 masīvs, kas nav domāts, lai reāli izmantot mūsu paroli. 109 00:06:57,990 --> 00:07:03,530 >> Tātad, ja mēs esam orientēti uz šo pēdējo null terminatora, tad mēs esam nav atrasts 110 00:07:03,530 --> 00:07:07,750 Parole, kas ir derīgs, izmantojot tikai astoņas rakstzīmes, kas nozīmē, ka nav 111 00:07:07,750 --> 00:07:10,550 derīgu paroli, kas šifrē uz doto virkni. 112 00:07:10,550 --> 00:07:13,520 Un mums ir drukāt, sakot, mēs nevarējām atrast derīgs 113 00:07:13,520 --> 00:07:16,100 parole, un atgriešanās. 114 00:07:16,100 --> 00:07:20,280 Tātad tas, kamēr cilpa gatavojas atkārtot pār visu iespējamo stīgas. 115 00:07:20,280 --> 00:07:24,640 >> Ja tā konstatē kādu, kas šifrē uz Paredzams šifrētu virkni, tas būs 116 00:07:24,640 --> 00:07:26,190 atgriezties, ka parole. 117 00:07:26,190 --> 00:07:29,610 Un tā tas nav atrast kaut ko, tad tā atgriezīsies, drukāšanas, ka tā 118 00:07:29,610 --> 00:07:31,910 nevarēja atrast neko. 119 00:07:31,910 --> 00:07:39,220 Tagad, ievērosiet, ka atkārtojot pār visiem iespējamie stīgas, iespējams, gatavojas 120 00:07:39,220 --> 00:07:40,420 aizņemt laiku. 121 00:07:40,420 --> 00:07:43,590 Let 's faktiski redzēt, kā ilgi, kas notiek. 122 00:07:43,590 --> 00:07:47,230 >> Veidosim kreka. 123 00:07:47,230 --> 00:07:51,050 Nu, hmm - tā saka undefined atsauce uz kapenēm. 124 00:07:51,050 --> 00:07:55,330 Līdz ar to atcerēties, lai p komplekti spec un arī cilvēks lapa kapenes, ka mēs 125 00:07:55,330 --> 00:07:58,130 jāsaista ar kapenes. 126 00:07:58,130 --> 00:08:01,130 Tagad, noklusējuma padarīt komandu nezina, ka tu 127 00:08:01,130 --> 00:08:03,010 vēlaties izmantot šo funkciju. 128 00:08:03,010 --> 00:08:09,680 >> Tātad, pieņemsim kopēt šo klientu komandu un vienkārši pievienot uz līdz beigām 129 00:08:09,680 --> 00:08:13,300 no tā, kas savieno kapenes. 130 00:08:13,300 --> 00:08:14,820 Tagad, tas apkopo. 131 00:08:14,820 --> 00:08:23,880 Tātad, pieņemsim palaist kreka uz dota šifrētu virkni - 132 00:08:23,880 --> 00:08:25,130 tāpēc Ķeizara. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Tā, ka bija diezgan ātri. 135 00:08:30,790 --> 00:08:33,230 >> Ievērojiet, ka tas beidzās 13. 136 00:08:33,230 --> 00:08:38,240 Nu, Cēzara šifrētu paroli notiek, ir 13. 137 00:08:38,240 --> 00:08:41,650 Tāpēc pamēģināsim citu paroli. 138 00:08:41,650 --> 00:08:45,830 Paņemsim Hirschhorn ir šifrēta paroli un mēģiniet plaisāšanu to. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Tāpēc paziņojums, mēs esam jau sasnieguši trīs rakstzīmes. 141 00:08:55,110 --> 00:08:58,660 Un mēs esam atkārtojot pār visiem ir iespējams trīs rakstzīmju virknes. 142 00:08:58,660 --> 00:09:01,420 Tas nozīmē, ka mēs esam jau pabeigtu atkārtojot pār visu iespējamo vienu un 143 00:09:01,420 --> 00:09:04,660 Divi rakstzīmju virknes. 144 00:09:04,660 --> 00:09:09,180 Tagad, izskatās, ka tas būs aizņemt kādu laiku, pirms mēs sasniedzam 145 00:09:09,180 --> 00:09:10,580 četru rakstzīmju virknes. 146 00:09:10,580 --> 00:09:14,680 Tas var aizņemt pāris minūtes. 147 00:09:14,680 --> 00:09:16,055 >> Tā neņēma pāris minūtes. 148 00:09:16,055 --> 00:09:18,450 Mēs esam par četru rakstzīmju virknes. 149 00:09:18,450 --> 00:09:22,800 Bet tagad, mums ir nepieciešams atkārtot pār visiem iespējams četru rakstzīmju virknes, kas 150 00:09:22,800 --> 00:09:26,000 lai varētu veikt varbūt 10 minūtes. 151 00:09:26,000 --> 00:09:28,720 Un tad, kad mēs sasniegtu piecas raksturu stīgas, mums ir nepieciešams atkārtot pār visiem 152 00:09:28,720 --> 00:09:31,450 no tiem, kas varētu veikt pāris stundas. 153 00:09:31,450 --> 00:09:34,080 Un mums ir nepieciešams, lai atkārtot pār visiem ir iespējams Sešu simbolu virknes, kas 154 00:09:34,080 --> 00:09:36,560 var aizņemt pāris dienas, un tā tālāk. 155 00:09:36,560 --> 00:09:41,380 >> Tātad tas varētu būt potenciāli ļoti garš laiks atkārtot pār visiem ir iespējams 156 00:09:41,380 --> 00:09:44,850 astoņu rakstzīmju un mazāk stīgas. 157 00:09:44,850 --> 00:09:50,600 Tātad paziņojums, ka tas ne vienmēr ļoti efektīvs algoritms, lai atrastu 158 00:09:50,600 --> 00:09:51,860 parole. 159 00:09:51,860 --> 00:09:54,540 Jūs varētu domāt, ka Ir labāki veidi. 160 00:09:54,540 --> 00:10:02,230 Piemēram, parole ZYX! 32AB iespējams, ir ne ļoti bieži parole, 161 00:10:02,230 --> 00:10:06,440 tā kā parole 12345 ir iespējams, daudz biežāk. 162 00:10:06,440 --> 00:10:13,570 >> Tāpēc viens veids, kā mēģināt atrast paroli ātrāk ir vienkārši meklēt 163 00:10:13,570 --> 00:10:15,560 pie paroles, kas ir vairāk izplatīta. 164 00:10:15,560 --> 00:10:20,480 Tā, piemēram, mēs varam mēģināt izlasīt vārdus no vārdnīcas un izmēģināt visu 165 00:10:20,480 --> 00:10:24,860 šie vārdi kā mūsu paroli guesses. 166 00:10:24,860 --> 00:10:29,210 Tagad, varbūt parole nav tik vienkārši. 167 00:10:29,210 --> 00:10:32,600 Varbūt lietotājs ir diezgan gudrs un mēģiniet pievienojot numuru, lai 168 00:10:32,600 --> 00:10:34,220 vārda beigās. 169 00:10:34,220 --> 00:10:37,000 >> Tātad, varbūt viņu parole bija password1. 170 00:10:37,000 --> 00:10:41,520 Tātad jūs varat izmēģināt atkārtojot nekā visus vārdus , vārdnīcā ar vienu a 171 00:10:41,520 --> 00:10:43,210 pievienots beigās no tā. 172 00:10:43,210 --> 00:10:47,360 Un tad varbūt pēc tam darīt, ka jūs pievienot divas līdz beigās no tā. 173 00:10:47,360 --> 00:10:50,240 >> Vai varbūt lietotājs mēģina vēl vairāk gudrs, un viņi vēlas, lai viņu 174 00:10:50,240 --> 00:10:54,980 parole ir "hakeris", bet viņi gatavojas aizstāt visus gadījumus E s 175 00:10:54,980 --> 00:10:56,600 ar trim. 176 00:10:56,600 --> 00:10:58,440 Lai jūs varētu darīt pārāk. 177 00:10:58,440 --> 00:11:02,100 Atkārtot pār visiem vārdiem, kas vārdnīcā bet aizvietot rakstzīmes, ka 178 00:11:02,100 --> 00:11:04,790 izskatās numurus ar šiem numuriem. 179 00:11:04,790 --> 00:11:09,670 >> Tātad šādā veidā, jūs varētu nozvejas vēl vairāk paroles, kas ir diezgan bieži. 180 00:11:09,670 --> 00:11:14,690 Bet beigās, vienīgais veids, kā jūs varat uzņemt visas paroles ir necilvēks 181 00:11:14,690 --> 00:11:17,340 piespiest atkārtot pār visiem iespējams stīgas. 182 00:11:17,340 --> 00:11:22,100 Tātad galu galā, jums ir nepieciešams atkārtot pār visām stīgām no viena rakstzīmi 183 00:11:22,100 --> 00:11:28,110 astoņas zīmes, kas varētu veikt ļoti ilgu laiku, bet jums ir nepieciešams, lai to izdarītu. 184 00:11:28,110 --> 00:11:30,024 >> Mans vārds ir Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Un tas ir Crack. 186 00:11:31,425 --> 00:11:36,533