>> ROB BOWDEN：私はロブだし、 クラッキングましょう。
だからPSETスペックから覚えている 私たちは、使用する必要があることになるだろう
暗号化機能。
manページでは、我々は2つ​​を持っている ハッシュ_xopensource定義。
なぜ心配しないでください 我々はそれを行う必要があります。
また、ハッシュunistd.hが含まれています。
>> だから一度方法のうちだ、してみましょう 実際のプログラムを取得する。
私たちが行う必要がある最初の事は確認している ユーザは、有効な暗号化に入った
コマンドラインでパスワードを入力します。
プログラムが想定されていることを忘れないでください ドットスラッシュ亀裂のように実行される、と
その後、暗号化された文字列。
>> そこでここでは、確認するためにチェックしている その2へのargc我々はしたい場合
プログラムを続行。
のargcが2でない場合、それはどちらかを意味します ユーザーが暗号化されたが入力されていません
コマンドラインでパスワード、またはそれら 単に暗号化された以上のものを入力
でコマンドラインでパスワード、 我々が何をすべきか分からない場合
コマンドライン引数。
>> argcは、2つあった場合そこで、我々は継続することができます。
そしてここで、我々は宣言するつもりだ 暗号化された変数。
それはちょうどエイリアスにオリジナルを起こっている この全体argv1よう
プログラムは、我々はそれargv1呼び出す必要はありません その次にあなたが考えなければならない
それが実際に何を意味するのかについて。
>> だから最終的に、我々はそれを検証したい 暗号化されたパスワードユーザー
入力した実際にあったかもしれない 暗号化されたパスワード。
陰窩のmanページあたりの、 暗号化されたパスワードは13でなければなりません
長い文字。
ここまで、我々はハッシュ定義されていることがわかり 13として長さを暗号化します。
だから我々は単にことを確認しています 暗号化された文字列の長さ
パスワードは13です。
>> そうでないならば、我々はしたい プログラムを終了します。
だから一度方法のうちだ、我々はできる 今、実際に何を探してみる
暗号化されたを与えたパスワード パスワードがあった。
ここでは、塩をつかむしたい 暗号化されたパスワードから。
、manページあたりの、覚えている 暗号化されたの最初の2文字
ここのような文字列、 -
50ZPJのように -
最初の2文字は与える 私たちを使用した塩
暗号化機能である。
>> そしてここで、我々は塩がヘクタールだったことがわかります。
だから私たちは、最初の2つをコピーしたい 文字、ハッシュされて塩の長さ
2として定義されます。
我々は最初の2文字をコピーする必要が この配列に、塩。
我々はプラス塩の長さが必要なことに注意してください 我々はまだ、nullを必要とするので1、
我々の塩の終わりにターミネータ。
>> 次に我々は、この配列を宣言するつもりだ サイズ最大長のゲスト、プラス
最大長が定義されたハッシュである1、 8のように、最大​​のパスワードから
8文字の長さ。
そして我々は反復するためにこれを使用するつもりだ 可能性のあるすべての文字列の上に
有効なパスワードである。
もしそうであれば、パスワードに有効な文字 その後、ちょうど、a、b、およびcであった
我々は、A、B、C、を反復でしょう AA、BA、CA、というように、時まで
我々はCCCCCCCC見ることを得る -
8 Cの。
>> そして、我々は有効なダウン持っていなければ 、その後、我々はそれを言うためにパスワードを必要とする
暗号化された文字列ではありませんでした で始まるのは有効。
だから今、私たちは1ループしながら、これを達する。
それが意味することに注意してください 無限ループ。
>> ないbreak文が存在しないに注意してください この無限ループの内側。
文だけを返しています。
だから私たちは、実際には期待することはありません ループを終了します。
我々は唯一のプログラムを終了することを期待しています。
私は、このprint文を追加しました ただプリントアウトするために、このループの先頭
何を私たちの現在の推測で 何のパスワードです。
>> さて、このループは何をやっている？
これは、すべての可能性のある文字列をループだ それは有効なパスワードである可能性があります。
私たちがやろうとしている最初の事はある 何のために私たちの現在の推測を取る
パスワードです。
我々はからつかんでいる塩を取るよ 暗号化された文字列、そして我々はしている
推測を暗号化するつもり。
これは、私たちに暗号化された推測を与える 我々はと比較するつもりどの
暗号化された文字列、そのユーザ コマンドラインで入力。
>> 彼らは、その場合には、同じである場合 場合に匹敵する文字列は、ゼロを返します
それらが同じなら、その後だったと思います 暗号化されて生成されたパスワード
我々は印刷することができ、その場合には文字列、 当社のパスワードとリターンとしてその。
しかし、彼らが同じでないならば、その 私たちの推測が間違っていたことを意味します。
>> そして、我々に反復したい 次の有効な推測。
だから何この一方 ループは、やろうとしている。
それは私たちの推測を反復するために起こっている 次の有効な推測する。
我々がそれを言うときということに注意してください 我々の推測で特定の文字が持って
ここまでの最大シンボルに達し チルダとして定義されたハッシュがあるため、ある
それが最大のASCII値の文字です ユーザーがで入力できる
文字に達するキーボード、 最大シンボルは、次に我々は送信したい
それは、最低限のシンボルにバックアップしている 再び、最低ASCII空間である
ユーザーができる値のシンボル キーボードで入力します。
>> だから我々はそれを設定するつもりだ 最小シンボルに。
そして、我々は行くつもりです 次の文字に上。
それでは、どのように我々の推測です 反復するつもり？
まあ、有効な文字は、A、Bであれば cは、次に我々は、で開始した場合
それがBに反復でしょ、それがよ Cに反復。
Cは、私たちの最大のシンボルなので、セットします に戻ってC、最小シンボル。
そして、我々は、インデックスを反復します 次の文字へ。
>> オリジナルの推測では、次のCだったのであれば 文字はNULLであることを行っている
ターミネータ。
ダウンここで、文字であればことに気づく 我々は今、したいこと
増分は、ヌルターミネータだった 次に我々はそれを設定するつもりだ
最小シンボル。
推測では、その後、Cだったのであれば私たちの 新たな推測では、AAになるだろう。
そして、私たちのオリジナルの推測があった場合 その後CCCC、私たちの新しい推測
AAAAAになるだろう。
>> だからいつでも私たちは最大の文字列を達する 与えられた長さのもので、我々はしている
最小の文字列に実装しようとし 次の長さの、その意志
ただすべての文字のこと 最小シンボル。
さて、このチェックはここで何をやっている？
まあ、インデックスは8位から移動した場合 9文字までの文字 -
従って我々は8、Cのようにを追加 我々の以前の推測 -
その後、インデックスはに集中しようとしている 我々の推測の最後のヌルターミネータ
実際には意図されていない配列、 我々のパスワードで使用される。
>> 我々は、その最後のヌルに焦点を当てているのであれば ターミネータは、次に我々は発見していない
わずか8を使用して、有効なパスワード 存在しないことを意味した文字、
暗号化の有効なパスワード 与えられた文字列に。
と我々は言って、それを印刷する必要があり 我々は有効なを見つけることができなかった
パスワード、および復帰。
したがって、このwhileループは反復しようとしている すべての可能な文字列の上に。
>> それが見つかった場合は、任意に暗号化している 予想される暗号化された文字列、それがよ
そのパスワードを返します。
そしてそれは、それは、その後、何かを見つけることはありません それは、印刷、戻ります
何かを見つけることができませんでした。
さて、すべての反復処理がわかり 可能性のある文字列は、おそらくに起こっている
しばらく時間がかかる。
実際にどのように見てみましょう 長いことかかります。
>> 亀裂を作ってみましょう。
まあ、おっと - それは未定義と言う 地下室への参照。
pは仕様を設定し、ためにそう、覚えて 私たちはその地下室にもmanページ
地下室にリンクする必要があります。
さて、デフォルトではmakeコマンドを あなたことを知らない
その機能を使用したい。
>> それでは、このクライアントのコマンドをコピーしてみましょう そして終了間際にアドオン
それを、地下を結ぶ。
さて、それがコンパイルされます。
だから、与えられた上でクラックを実行してみましょう 暗号化された文字列 -
シーザーのよう。
だからかなり速かった。
>> これは13日に終了したことに注意してください。
まあ、シーザーの暗号化されたパスワード 13であることを起こる。
それでは、別のパスワードを試してみましょう。
のは、ハーシュホーンの暗号化されてみましょう パスワードとことをクラッキングしてみてください。
>> だから我々はすでに達した気付く 3文字。
そして我々はすべての可能な反復処理している 3文字の文字列。
それは我々がすでに終了したことを意味 可能性のあるすべてのものを繰り返し処理し、
2つの文字列。
さて、それは次のようになりますがに行っている 私たちが到達する前にしばらく時間がかかる
4文字の文字列。
それは数分かかる場合があります。
>> それは数分かかりませんでした。
私たちは、4文字の文字列にしている。
しかし、今、我々はすべてを反復する必要があります 可能な4文字の文字列で、その
それは多分10分かかることがあります。
そして、我々は、5つの文字に到達したとき 文字列は、我々はすべてを反復する必要があります
それらの、どのかもしれない カップル時間かかる。
そして我々はすべての可能なを反復する必要があります 6文字の文字列、どの
カップル日かかるとそうかもしれません。
>> だから、非常に長くかかる可能性があり、潜在的 可能なすべてを反復する時間
8文字より少ない文字列。
だから、これは必ずしもされていないことに気付く 発見のための非常に効率的なアルゴリズム
パスワード。
あなたがそこにいると思うかもしれない より良い方法があります。
たとえば、パスワードZYX！32ab おそらく、非常に一般的なパスワードではありません
12345パスワードがあるのに対し おそらくより多くの一般的な。
>> パスワードを見つけようとするのので、1つの方法 より迅速に見ているだけである
より一般的なパスワードで。
だから例えば、私たちは言葉を読むために試すことができます 辞書からのすべてを試す
当社のパスワード推測としてそれらの単語。
さて、多分パスワード それほど単純ではありません。
多分ユーザーはやや巧妙だった とに番号を付加してみてください
単語の終わり。
>> だから多分自分のパスワードはパスワード1だった。
だから、すべての単語を反復処理しようとすることができ いずれかの辞書で
それの最後に追加。
そして多分それをやったら、よ それの最後に2を追加します。
>> それともユーザーが偶数となるようにしようとしています より賢い、と彼らはしたい
パスワードは、 "ハッカー"であるが、彼らはしている E社のすべてのインスタンスを置き換えるつもり
スリーと。
だから、あなたもこれを行うことができます。
辞書ですべての単語を反復 しかし、その文字を置き換える
これらの数字と数字のように見える。
>> この方法だから、あなたはさらに多くをキャッチかもしれない かなり共通しているパスワード。
しかし、最終的には、唯一の方法は、次のことができます すべてのパスワードをキャプチャするには、ブルートにある
すべてイテレート強制 可能性のある文字列。
だから最終的には、反復する必要がありますか 一文字からのすべての文字列の上に
かかることがあります8文字、 非常に長い時間が、あなたはそれを行う必要があります。
>> 私の名前はロブボーデンです。
そして、これはクラックです。