物語
それはすべていつものように始まりました-私の友人はアカウントを盗んだので、Mac Airをブロックしました。 iPhoneを復元できる場合、Macはロックされています。 技術サポートに連絡しても何も起こらず、サービスセンターは1000ルーブルと1日間ロック解除することを提案しました。 確かに、彼らはこれを行うことができないマザーボードの欠陥を発見しました。
Arduinoを使用したBrutforsim EFIの記事を読んだ後、この経験を繰り返すことにしました。 確かに、ディスプレイはありませんでしたが、2つのアルドゥインがありました-UnoとMega2560。 そして、パスワードを整理するために残すために〜33時間非常に残念ではないラップトップ。 私たちは好みと詩人でブルートフォースをすることにしました-オートマティックをブルートフォースに追わせて、お茶を飲みます。
問題の説明
はじめに-私たちが一般的に決めたことについて簡単に説明します。 このセクションは、私が言及した記事を注意深く読みたくない人向けです。
Appleアカウントを盗まれた場合、クラッカーは、選択した4桁の数字パスワードを設定することにより、リモートでMacをブロックできます。 その後、このパスワードを入力せずにポピーをオンにすることは不可能であり、このパスワードは2つの異なる場所に入力できます-アカウントに入る前(アスタリスクで閉じられた4つの空の1文字入力フィールドがあります)とUEFIを入力しようとすると(この場合は表示されます)任意の数の文字を入力するためのフィールドで、アスタリスクで閉じられています)。 4つのフィールドに間違ったパスワードを何度も入力した場合、エントリは最初に5分間、次に10秒間など、最大1時間ブロックされます。 検索にはあまり適していません。 UEFIの場合、約12秒ごとにエントリを繰り返すことができます(実際には少し短くなります)。 最大列挙時間を計算すると、文字の入力と「入力」の時間を考慮せずに、33(3)時間の列挙が得られます。 原則として致命的ではありません。 Appleには、セキュリティの観点から考えるべきことがあるようです。
ただし、パスワードの複雑さ(またはエントリ間の遅延)を選択する際のこのような過失は、手元にあるだけです。
正しいパスワードを入力すると、入力はまったくブロックされないことに注意してください。つまり、これらの〜12秒はパスワードを検証する時間ではなく、人為的な遅延です。 この遅延の背後のどこかに到達して、はるかに高速に反復できるようです。 私たちはそれをしませんでしたが、アイデアは面白いです。
免責事項
この記事で行われることはすべて、合法であり(ポピーで作られているため)、連絡先情報がすでにどこにあるのかを知っている詐欺師との戦いを目的としています。 この記事の資料を違法な(および正当な)行為に使用することは、いかなる状況においても著者またはサイトの責任ではありません。 あなたがするすべては、あなた自身の危険とリスクで行います。 著者またはサイトは、記事の素材に起因する直接的または間接的な損害について責任を負いません。 要するに、誰が隠れなかったのか、私は責めるべきではない。
整理する方法は?
「Brutforsim EFI with Arduino」という記事の著者は、パスワードを選択する素晴らしい方法を提案しました。ArduinoはUSBキーボードのふりをして、パスワードを順番に試します。 上記の記事へのリンクであるアプローチのすべての微妙さを繰り返すつもりはありません。 私たちが違うやり方をすることにしたこととその理由を説明します
- 常にコンピューターを使用してください。 ディスプレイがなかったので、導入されたもののログを書き込むものは何もありませんでした。 したがって、コンピューターは入力内容を記憶します
- ポピーモニターで画像を認識します。 ポピーがこれまでにハッキングされていないかどうかを確認し、ハッキングされていない場合にのみパスワードを入力するのは比較的簡単に思えました。 とにかく、コンピューターは使用中です。
- 正確に4文字が入力されていることを確認してください。 これは私たちにとって最も予想外の変化でした。 時々、コンピューターの束-arduino-arduino-poppyがすべての文字を入力しなかったことがわかりました。 入力がスキップされることもありましたが、それほど怖くはありませんでした(パスワードの後に3〜4個のエントリを追加できますが、干渉しません)。 ただし、パスワード文字がスキップされる場合がありました。 なぜ謎なのか。 写真を見て、すべての文字が入力されていることを確認することにしました。 そうでない場合は、エントリを繰り返します。
- パスワードをランダムな順序で繰り返します。 記事のパスワードは0000から9999にソートされていたため、気に入らなかった。 ほとんどの場合、攻撃者は0000と9999の両方から遠く離れたパスワードを選択したため、攻撃者は苦しむことになります。 したがって、ランダム検索を行うことにしました。 なんて残酷な冗談が私たちと遊んだのか、読んでください。
ポイントに行きましょう!
次のスキームをソートします。
- コンピューターはブルートフォース用のパスワードのリストを生成します
- コンピューターは、ポピーがまだブロックされていることを確認します
- コンピューターは次のパスワードをArduine Unoに送信します。これは、実際にはUSB <-> SERIALアダプターとして使用され、何もしないシンプルなプログラムを持っています
- Unoでは、MegaはSerial1でデータを読み取ります。 それが彼らがUno-> Megaの順序を使用した理由であり、その逆ではありません
- メガはキーボード自体を考慮して、ポピーにデータを入力します。
- コンピューターは、画面に4文字が入力されていることを確認します。 そうでない場合、パスワードは未入力としてマークされます
- 同様に、入力を押します
- パスワードフィールドは空ではありませんが、何もしません
- 入力フィールドが空になったら、2番目のステップに進みます。
データ転送
データはUSB経由で転送され、シリアルになり、その後キーストロークになりました。 動揺したキャラクターを除いて、ここでは特に興味深いものはありませんでした。 デバッグにより、最後の段階でキャラクターが失われたことが判明しました。 つまり、キャラクターはキーボードを離れますが、ポピーには登録されていません。 なぜ、それは謎のままです。 彼らは理解していませんでした、彼らはすべてが導入されたことをチェックしました。
ロック認識
ポピーがロックされている間、ロックが描かれます。 以下がその1つです。
OpenCVを使用して検索しましょう! これは、顕微鏡に適した用途です(実際はそうではありません)。
驚いたことに、OpenCV for .NETは、ハーフキックと2つのNuGetパッケージ(OpenCV.NET、OpenCV)で終了しました。 次はコードです。
lck = CV.LoadImage("D:\\mac-unlock\\lock.png", LoadImageFlags.Unchanged); //Load lock image file Capture camera = Capture.CreateCameraCapture(-1); //Create camera object to capture image. Don't care about device index as the notebook has 1 camera device var img = camera.RetrieveFrame(); //get camera image IplImage res = new IplImage(new OpenCV.Net.Size(img.Width - tpl.Width + 1, img.Height - tpl.Height + 1), IplDepth.F32, 1); //Create image for matching results OpenCV.Net.CV.MatchTemplate(img, lck, res, TemplateMatchingMethod.CorrelationCoefficientNormed); //Find lock image in camera image double min, max; OpenCV.Net.Point minloc; OpenCV.Net.Point maxloc; CV.MinMaxLoc(res, out min, out max, out minloc, out maxloc); if (max < 0.88) //No lock image on the screen! Wow! ...
この単純なコードは、画面上のロック画像を探します。 素晴らしい発見:
緑の長方形は見つかった城です。 このセクションは問題を引き起こしませんでした。 OpenCVは非常に驚き、喜んでいました。
パスワード欄
画面にロックが見つかった場合は、その下でパスワードフィールドを検索できます。 これは、画像ピクセルの通常の操作では比較的簡単です。 または、カメラ用でない場合は行われます。 2つの問題があります。 まず、カメラの解像度は640 * 480で、分析にはひどいものです。 第二に、不安定な照明の下では、カメラは完全に予測不可能な挙動を示しました。 何かが点滅し、何かが消えました。 2番目の問題は、安定した照明条件によって解決されました。最初の問題は、ピクセルサイズとフィルターを参照することによって解決されました。
それで、城があります、あなたはその中心を見つけて、我々が明るさの2つのピークに会うまで下がることができます。
図は、ロック下のピクセルの明るさを示しています。
十分な距離で2つの最大値を見つけたら、それらの間の中心を取得して左に移動できます(パスワード入力フィールドは水平であると考えられます)。 明るいピクセルが見つかると、入力フィールドが終了するか、アスタリスクにつまずきました。
入力欄 緑色-ロックフレーム。 白は下降線であり、それに沿って2つの高値を探しています。 赤-見つかった最大値と左中央の最初の明るいピクセル。
ここで、左側の最初の明るいピクセルが十分な「左」であれば、入力フィールドは空です。 十分な「正しい」場合、4文字が入力されます。 ただし、キャリブレーションが必要です。
キャリブレーション中に、空の入力フィールドで明るいピクセルの位置が検索され、4文字が入力され、明るいピクセルの位置が検索されました。 これらの値は保存され、さらに参照として使用されました。
これで画像の操作に関する部分は終わりです。実際に結果に移りましょう。
結果
ロックが見つかりません! 33時間操作した後、パスワードが選択されました。 ランダム化にもかかわらず、最後から35番目のパスワードは正しいことが判明しました。 パスワード値は2605でした。 このイベントの確率は0.35%でした。
文献、機器、コード
使用した記事:
Apple Mac Air
Lenovo Thinkpad T510
Arduino Uno(互換)
Arduino Mega 2560(互換)
参照:
Arduinoを使用したBrutforsim EFI-ここからは、キーボードやポピーブロッキングの原理と同様に、Arduinoでの作業についてすべてが理解されます。 著者に感謝します!
の。 Arduinoウェブサイト
の。 OpenCV Webサイト
コード。 警告、コードはひどいです。 アドホックに書かれており、実験の痕跡が含まれています。 さらに、カメラの寸法に関連付けられているため、変更が必要になる場合があります。
法律で禁止されていない場合は、コードで何でもできます。