1 00:00:00,000 --> 00:00:13,000 2 00:00:13,000 --> 00:00:15,890 >> ROB BOWDEN:私はロブだし、 クラッキングましょう。 3 00:00:15,890 --> 00:00:19,390 だからPSETスペックから覚えている 私たちは、使用する必要があることになるだろう 4 00:00:19,390 --> 00:00:20,890 暗号化機能。 5 00:00:20,890 --> 00:00:26,330 manページでは、我々は2つ​​を持っている ハッシュ_xopensource定義。 6 00:00:26,330 --> 00:00:28,290 なぜ心配しないでください 我々はそれを行う必要があります。 7 00:00:28,290 --> 00:00:31,550 また、ハッシュunistd.hが含まれています。 8 00:00:31,550 --> 00:00:35,920 >> だから一度方法のうちだ、してみましょう 実際のプログラムを取得する。 9 00:00:35,920 --> 00:00:39,570 私たちが行う必要がある最初の事は確認している ユーザは、有効な暗号化に入った 10 00:00:39,570 --> 00:00:41,520 コマンドラインでパスワードを入力します。 11 00:00:41,520 --> 00:00:46,050 プログラムが想定されていることを忘れないでください ドットスラッシュ亀裂のように実行される、と 12 00:00:46,050 --> 00:00:48,120 その後、暗号化された文字列。 13 00:00:48,120 --> 00:00:52,990 >> そこでここでは、確認するためにチェックしている その2へのargc我々はしたい場合 14 00:00:52,990 --> 00:00:54,380 プログラムを続行。 15 00:00:54,380 --> 00:00:58,830 のargcが2でない場合、それはどちらかを意味します ユーザーが暗号化されたが入力されていません 16 00:00:58,830 --> 00:01:02,560 コマンドラインでパスワード、またはそれら 単に暗号化された以上のものを入力 17 00:01:02,560 --> 00:01:05,379 でコマンドラインでパスワード、 我々が何をすべきか分からない場合 18 00:01:05,379 --> 00:01:07,660 コマンドライン引数。 19 00:01:07,660 --> 00:01:11,390 >> argcは、2つあった場合そこで、我々は継続することができます。 20 00:01:11,390 --> 00:01:14,160 そしてここで、我々は宣言するつもりだ 暗号化された変数。 21 00:01:14,160 --> 00:01:17,650 それはちょうどエイリアスにオリジナルを起こっている この全体argv1よう 22 00:01:17,650 --> 00:01:20,690 プログラムは、我々はそれargv1呼び出す必要はありません その次にあなたが考えなければならない 23 00:01:20,690 --> 00:01:22,950 それが実際に何を意味するのかについて。 24 00:01:22,950 --> 00:01:27,180 >> だから最終的に、我々はそれを検証したい 暗号化されたパスワードユーザー 25 00:01:27,180 --> 00:01:30,840 入力した実際にあったかもしれない 暗号化されたパスワード。 26 00:01:30,840 --> 00:01:35,120 陰窩のmanページあたりの、 暗号化されたパスワードは13でなければなりません 27 00:01:35,120 --> 00:01:36,440 長い文字。 28 00:01:36,440 --> 00:01:41,500 ここまで、我々はハッシュ定義されていることがわかり 13として長さを暗号化します。 29 00:01:41,500 --> 00:01:46,140 だから我々は単にことを確認しています 暗号化された文字列の長さ 30 00:01:46,140 --> 00:01:49,090 パスワードは13です。 31 00:01:49,090 --> 00:01:52,280 >> そうでないならば、我々はしたい プログラムを終了します。 32 00:01:52,280 --> 00:01:56,470 だから一度方法のうちだ、我々はできる 今、実際に何を探してみる 33 00:01:56,470 --> 00:02:00,410 暗号化されたを与えたパスワード パスワードがあった。 34 00:02:00,410 --> 00:02:04,870 ここでは、塩をつかむしたい 暗号化されたパスワードから。 35 00:02:04,870 --> 00:02:08,930 、manページあたりの、覚えている 暗号化されたの最初の2文字 36 00:02:08,930 --> 00:02:10,590 ここのような文字列、 - 37 00:02:10,590 --> 00:02:12,770 50ZPJのように - 38 00:02:12,770 --> 00:02:16,170 最初の2文字は与える 私たちを使用した塩 39 00:02:16,170 --> 00:02:18,080 暗号化機能である。 40 00:02:18,080 --> 00:02:21,740 >> そしてここで、我々は塩がヘクタールだったことがわかります。 41 00:02:21,740 --> 00:02:27,610 だから私たちは、最初の2つをコピーしたい 文字、ハッシュされて塩の長さ 42 00:02:27,610 --> 00:02:30,230 2として定義されます。 43 00:02:30,230 --> 00:02:35,970 我々は最初の2文字をコピーする必要が この配列に、塩。 44 00:02:35,970 --> 00:02:39,340 我々はプラス塩の長さが必要なことに注意してください 我々はまだ、nullを必要とするので1、 45 00:02:39,340 --> 00:02:42,440 我々の塩の終わりにターミネータ。 46 00:02:42,440 --> 00:02:46,940 >> 次に我々は、この配列を宣言するつもりだ サイズ最大長のゲスト、プラス 47 00:02:46,940 --> 00:02:51,930 最大長が定義されたハッシュである1、 8のように、最大​​のパスワードから 48 00:02:51,930 --> 00:02:55,090 8文字の長さ。 49 00:02:55,090 --> 00:02:59,860 そして我々は反復するためにこれを使用するつもりだ 可能性のあるすべての文字列の上に 50 00:02:59,860 --> 00:03:01,430 有効なパスワードである。 51 00:03:01,430 --> 00:03:07,720 もしそうであれば、パスワードに有効な文字 その後、ちょうど、a、b、およびcであった 52 00:03:07,720 --> 00:03:14,970 我々は、A、B、C、を反復でしょう AA、BA、CA、というように、時まで 53 00:03:14,970 --> 00:03:16,690 我々はCCCCCCCC見ることを得る - 54 00:03:16,690 --> 00:03:19,600 8 Cの。 55 00:03:19,600 --> 00:03:23,620 >> そして、我々は有効なダウン持っていなければ 、その後、我々はそれを言うためにパスワードを必要とする 56 00:03:23,620 --> 00:03:26,590 暗号化された文字列ではありませんでした で始まるのは有効。 57 00:03:26,590 --> 00:03:29,970 だから今、私たちは1ループしながら、これを達する。 58 00:03:29,970 --> 00:03:33,100 それが意味することに注意してください 無限ループ。 59 00:03:33,100 --> 00:03:36,430 >> ないbreak文が存在しないに注意してください この無限ループの内側。 60 00:03:36,430 --> 00:03:38,570 文だけを返しています。 61 00:03:38,570 --> 00:03:41,210 だから私たちは、実際には期待することはありません ループを終了します。 62 00:03:41,210 --> 00:03:44,750 我々は唯一のプログラムを終了することを期待しています。 63 00:03:44,750 --> 00:03:48,220 私は、このprint文を追加しました ただプリントアウトするために、このループの先頭 64 00:03:48,220 --> 00:03:51,790 何を私たちの現在の推測で 何のパスワードです。 65 00:03:51,790 --> 00:03:53,630 >> さて、このループは何をやっている? 66 00:03:53,630 --> 00:03:58,330 これは、すべての可能性のある文字列をループだ それは有効なパスワードである可能性があります。 67 00:03:58,330 --> 00:04:02,700 私たちがやろうとしている最初の事はある 何のために私たちの現在の推測を取る 68 00:04:02,700 --> 00:04:03,920 パスワードです。 69 00:04:03,920 --> 00:04:07,230 我々はからつかんでいる塩を取るよ 暗号化された文字列、そして我々はしている 70 00:04:07,230 --> 00:04:09,850 推測を暗号化するつもり。 71 00:04:09,850 --> 00:04:14,760 これは、私たちに暗号化された推測を与える 我々はと比較するつもりどの 72 00:04:14,760 --> 00:04:18,810 暗号化された文字列、そのユーザ コマンドラインで入力。 73 00:04:18,810 --> 00:04:23,030 >> 彼らは、その場合には、同じである場合 場合に匹敵する文字列は、ゼロを返します 74 00:04:23,030 --> 00:04:28,050 それらが同じなら、その後だったと思います 暗号化されて生成されたパスワード 75 00:04:28,050 --> 00:04:33,520 我々は印刷することができ、その場合には文字列、 当社のパスワードとリターンとしてその。 76 00:04:33,520 --> 00:04:37,520 しかし、彼らが同じでないならば、その 私たちの推測が間違っていたことを意味します。 77 00:04:37,520 --> 00:04:43,250 >> そして、我々に反復したい 次の有効な推測。 78 00:04:43,250 --> 00:04:46,410 だから何この一方 ループは、やろうとしている。 79 00:04:46,410 --> 00:04:51,760 それは私たちの推測を反復するために起こっている 次の有効な推測する。 80 00:04:51,760 --> 00:04:56,080 我々がそれを言うときということに注意してください 我々の推測で特定の文字が持って 81 00:04:56,080 --> 00:05:01,770 ここまでの最大シンボルに達し チルダとして定義されたハッシュがあるため、ある 82 00:05:01,770 --> 00:05:05,710 それが最大のASCII値の文字です ユーザーがで入力できる 83 00:05:05,710 --> 00:05:11,210 文字に達するキーボード、 最大シンボルは、次に我々は送信したい 84 00:05:11,210 --> 00:05:17,150 それは、最低限のシンボルにバックアップしている 再び、最低ASCII空間である 85 00:05:17,150 --> 00:05:20,800 ユーザーができる値のシンボル キーボードで入力します。 86 00:05:20,800 --> 00:05:22,940 >> だから我々はそれを設定するつもりだ 最小シンボルに。 87 00:05:22,940 --> 00:05:25,720 そして、我々は行くつもりです 次の文字に上。 88 00:05:25,720 --> 00:05:28,730 それでは、どのように我々の推測です 反復するつもり? 89 00:05:28,730 --> 00:05:33,685 まあ、有効な文字は、A、Bであれば cは、次に我々は、で開始した場合 90 00:05:33,685 --> 00:05:36,630 それがBに反復でしょ、それがよ Cに反復。 91 00:05:36,630 --> 00:05:44,360 Cは、私たちの最大のシンボルなので、セットします に戻ってC、最小シンボル。 92 00:05:44,360 --> 00:05:48,100 そして、我々は、インデックスを反復します 次の文字へ。 93 00:05:48,100 --> 00:05:53,920 >> オリジナルの推測では、次のCだったのであれば 文字はNULLであることを行っている 94 00:05:53,920 --> 00:05:55,560 ターミネータ。 95 00:05:55,560 --> 00:06:00,670 ダウンここで、文字であればことに気づく 我々は今、したいこと 96 00:06:00,670 --> 00:06:04,690 増分は、ヌルターミネータだった 次に我々はそれを設定するつもりだ 97 00:06:04,690 --> 00:06:06,260 最小シンボル。 98 00:06:06,260 --> 00:06:11,431 推測では、その後、Cだったのであれば私たちの 新たな推測では、AAになるだろう。 99 00:06:11,431 --> 00:06:16,050 そして、私たちのオリジナルの推測があった場合 その後CCCC、私たちの新しい推測 100 00:06:16,050 --> 00:06:18,380 AAAAAになるだろう。 101 00:06:18,380 --> 00:06:24,430 >> だからいつでも私たちは最大の文字列を達する 与えられた長さのもので、我々はしている 102 00:06:24,430 --> 00:06:29,090 最小の文字列に実装しようとし 次の長さの、その意志 103 00:06:29,090 --> 00:06:34,420 ただすべての文字のこと 最小シンボル。 104 00:06:34,420 --> 00:06:36,970 さて、このチェックはここで何をやっている? 105 00:06:36,970 --> 00:06:42,780 まあ、インデックスは8位から移動した場合 9文字までの文字 - 106 00:06:42,780 --> 00:06:46,460 従って我々は8、Cのようにを追加 我々の以前の推測 - 107 00:06:46,460 --> 00:06:51,270 その後、インデックスはに集中しようとしている 我々の推測の最後のヌルターミネータ 108 00:06:51,270 --> 00:06:57,990 実際には意図されていない配列、 我々のパスワードで使用される。 109 00:06:57,990 --> 00:07:03,530 >> 我々は、その最後のヌルに焦点を当てているのであれば ターミネータは、次に我々は発見していない 110 00:07:03,530 --> 00:07:07,750 わずか8を使用して、有効なパスワード 存在しないことを意味した文字、 111 00:07:07,750 --> 00:07:10,550 暗号化の有効なパスワード 与えられた文字列に。 112 00:07:10,550 --> 00:07:13,520 と我々は言って、それを印刷する必要があり 我々は有効なを見つけることができなかった 113 00:07:13,520 --> 00:07:16,100 パスワード、および復帰。 114 00:07:16,100 --> 00:07:20,280 したがって、このwhileループは反復しようとしている すべての可能な文字列の上に。 115 00:07:20,280 --> 00:07:24,640 >> それが見つかった場合は、任意に暗号化している 予想される暗号化された文字列、それがよ 116 00:07:24,640 --> 00:07:26,190 そのパスワードを返します。 117 00:07:26,190 --> 00:07:29,610 そしてそれは、それは、その後、何かを見つけることはありません それは、印刷、戻ります 118 00:07:29,610 --> 00:07:31,910 何かを見つけることができませんでした。 119 00:07:31,910 --> 00:07:39,220 さて、すべての反復処理がわかり 可能性のある文字列は、おそらくに起こっている 120 00:07:39,220 --> 00:07:40,420 しばらく時間がかかる。 121 00:07:40,420 --> 00:07:43,590 実際にどのように見てみましょう 長いことかかります。 122 00:07:43,590 --> 00:07:47,230 >> 亀裂を作ってみましょう。 123 00:07:47,230 --> 00:07:51,050 まあ、おっと - それは未定義と言う 地下室への参照。 124 00:07:51,050 --> 00:07:55,330 pは仕様を設定し、ためにそう、覚えて 私たちはその地下室にもmanページ 125 00:07:55,330 --> 00:07:58,130 地下室にリンクする必要があります。 126 00:07:58,130 --> 00:08:01,130 さて、デフォルトではmakeコマンドを あなたことを知らない 127 00:08:01,130 --> 00:08:03,010 その機能を使用したい。 128 00:08:03,010 --> 00:08:09,680 >> それでは、このクライアントのコマンドをコピーしてみましょう そして終了間際にアドオン 129 00:08:09,680 --> 00:08:13,300 それを、地下を結ぶ。 130 00:08:13,300 --> 00:08:14,820 さて、それがコンパイルされます。 131 00:08:14,820 --> 00:08:23,880 だから、与えられた上でクラックを実行してみましょう 暗号化された文字列 - 132 00:08:23,880 --> 00:08:25,130 シーザーのよう。 133 00:08:25,130 --> 00:08:28,690 134 00:08:28,690 --> 00:08:30,790 だからかなり速かった。 135 00:08:30,790 --> 00:08:33,230 >> これは13日に終了したことに注意してください。 136 00:08:33,230 --> 00:08:38,240 まあ、シーザーの暗号化されたパスワード 13であることを起こる。 137 00:08:38,240 --> 00:08:41,650 それでは、別のパスワードを試してみましょう。 138 00:08:41,650 --> 00:08:45,830 のは、ハーシュホーンの暗号化されてみましょう パスワードとことをクラッキングしてみてください。 139 00:08:45,830 --> 00:08:51,750 140 00:08:51,750 --> 00:08:55,110 >> だから我々はすでに達した気付く 3文字。 141 00:08:55,110 --> 00:08:58,660 そして我々はすべての可能な反復処理している 3文字の文字列。 142 00:08:58,660 --> 00:09:01,420 それは我々がすでに終了したことを意味 可能性のあるすべてのものを繰り返し処理し、 143 00:09:01,420 --> 00:09:04,660 2つの文字列。 144 00:09:04,660 --> 00:09:09,180 さて、それは次のようになりますがに行っている 私たちが到達する前にしばらく時間がかかる 145 00:09:09,180 --> 00:09:10,580 4文字の文字列。 146 00:09:10,580 --> 00:09:14,680 それは数分かかる場合があります。 147 00:09:14,680 --> 00:09:16,055 >> それは数分かかりませんでした。 148 00:09:16,055 --> 00:09:18,450 私たちは、4文字の文字列にしている。 149 00:09:18,450 --> 00:09:22,800 しかし、今、我々はすべてを反復する必要があります 可能な4文字の文字列で、その 150 00:09:22,800 --> 00:09:26,000 それは多分10分かかることがあります。 151 00:09:26,000 --> 00:09:28,720 そして、我々は、5つの文字に到達したとき 文字列は、我々はすべてを反復する必要があります 152 00:09:28,720 --> 00:09:31,450 それらの、どのかもしれない カップル時間かかる。 153 00:09:31,450 --> 00:09:34,080 そして我々はすべての可能なを反復する必要があります 6文字の文字列、どの 154 00:09:34,080 --> 00:09:36,560 カップル日かかるとそうかもしれません。 155 00:09:36,560 --> 00:09:41,380 >> だから、非常に長くかかる可能性があり、潜在的 可能なすべてを反復する時間 156 00:09:41,380 --> 00:09:44,850 8文字より少ない文字列。 157 00:09:44,850 --> 00:09:50,600 だから、これは必ずしもされていないことに気付く 発見のための非常に効率的なアルゴリズム 158 00:09:50,600 --> 00:09:51,860 パスワード。 159 00:09:51,860 --> 00:09:54,540 あなたがそこにいると思うかもしれない より良い方法があります。 160 00:09:54,540 --> 00:10:02,230 たとえば、パスワードZYX!32ab おそらく、非常に一般的なパスワードではありません 161 00:10:02,230 --> 00:10:06,440 12345パスワードがあるのに対し おそらくより多くの一般的な。 162 00:10:06,440 --> 00:10:13,570 >> パスワードを見つけようとするのので、1つの方法 より迅速に見ているだけである 163 00:10:13,570 --> 00:10:15,560 より一般的なパスワードで。 164 00:10:15,560 --> 00:10:20,480 だから例えば、私たちは言葉を読むために試すことができます 辞書からのすべてを試す 165 00:10:20,480 --> 00:10:24,860 当社のパスワード推測としてそれらの単語。 166 00:10:24,860 --> 00:10:29,210 さて、多分パスワード それほど単純ではありません。 167 00:10:29,210 --> 00:10:32,600 多分ユーザーはやや巧妙だった とに番号を付加してみてください 168 00:10:32,600 --> 00:10:34,220 単語の終わり。 169 00:10:34,220 --> 00:10:37,000 >> だから多分自分のパスワードはパスワード1だった。 170 00:10:37,000 --> 00:10:41,520 だから、すべての単語を反復処理しようとすることができ いずれかの辞書で 171 00:10:41,520 --> 00:10:43,210 それの最後に追加。 172 00:10:43,210 --> 00:10:47,360 そして多分それをやったら、よ それの最後に2を追加します。 173 00:10:47,360 --> 00:10:50,240 >> それともユーザーが偶数となるようにしようとしています より賢い、と彼らはしたい 174 00:10:50,240 --> 00:10:54,980 パスワードは、 "ハッカー"であるが、彼らはしている E社のすべてのインスタンスを置き換えるつもり 175 00:10:54,980 --> 00:10:56,600 スリーと。 176 00:10:56,600 --> 00:10:58,440 だから、あなたもこれを行うことができます。 177 00:10:58,440 --> 00:11:02,100 辞書ですべての単語を反復 しかし、その文字を置き換える 178 00:11:02,100 --> 00:11:04,790 これらの数字と数字のように見える。 179 00:11:04,790 --> 00:11:09,670 >> この方法だから、あなたはさらに多くをキャッチかもしれない かなり共通しているパスワード。 180 00:11:09,670 --> 00:11:14,690 しかし、最終的には、唯一の方法は、次のことができます すべてのパスワードをキャプチャするには、ブルートにある 181 00:11:14,690 --> 00:11:17,340 すべてイテレート強制 可能性のある文字列。 182 00:11:17,340 --> 00:11:22,100 だから最終的には、反復する必要がありますか 一文字からのすべての文字列の上に 183 00:11:22,100 --> 00:11:28,110 かかることがあります8文字、 非常に長い時間が、あなたはそれを行う必要があります。 184 00:11:28,110 --> 00:11:30,024 >> 私の名前はロブボーデンです。 185 00:11:30,024 --> 00:11:31,425 そして、これはクラックです。 186 00:11:31,425 --> 00:11:36,533