AI-United » Allgemein » Hacken von Captcha in 15 Minuten mit Hilfe vom maschinellen Lernen

Hacken von Captcha in 15 Minuten mit Hilfe vom maschinellen Lernen

Hacken von Captcha in 15 Minuten mit Hilfe vom maschinellen Lernen

Really Simple Captcha stellt das am häufigsten verwendete Plug-In für WordPress dar.

CAPTCHA ist das Bild mit dem Text, der eingegeben werden soll, um die Seite zu besuchen. Captcha wurde erfunden, damit Roboter das Formular nicht automatisch ausfüllen können, und der Eigentümer der Webseite sicher sein konnte, dass man kein Roboter ist. Dank der Entwicklung des maschinellen Lernens und der Computervision ist es einfach, das Programm zu hacken.

Im Buch Deep Learning for Computer Vision with Python, das von Adrian Rosebrock geschrieben wurde, wird die Methode des Hackens von Captcha unter Einsatz des maschinellen Lernens beschrieben.

Der Autor hatte keinen Zugang zum Quellcode. Um das Modell zu lehren, lud er Tausende Bilder herunter und markierte alle Texte.

Im Artikel erlernt man, Captcha zu hacken, zu dessen Quellcode man einen Zugang hat.

“Really Simple CAPTCHA” wurde millionenmal installiert. Das Programm ist ein Open-Source Programm. Da es einen Algorithmus gibt, der das Bild generiert, kann man ihn hacken. Aber ist es möglich, das in 15 Min. zu machen?

Der Autor von CAPTCHA sagt, dass dieses Plug-In nicht mehr zuverlässig ist  und empfiehlt, vielleicht etwas Anderes anzuwenden.

Die Challenge

Zunächst sollte man die Bilder ansehen, die von Really Simple CAPTCHA generiert werden. Auf der Demoversion sieht man Folgendes:

Das Captcha besteht aus vier Buchstaben. Das sind die Quellcodes:

public function __construct() {
		/* Characters available in images */
		$this->chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';

		/* Length of a word in an image */
		$this->char_length = 4;

		/* Array of fonts. Randomly picked up per character */
		$this->fonts = array(
			dirname( __FILE__ ) . '/gentium/GenBkBasR.ttf',
			dirname( __FILE__ ) . '/gentium/GenBkBasI.ttf',
			dirname( __FILE__ ) . '/gentium/GenBkBasBI.ttf',
			dirname( __FILE__ ) . '/gentium/GenBkBasB.ttf',
		);

Das Captcha wird zufallsmäßig aus vier Buchstaben oder Ziffern mit verschiedenen Schriftarten generiert. Die Symbole “O”, “0”, “I”, “1” werden nicht verwendet. 32 Symbole bleiben, die man erkennen kann.

Der benötigte Instrumentensatz

Dies sind Instrumente, die man verwenden wird:

Python 3

Python — stellt die einfache Programmiersprache mit wunderbaren Bibliotheken für das maschinelle Lernen und Computervision dar.

OpenCV

Populäre Bibliothek zur Bildbearbeitung, wo Computervision verwendet wird. Man kann sie zur Vorwärtsverarbeitung von Captcha anwenden.

Keras

Ein Framework für das maschinelle Lernen. Mit seiner Hilfe kann man Neuronennetze einfach bilden, lehren und gebrauchen.

TensorFlow

Eine Google Bibliothek für das maschinelle Lernen. Man muss Keras verwenden, aber Keras verwendet TensorFlow als Backend.

Erstellen des Datensatzes

Um das Modell fürs maschinelle Lernen zusammenzustellen, werden lehrende Daten benötigt. Man benötigt folgende Daten:

Da man den Quellcode des Plug-Ins hat, kann man ihn verwenden, um 10,000 Bilder zu generieren. Die Dekodierung für jedes Bild ist bekannt.

Nachdem der Code überprüft ist  und ein Zyklus ‘for’ hinzugesetzt wird,  erhält man einen Ordner mit den lehrenden Daten — 10,000 PNG Files. In der Benennung der Ordner steht die richtige Antwort:

Dies ist der Link zu den 10,000 Bilder, damit man dieses Resultat wiederholen kann.

Wie kann man die Aufgabe vereinfachen?

Wenn man die lehrenden Daten hat, kann man sie direkt verwenden und damit das Neuronennetz lehren:

Wenn man eine ausreichende Menge von Daten hat, wird diese Methode funktionieren. Aber man kann die Aufgabe noch vereinfachen. Je einfacher die Aufgabe ist, desto weniger lehrende Daten und Rechenressourcen werden benötigt, um sie zu lösen.

Captcha besteht nur aus vier Symbolen. Wenn diese so verteilt werden, dass jeder Buchstabe ein eigenes Bild darstellt, dann kann man das Neuronennetz lehren die Symbole zu erkennen:

Das Schneiden jedes der 10,000 Bilder im Photoshop dauert einige Zeit. Man kann nicht alle Bilder automatisch in 4 gleiche Teile aufteilen. Die Symbole sind zufällig verschoben, um die Aufteilung des Bildes zu erschweren.

Doch man kann dies automatisieren. Bei der Bildbearbeitung findet man häufig verbundene Regionen aus Pixeln einer Farbe. Die Grenzen von solchen Regionen nennt man Konturen. Bei OpenCV gibt es eine Funktion findContours(), die verwendet wird, um die verbundenen Regionen zu finden.

Man sollte mit dem Bild des Captcha beginnen:

Durch die Umwandlung des Bildes in ein binäres Bild (thresholding), ist die verbundene Region einfacher zu finden:

Man verwendet die Funktion findContours(), um die verbundenen Pixelgruppen hervorzuheben, die aus einer Farbe bestehen:

Man sollte jedes Rechteck als ein einzelnes Bild speichern. Beim Speichern sollte man jedes Rechteck wie sein Symbol benennen.

Doch da gibt es ein Problem. Die Buchstaben im Captcha überschneiden sich manchmal:

Der Algorithmus erkennt sie als einen Buchstabe:

Falls das Problem nicht gelöst wird, erhält man schlechte lehrende Daten. Dies muss korrigiert werden.

Die einfache Lösung: Falls ein Rechteck viel breiter als hoch ist, soll es als zwei Buchstaben gezählt werden. In diesem Fall soll das Rechteck in der Mitte aufgeschnitten werden und als zwei Rechtecke gelten:

Man sollte alle Rechtecke gegeneinander aufheben, deren Breite die Höhe wesentlich übersteigt, und sie als zwei Buchstaben zählen.

Wenn man die Methode hat, einzelne Buchstaben aus dem Captcha zu extrahieren, sollte man den Algorithmus durch den ganzen Datensatz laufen lassen. Das Ziel ist es, viele Varianten für jeden Buchstaben zu erhalten. Man soll jeden Buchstaben in separaten Ordner speichern.

So sieht der Ordner mit dem Buchstaben “W” nach der Ausführung des Algorithmus aus:

Manche Buchstaben “W”, die aus 10,000 Bildern hinausgezogen wurden. Der Autor erhielt 1,147 Varianten von “W”.

Erstellen und Lehren des Neuronennetzes

Da man einen Buchstaben oder eine Ziffer erkennen soll, wird das Neuronennetz mit der komplizierten Architektur nicht benötigt. Die Erkennung von Symbolen ist einfacher als die Erkennung von komplizierten Bildern, beispielsweise von Katzen oder Hunden.

Man verwendet das einfache faltende Neuronennetz mit zwei Faltungsschichten und zwei dichte (dense) Schichten:

Man kann die Architektur des Neuronennetzes mit Hilfe von Keras ganz einfach definieren:

# Build the neural network!
model = Sequential()

# First convolutional layer with max pooling
model.add(Conv2D(20, (5, 5), padding="same", input_shape=(20, 20, 1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

# Second convolutional layer with max pooling
model.add(Conv2D(50, (5, 5), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

# Hidden layer with 500 nodes
model.add(Flatten())
model.add(Dense(500, activation="relu"))

# Output layer with 32 nodes (one for each possible letter/number we predict)
model.add(Dense(32, activation="softmax"))

# Ask Keras to build the TensorFlow model behind the scenes
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

Nun kann man das Neuronennetz trainieren.

# Train the neural network
model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=32, epochs=10, verbose=1)

Nach 10 Durchläufen des lernenden Datensatzes erhält man eine Präzision von ungefähr 100%. Die Aufgabe, das beliebige Captcha automatisch zu erkennen, wurde gelöst.

Die Verwendung des gelernten Modells zum Entschlüsseln von Captcha

Nach dem Trainieren des Neuronennetzes, kann dies zum Hacken von Captcha verwendet werden:

  1. Man nimmt das Bild von Captcha aus der Seite, die dieses Plug-In verwendet.
  2. Man teilt das Bild in vier Teile, die jeweils ein Symbol haben.
  3. Man lässt jedes Teil durch das Neuronennetz laufen.
  4. Man verwendet ausgegebene Buchstaben, um das Captcha zu lösen.

So sieht das Entschlüsseln des echten Captcha aus:

So sieht es in der Befehlszeile aus:

Man kann es selbst ausprobieren

Man kann Captcha also in 15 Minuten hacken. Wenn Sie das ausprobieren wollen, nehmen Sie diesen Code hier. Er enthält 10,000 Bilder und den Code für jeden Schritt im Artikel.

Quelle

AI-United-Redaktion

Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.