認証コードの機能は、通常、悪意のある登録、ブルートフォースクラッキング、またはプログラムを使用した一括投稿を防ぐために設定されています。いわゆる認証コードは、ランダムに生成された数字または記号の文字列から画像を生成するもので、ユーザーが肉眼で認証コード情報を識別できるように、画像にいくつかの干渉ピクセルが追加されます。フォームを作成し、検証のために Web サイトに送信すると、機能を使用できるようになります。認証コードの解読・識別技術を学ぶことは、認証コードの原理を理解するだけでなく、認証コードの解読を防ぐ方法も知ることができます。
最も一般的な確認コードは主に次のとおりです:
1. 4 桁、ランダムな 1 桁の文字列、最もオリジナルな認証コード、認証効果はほぼゼロです。
2. ランダムなデジタル画像検証コード。写真上の文字は非常に規則的で、ランダムなインターフェロンが追加されているものや、文字の色がランダムなものもあるため、検証効果は以前のものより優れています。グラフィックや画像の基礎知識のない人には突破できません。
3. さまざまな画像形式の乱数 + ランダムな大文字英文字 + ランダムな干渉ピクセル + ランダムな位置。
4. 漢字は登録用の最新の認証コードであり、ランダムに生成されるため、入力が難しくなり、ユーザー エクスペリエンスに影響を与えます。
簡単にするために、クラッキング手順は主に 2 番目のタイプのものです。まず、インターネットでよく見られるこの確認コードの写真を見てみましょう。
1. フォントを取り出します 結局のところ、それは専門的なOCR認識ではないため、最も一般的な方法は、この検証の署名ライブラリを構築することです。コード。フォントを削除する場合は、すべての文字がこれらの画像に含まれるように、さらにいくつかの画像をダウンロードする必要があるため、ここにある文字には画像しか含まれていないため、0 ~ 9 を含む画像のみを収集する必要があります。
2.二値化二値化とは、写真上の検証番号の各ピクセルを1、それ以外の部分を0として表すことです。このようにして、各デジタル フォントを計算、記録し、キーとして使用することができます。
3. 特徴量の計算 認識対象の画像を二値化して画像の特徴量を求めます。
4. コントロールサンプル 手順3の画像特徴コードと認証コードのフォントパターンを比較し、認証画像上の数字を取得します。
現在の方法では、認証コードの認識率は基本的に 100% になります。
簡易認証コードは数字と文字のみで構成されており、統一された形式で表示されるたびに固定位置が設定されています。検証コードの認識についてさらに詳しく学習していきましょう。今回識別する必要がある目標は、検証コードが文字と数字で構成されている、検証コードが回転している (おそらく左右両方)、位置が回転していない、ということです。修正済み、文字間の癒着あり、検証コードにはインターフェロンが強化されています。
下の写真を例にして説明しましょう。
最初のステップ: 2 値化。 認証コードの部分を1、背景部分を0で表します。識別方法は非常に簡単で、認証コードの全体画像をRGBで出力し、そのルールを解析します。 RGB コードを使用すると、上記を簡単に区別できます。この画像の R 値は 120 より大きく、G と B の値は 80 未満であるため、このルールに従って上記の画像を簡単に 2 値化できます。
上の 3 番目の確認コードの画像を見てみましょう
一見すると、とても複雑に感じます。認証コードの画像の背景色は単色ではなく、毎回異なります。認証コード番号の色も毎回異なります。 2値化するのは難しそうに思えますが、実はRGB値を出力してみると簡単に分かります。検証番号の色がどのように変化しても、その数値の RGB 値は常に 125 未満であるため、次の判定が行われます。 $rgbarray['red'] < $rgbarray['green' ]
なぜこれらのルールが見つかるかというと、検証コードのインターフェロンを作成する際、インターフェロンが数字の表示効果に影響を与えないためには、インターフェロンのRGBとデジタルRGBが互いに独立していなければならず、お互いに干渉しないこと。このルールを理解していれば、二値化は簡単に実現できます。
私たちが見つけた120、80、125などの閾値は実際のRGBとは異なる可能性があります。そのため、検証コード上の数値の固定位置表示では、2値化後に一部の場所に1が表示される場合があります。大きな意味。ただし、認証コードの位置が不確かな写真の場合、文字をカットするときに干渉が発生する可能性があります。そのため、二値化後にノイズ除去が必要となります。
ステップ 2: ノイズ除去。 ノイズ除去の原理は非常に単純で、孤立した実効値を除去することです。ノイズ ポイントが比較的高く、必要な効率が比較的高い場合は、行うべき作業も多くなります。幸いなことに、ここではそれほど深さは必要ありません。点が 1 の場合、その点の 8 つの方向の数が 1 であるかどうかを判断します。1 でない場合は、それが 1 であるかどうかを判断します。ドライポイントとみなされますので、1 に設定してください。
上の図に示すように、この方法を使用すると、赤いボックス内の 1 がドライ ポイントであることが簡単にわかり、それを直接 1 に設定するだけです。判定の際にトリックを使いますが、ノイズポイントが2つ連続して1になる場合がありますので、このポイントの8方向の値の合計を計算し、最終的にその合計が特定のしきい値より小さいかどうかを判定します。 。
ステップ 3: 文字をカットします。 文字をカットする方法はたくさんありますが、ここでは最も単純な方法を使用します。以下に示すように、まず縦方向に文字をカットし、次に横方向の余分な0000を削除します。
最初のステップで赤い線の部分をカットし、2番目のステップで青いラインの部分をカットして、独立した文字を取得します。しかし、次のような状況です
上記の方法ではdw文字を1文字にカットしてしまうのですが、これは間違ったカットなので、ここではノリ文字のカットを伴います。
ステップ4: 接着したキャラクターをカットします。 認証コードを作成する場合、通常の文字の接着は分離しやすく、文字自体を拡大縮小すると変形の処理が難しくなります。分析の結果、上記の文字の接着は非常に簡単な方法であることがわかります。通常の文字の接着 したがって、この状況に対処する非常に簡単な方法も使用します。切り出し操作が完了した後、切り出した部分が文字であるかどうかを検証する必要があります。このしきい値を選択する基準は、切り取られた文字の幅であるかどうかです。キャラクターがどのように回転されても、変形はこのしきい値を超えないため、切り取ったブロックがこのしきい値より大きい場合、その合計が大きい場合は、接着されたキャラクターであると見なされます。 2 つのしきい値の場合、3 つの文字が接着されていると見なされます。このルールを知っておけば、ベタ文字をカットするのはとても簡単です。それが貼り付けられた文字のブロックであることがわかった場合は、そのブロックを 2 つ以上の新しいブロックに分割するだけです。もちろん、文字をより適切に復元するために、通常は +1 と -1 を使用して文字ブロックを適切に補完します。
ステップ 5: 文字を一致させます。 回転されたキャラクターの機能コードを作成する方法はたくさんあるため、ここでは詳細な検討は行いません。ここで使用する最も簡単な方法は、すべてのキャラクターのすべての状況に対応するライブラリを構築することです。そのため、提供したコードに調査操作を追加しました。その目的は、最初に画像の検証コードを手動で識別し、次にその調査結果を使用することです。書き込むメソッド フィーチャーコードライブラリを入力します。この方法で書き込まれる画像データが増えるほど、より正確な行を検証して識別できるようになります。
上記の手順を完了すると、基本的に今日のインターネット上のほとんどの検証コードを識別できます。ここでは、OCR の知識をまったく使用せずに最も簡単な方法を使用します。確認コードを作成するための追加の提案:
検証コードを識別するプログラムにとって、最も難しい部分は検証文字のカットと特徴コードの確立です。多くの国内プログラマーは検証コードのみを作成するとき、常に多くのインターフェロン、干渉線、および影響を追加することを好みます。効果は言うまでもなく、まだあまり良くないので、認証コードを認識されにくくしたい場合は、次の 2 つの点を実行してください。
1. キャラクターの接着、すべてのキャラクターに接着パーツがあるのが最適です。 2. 指定文字を使用しないでください。検証コードの各部分で異なる比率の拡大縮小または回転を使用します。
この 2 点が達成されるか、この 2 点の変形が達成される限り、認識プログラムが識別することは困難になります。
上記はこの記事の全内容です: PHP を使用して Web サイト検証コードをクラックする方法。これが皆さんの学習に役立つことを願っています。
http://www.bkjia.com/PHPjc/1057092.html