1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN: Olen Rob ja Mennään halkeilua. 3 00:00:15,890 --> 00:00:19,390 Joten muistan PSET spec että aiomme olla tarvitsematta käyttää 4 00:00:19,390 --> 00:00:20,890 kryptassa toiminto. 5 00:00:20,890 --> 00:00:26,330 Miehelle sivu, meillä on kaksi hash määritellä _xopensource. 6 00:00:26,330 --> 00:00:28,290 Älä ole huolissasi, miksi meidän täytyy tehdä. 7 00:00:28,290 --> 00:00:31,550 Ja myös hash ovat unistd.h. 8 00:00:31,550 --> 00:00:35,920 >> Joten kun se on pois tieltä, katsotaanpa päästä varsinaisen ohjelman. 9 00:00:35,920 --> 00:00:39,570 Ensimmäinen asia, meidän täytyy tehdä, on varmistaa käyttäjä kirjoittaa voimassa salattu 10 00:00:39,570 --> 00:00:41,520 salasana komentoriviltä. 11 00:00:41,520 --> 00:00:46,050 Muista, että ohjelma on tarkoitus voidaan ajaa kuin piste slash crack, ja 12 00:00:46,050 --> 00:00:48,120 sitten salattu merkkijono. 13 00:00:48,120 --> 00:00:52,990 >> Joten tässä me Varmistamme että argc kaksi, jos haluamme 14 00:00:52,990 --> 00:00:54,380 jatkaa ohjelmaa. 15 00:00:54,380 --> 00:00:58,830 Jos argc ei ole kaksi, se tarkoittaa, että joko käyttäjä ei anna salattu 16 00:00:58,830 --> 00:01:02,560 salasana komentoriviltä, ​​tai ne tuli enemmän kuin vain salattuja 17 00:01:02,560 --> 00:01:05,379 salasanan komentoriviltä, ​​jossa Jos emme tiedä mitä tehdä 18 00:01:05,379 --> 00:01:07,660 komentoriviargumentteja. 19 00:01:07,660 --> 00:01:11,390 >> Joten jos argc oli kaksi, voimme jatkaa. 20 00:01:11,390 --> 00:01:14,160 Ja tässä, me aiomme julistaa muuttuja salattu. 21 00:01:14,160 --> 00:01:17,650 Se on juuri menossa alias alkuperäisen argv1 niin, että koko tämän 22 00:01:17,650 --> 00:01:20,690 ohjelma, meillä ei ole kutsua sitä argv1, jotka sinun täytyy ajatella 23 00:01:20,690 --> 00:01:22,950 mitä se oikeastaan ​​tarkoitti. 24 00:01:22,950 --> 00:01:27,180 >> Joten lopuksi, haluamme vahvistaa, että salattu salasana käyttäjälle 25 00:01:27,180 --> 00:01:30,840 tuli olisi ylipäänsä ollut salattu salasana. 26 00:01:30,840 --> 00:01:35,120 Per mies sivu krypta, salattu salasana on oltava 13 27 00:01:35,120 --> 00:01:36,440 merkkiä pitkä. 28 00:01:36,440 --> 00:01:41,500 Täällä huomaa, että me hash määritelty salata pitkä kuin 13. 29 00:01:41,500 --> 00:01:46,140 Joten me vain varmistaa, että merkkijonon pituus salattu 30 00:01:46,140 --> 00:01:49,090 salasana on 13.. 31 00:01:49,090 --> 00:01:52,280 >> Ja jos se ei ole, haluamme Lopeta ohjelma. 32 00:01:52,280 --> 00:01:56,470 Joten kun se on pois tieltä, voimme nyt todella yrittää selvittää, mikä 33 00:01:56,470 --> 00:02:00,410 salasana, joka antoi salattu salasana oli. 34 00:02:00,410 --> 00:02:04,870 Täällä haluamme napata suolaa alkaen salattu salasana. 35 00:02:04,870 --> 00:02:08,930 Muista, per man-sivulta, että kaksi ensimmäistä merkkiä salattu 36 00:02:08,930 --> 00:02:10,590 merkkijono, kuten tässä - 37 00:02:10,590 --> 00:02:12,770 50ZPJ ja niin edelleen - 38 00:02:12,770 --> 00:02:16,170 kaksi ensimmäistä merkkiä antaa meille suola, jota on käytetty 39 00:02:16,170 --> 00:02:18,080 vuonna kryptassa toiminto. 40 00:02:18,080 --> 00:02:21,740 >> Ja tässä näemme, että suola oli ha. 41 00:02:21,740 --> 00:02:27,610 Joten haluamme kopioida kaksi ensimmäistä merkkiä, suola pituus on hash 42 00:02:27,610 --> 00:02:30,230 määritelty kaksi. 43 00:02:30,230 --> 00:02:35,970 Meidän täytyy kopioida kaksi ensimmäistä merkkiä tähän array, suola. 44 00:02:35,970 --> 00:02:39,340 Huomaa, että tarvitsemme suolaa pituus plus yksi, sillä tarvitsemme vielä null 45 00:02:39,340 --> 00:02:42,440 terminaattori lopussa suolasta. 46 00:02:42,440 --> 00:02:46,940 >> Sitten aiomme julistaa tämän array, vieras, kooltaan max pituus plus 47 00:02:46,940 --> 00:02:51,930 yksi, jossa maksimipituus on hash määritelty kahdeksan, koska suurin salasanan 48 00:02:51,930 --> 00:02:55,090 on kahdeksan merkkiä pitkä. 49 00:02:55,090 --> 00:02:59,860 Ja aiomme käyttää tätä kerrata kaikkiin mahdollisiin jouset, jotka voisivat 50 00:02:59,860 --> 00:03:01,430 voimassa salasanoja. 51 00:03:01,430 --> 00:03:07,720 Joten jos voimassa merkkiä salasanan olivat vain a, b ja c, 52 00:03:07,720 --> 00:03:14,970 me toistaa yli, b, c, aa, ba, CA, ja niin edelleen, kunnes 53 00:03:14,970 --> 00:03:16,690 saamme nähdä cccccccc - 54 00:03:16,690 --> 00:03:19,600 kahdeksan C: n. 55 00:03:19,600 --> 00:03:23,620 >> Ja jos meillä ei alas voimassa salasanan, meidän täytyy sanoa, että 56 00:03:23,620 --> 00:03:26,590 salattu merkkijono ei ollut voimassa aluksi. 57 00:03:26,590 --> 00:03:29,970 Joten nyt pääsemme tämän ajan 1 silmukka. 58 00:03:29,970 --> 00:03:33,100 Huomaa, että tarkoittaa se päättymättömään silmukkaan. 59 00:03:33,100 --> 00:03:36,430 >> Huomaa ei ole break-lause sisällä tämän päättymättömään silmukkaan. 60 00:03:36,430 --> 00:03:38,570 On vain palata lausuntoja. 61 00:03:38,570 --> 00:03:41,210 Joten emme koskaan oikeastaan ​​odottaa Poistu silmukka. 62 00:03:41,210 --> 00:03:44,750 Me vain odottaa poistua ohjelmasta. 63 00:03:44,750 --> 00:03:48,220 Olen lisännyt tätä tulosta lausuma Tämän päälle silmukan vain tulostaa 64 00:03:48,220 --> 00:03:51,790 mitä nykyinen arvaus mikä salasana on. 65 00:03:51,790 --> 00:03:53,630 >> Nyt, mitä tämä silmukka tekee? 66 00:03:53,630 --> 00:03:58,330 Se looping kaikkiin mahdollisiin jouset jotka voivat olla voimassa salasanoja. 67 00:03:58,330 --> 00:04:02,700 Ensimmäinen asia, aiomme tehdä, on pidä nykyistä arvata, mitä 68 00:04:02,700 --> 00:04:03,920 salasana on. 69 00:04:03,920 --> 00:04:07,230 Otamme suola että me tarttui salattu merkkijono, ja olemme 70 00:04:07,230 --> 00:04:09,850 menossa salaa arvata. 71 00:04:09,850 --> 00:04:14,760 Tämä antaa meille salattu arvaus, jonka aiomme verrataan 72 00:04:14,760 --> 00:04:18,810 salattu merkkijono, joka käyttäjän tuli komentoriviltä. 73 00:04:18,810 --> 00:04:23,030 >> Jos ne ovat samat, jolloin string verrattavissa palaa nolla, jos 74 00:04:23,030 --> 00:04:28,050 Ne ovat samoja, sitten kai oli salasana, joka syntyy salattu 75 00:04:28,050 --> 00:04:33,520 merkkijono, jolloin voimme tulostaa että meidän salasanan ja palaa. 76 00:04:33,520 --> 00:04:37,520 Mutta jos ne eivät ole samoja, että tarkoittaa meidän arvaus oli virheellinen. 77 00:04:37,520 --> 00:04:43,250 >> Ja haluamme kerrata sen Seuraava voimassa arvaus. 78 00:04:43,250 --> 00:04:46,410 Niin, että mitä tämä taas silmukka yrittää tehdä. 79 00:04:46,410 --> 00:04:51,760 Se tulee toistaa meidän arvaus seuraavaan voimassa arvaus. 80 00:04:51,760 --> 00:04:56,080 Huomaa, että kun sanomme, että erityisluonnetta meidän arvaus on 81 00:04:56,080 --> 00:05:01,770 saavutti max symboli, joka täällä on hash määritellään tilde, koska 82 00:05:01,770 --> 00:05:05,710 se suurin ASCII-arvon merkki että käyttäjä voi syöttää at 83 00:05:05,710 --> 00:05:11,210 näppäimistö, kun merkki saavuttaa max symboli, niin haluamme lähettää 84 00:05:11,210 --> 00:05:17,150 takaisin vähintään symboli, joka on tila, jälleen pienin ASCII 85 00:05:17,150 --> 00:05:20,800 arvon symboli, joka käyttäjä voi kirjoita näppäimistöllä. 86 00:05:20,800 --> 00:05:22,940 >> Joten aiomme asettaa, että välttämättömään symboli. 87 00:05:22,940 --> 00:05:25,720 Ja sitten me aiomme mennä seuraavaan luonnetta. 88 00:05:25,720 --> 00:05:28,730 Joten miten on meidän arvauksia menossa kerrata? 89 00:05:28,730 --> 00:05:33,685 No, jos voimassa merkit ovat a, b, ja c, jos aloitimme, 90 00:05:33,685 --> 00:05:36,630 se tulee kerrata ja b, se tulee kerrata-c. 91 00:05:36,630 --> 00:05:44,360 c on meidän max symboli, niin me asetetaan c takaisin, vähintään symboli. 92 00:05:44,360 --> 00:05:48,100 Ja sitten me kerrata indeksi seuraavaan merkkiin. 93 00:05:48,100 --> 00:05:53,920 >> Joten jos alkuperäinen arvaus oli c, seuraava merkki tulee olemaan null 94 00:05:53,920 --> 00:05:55,560 terminaattori. 95 00:05:55,560 --> 00:06:00,670 Täällä, huomaa, että jos merkki että haluamme nyt 96 00:06:00,670 --> 00:06:04,690 lisäys oli null terminaattori, Sitten aiomme asettaa sen 97 00:06:04,690 --> 00:06:06,260 vähintään symboli. 98 00:06:06,260 --> 00:06:11,431 Joten jos arvaus oli c, niin meidän Uusi arvaus tulee olemaan aa. 99 00:06:11,431 --> 00:06:16,050 Ja jos meidän alkuperäinen arvaus oli cccc, sitten uusi arvaus 100 00:06:16,050 --> 00:06:18,380 tulee olemaan aaaaa. 101 00:06:18,380 --> 00:06:24,430 >> Joten aina kun pääsemme suurin merkkijono tietyn pituuden, niin me olemme 102 00:06:24,430 --> 00:06:29,090 aikoo toteuttaa mahdollisimman pieneksi merkkijono Seuraavan pituus, joka tulee 103 00:06:29,090 --> 00:06:34,420 vain olla kaikkien merkkien vähintään symboli. 104 00:06:34,420 --> 00:06:36,970 Nyt, mitä tämä tarkistus tekee täällä? 105 00:06:36,970 --> 00:06:42,780 No, jos indeksi siirtyi kahdeksas merkin yhdeksän merkin - 106 00:06:42,780 --> 00:06:46,460 joten lisäämme kahdeksan c luvulla Meidän edellinen arvata - 107 00:06:46,460 --> 00:06:51,270 sitten indeksi on menossa keskittyä viime null terminaattori meidän arvaus 108 00:06:51,270 --> 00:06:57,990 array, joka ei ole tarkoitettu itse käyttää meidän salasanaa. 109 00:06:57,990 --> 00:07:03,530 >> Joten jos olemme keskittyneet että viime null terminaattori, niin emme ole löytäneet 110 00:07:03,530 --> 00:07:07,750 salasanan, joka on voimassa käyttämällä vain kahdeksan merkkiä, mikä tarkoittaa, ettei 111 00:07:07,750 --> 00:07:10,550 kelvollinen salasana, joka salaa on annettu merkkijono. 112 00:07:10,550 --> 00:07:13,520 Ja meidän täytyy tulostaa, että sanonta emme löytäneet voimassa 113 00:07:13,520 --> 00:07:16,100 salasanan, ja palata. 114 00:07:16,100 --> 00:07:20,280 Joten tämä kun silmukka on menossa kerrata kaikkiin mahdollisiin jouset. 115 00:07:20,280 --> 00:07:24,640 >> Jos se löytää joka salaa sen odotetaan salattu merkkijono, se tulee 116 00:07:24,640 --> 00:07:26,190 palata, että salasanan. 117 00:07:26,190 --> 00:07:29,610 Ja se ei löydä mitään, niin se palaa, tulostaa se 118 00:07:29,610 --> 00:07:31,910 ei löytänyt mitään. 119 00:07:31,910 --> 00:07:39,220 Nyt, huomaa, että iteroimalla kaikkien mahdollista jouset on todennäköisesti menossa 120 00:07:39,220 --> 00:07:40,420 kestää jonkin aikaa. 121 00:07:40,420 --> 00:07:43,590 Katsotaanpa itse nähdä, miten pitkään, että kestää. 122 00:07:43,590 --> 00:07:47,230 >> Tehdään halki. 123 00:07:47,230 --> 00:07:51,050 No, hups - se sanoo määrittelemätön viittaus kryptassa. 124 00:07:51,050 --> 00:07:55,330 Muista siis, että p asettaa spec ja myös man-sivulta kryptassa, että me 125 00:07:55,330 --> 00:07:58,130 täytyy yhdistettäisiin kryptassa. 126 00:07:58,130 --> 00:08:01,130 Nyt oletuksena tehdä komennolla ei tiedä, että olet 127 00:08:01,130 --> 00:08:03,010 halua käyttää tätä toimintoa. 128 00:08:03,010 --> 00:08:09,680 >> Joten kopioida tämän asiakkaan komento ja vain lisätä loppuun 129 00:08:09,680 --> 00:08:13,300 se, joka yhdistää krypta. 130 00:08:13,300 --> 00:08:14,820 Nyt se kokoaa. 131 00:08:14,820 --> 00:08:23,880 Joten ajaa halki tietyllä salattu merkkijono - 132 00:08:23,880 --> 00:08:25,130 niin Caesarin. 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 Joten se oli melko nopeasti. 135 00:08:30,790 --> 00:08:33,230 >> Huomaa, että tämä päättyi 13. 136 00:08:33,230 --> 00:08:38,240 No, keisarin salattu salasana sattuu olemaan 13. 137 00:08:38,240 --> 00:08:41,650 Joten yritä muuta salasanaa. 138 00:08:41,650 --> 00:08:45,830 Otetaanpa Hirschhorn n salattu salasana ja yritä halkeilua että. 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> Joten huomaat olemme jo saavuttaneet kolme merkkiä. 141 00:08:55,110 --> 00:08:58,660 Ja me iteroimalla kaikkiin mahdollisiin kolmen merkkijonot. 142 00:08:58,660 --> 00:09:01,420 Se tarkoittaa, että jo valmiiksi iteroimalla kaikkiin mahdollisiin yksi ja 143 00:09:01,420 --> 00:09:04,660 kaksi merkkijonoa. 144 00:09:04,660 --> 00:09:09,180 Nyt näyttää siltä, ​​että tämä tulee kestää jonkin aikaa ennen kuin pääsemme 145 00:09:09,180 --> 00:09:10,580 neljä-merkkijonojen. 146 00:09:10,580 --> 00:09:14,680 Se saattaa kestää pari minuuttia. 147 00:09:14,680 --> 00:09:16,055 >> Se ei ota pari minuuttia. 148 00:09:16,055 --> 00:09:18,450 Olemme neljän merkkijonojen. 149 00:09:18,450 --> 00:09:22,800 Mutta nyt meidän täytyy kerrata kaikkia mahdollista, neljä-merkkijonojen, joka 150 00:09:22,800 --> 00:09:26,000 että saattaa kestää ehkä 10 minuuttia. 151 00:09:26,000 --> 00:09:28,720 Ja sitten kun pääsemme viiden merkin jouset, meidän täytyy kerrata kaikkia 152 00:09:28,720 --> 00:09:31,450 niistä, jotka voivat kestää pari tuntia. 153 00:09:31,450 --> 00:09:34,080 Ja meidän täytyy kerrata kaikkia mahdollisia kuuden merkkijonot, jotka 154 00:09:34,080 --> 00:09:36,560 saattaa kestää pari päivää ja niin edelleen. 155 00:09:36,560 --> 00:09:41,380 >> Joten se voisi olla erittäin pitkä aika kerrata kaikkiin mahdollisiin 156 00:09:41,380 --> 00:09:44,850 kahdeksan merkin ja vähemmän jousille. 157 00:09:44,850 --> 00:09:50,600 Niin huomaa, että tämä ei välttämättä erittäin tehokas algoritmi löytää 158 00:09:50,600 --> 00:09:51,860 salasanan. 159 00:09:51,860 --> 00:09:54,540 Voisi ajatella, että siellä olemassa parempia tapoja. 160 00:09:54,540 --> 00:10:02,230 Esimerkiksi salasana zyx! 32ab luultavasti ei ole kovin yleinen salasanan, 161 00:10:02,230 --> 00:10:06,440 taas salasanan 12345 luultavasti paljon yleisempää. 162 00:10:06,440 --> 00:10:13,570 >> Joten yksi tapa yrittää löytää salasanan nopeammin on vain katsoa 163 00:10:13,570 --> 00:10:15,560 klo salasanoja, jotka ovat yleisempiä. 164 00:10:15,560 --> 00:10:20,480 Niinpä esimerkiksi, voimme yrittää lukea sanoja alkaen sanakirja ja kokeilla kaikkia 165 00:10:20,480 --> 00:10:24,860 nämä sanat meidän salasanan arvauksia. 166 00:10:24,860 --> 00:10:29,210 Nyt, ehkä salasanan ei ole näin yksinkertainen. 167 00:10:29,210 --> 00:10:32,600 Ehkä käyttäjä oli jonkin verran fiksu ja kokeile lisätä numeron 168 00:10:32,600 --> 00:10:34,220 sanan lopussa. 169 00:10:34,220 --> 00:10:37,000 >> Joten ehkä niiden salasana oli password1. 170 00:10:37,000 --> 00:10:41,520 Joten voit kokeilla iteroimalla kaikkia sanoja in sanakirja yhden 171 00:10:41,520 --> 00:10:43,210 liitteenä lopussa. 172 00:10:43,210 --> 00:10:47,360 Ja sitten ehkä kun tekee, että sinun liittää kaksi lopussa. 173 00:10:47,360 --> 00:10:50,240 >> Tai ehkä käyttäjä yrittää olla jopa viisaampi, ja he haluavat 174 00:10:50,240 --> 00:10:54,980 salasana on "hakkeri", mutta ne ovat aikoo korvata kaikki E: n 175 00:10:54,980 --> 00:10:56,600 kanssa kolmosta. 176 00:10:56,600 --> 00:10:58,440 Joten voi tehdä tämän myös. 177 00:10:58,440 --> 00:11:02,100 Toistaa kaikkia sanoja, mutta vaihda merkkejä 178 00:11:02,100 --> 00:11:04,790 näyttää numerot ne numerot. 179 00:11:04,790 --> 00:11:09,670 >> Joten tällä tavalla, saatat saalis vieläkin salasanoja, jotka ovat melko yleisiä. 180 00:11:09,670 --> 00:11:14,690 Mutta loppujen lopuksi, ainoa tapa tallentaa kaikki salasanat on raakaa 181 00:11:14,690 --> 00:11:17,340 pakottaa kerrata kaikkia mahdollista jouset. 182 00:11:17,340 --> 00:11:22,100 Joten lopulta, sinun täytyy kerrata kaikkia merkkijonoja yhden merkin 183 00:11:22,100 --> 00:11:28,110 kahdeksan merkkiä, joka voi kestää hyvin pitkään, mutta sinun täytyy tehdä se. 184 00:11:28,110 --> 00:11:30,024 >> Nimeni on Rob Bowden. 185 00:11:30,024 --> 00:11:31,425 Ja tämä on Crack. 186 00:11:31,425 --> 00:11:36,533