Open Source im professionellen Einsatz
Linux-Magazin 05/2007
© photocase.com

© photocase.com

OCR im Eigenbau mit Perl-Modulen

Zufall unter Beobachtung

In manchen Firmen laufen die Mitarbeiter mit Secur-ID-Tokens der Firma RSA Security herum. Das kleine Authentisierungsgerät berechnet und zeigt jede Minute eine Ziffernkombination, die beim Einloggen temporär gültig ist. Eine mit Perl gestrickte Zeichenerkennung schaut dem Schlüsselgenerator beim Zocken zu.

451

Neulich berichtete mein Arbeitskollege Fergus, dass sein Secur-ID-Token gerade »000000« angezeigt hätte, und postete prompt ein Foto auf Flickr [2]. Das besagte Token in Form eines Secur-ID-Schlüsselanhängers gibt alle 60 Sekunden eine neue sechsstellige Zahl aus (Abbildung 1). Wenn alle Ziffernfolgen mit der gleichen Wahrscheinlichkeit auftreten, ist die Chance, mit einem Blick »000000« zu sehen, eins zu einer Million. Das kommt fast einem Lottotreffer gleich, nur ohne Geld.

Abbildung 1: Der Schlüsselanhänger von RSA Security zeigt alle 60 Sekunden eine neue sechsstellige Zahl an.

Totpatentiert

Das Ereignis weckte meine Neugier: Was zeigt eigentlich mein Keyfob (so heißen Schlüsselanhänger auf Amerikanisch) an, wenn ich gerade nicht hinsehe? Mit einer Webcam oder einem Scanner lässt sich die Anzeige als Bild digitalisieren. Und aus den Pixeln ermittle ich dann per Optical Character Recognition (OCR) die tatsächlichen Ziffernwerte. Da Hersteller den OCR-Bereich aber leider totpatentiert haben, gibt es dafür kaum funktionsfähige freie Software.

Vorher noch ein Warnhinweis: Der heutige Snapshot dient nur zu Forschungszwecken. Niemand sollte die Keyfob-Daten elektronisch übermitteln. Die so genannte Fobcam [3] eines Computernutzers, der die aktuelle Ziffernfolge seines Secur-ID-Token aus Bequemlichkeit per Webcam im Internet anzeigt, ist zwar immer wieder für einen Lacher gut, aber nicht zur Nachahmung empfohlen.

Um ein Bild des Token aufzunehmen, bieten sich eine Webcam (Abbildung 2) oder ein Scanner an. Ein früherer Snapshot [4] zeigte schon, wie unter Linux mittels Video::Capture::V4l eine Webcam anzusteuern ist. Mittlerweile ist das CPAN-Modul Video::Capture::V4l::Imager ebenfalls verfügbar, das die Sache weiter vereinfacht.

Abbildung 2: Der Versuchsaufbau zur Fobcam: Eine Lampe sorgt für gleichmäßig verteiltes Licht und die Webcam zeigt senkrecht auf den Secur-ID-Token.

Ins rechte Licht gerückt

Listing 1 zeigt, wie das Perl-Modul die Kamera anspricht und zunächst die gewünschte Helligkeit mit der Methode »brightness()« einstellt. Der beste Wert hängt vom Kameratyp und von den herrschenden Lichtverhältnissen ab. Nach einigem Experimentieren findet sich meist ein akzeptabler Wert.

Listing 1:
»fobcam«

01 #!/usr/bin/perl -w
02 use strict;
03 use Video::Capture::V4l::Imager;
04 use Log::Log4perl qw(:easy);
05
06 Log::Log4perl->easy_init($DEBUG);
07
08 my $v = Video::Capture::V4l::Imager->new(
09   width  => 640,
10   height => 480,
11 );
12
13 $v->brightness($ARGV[0] || 27_900);
14 my $img = $v->capture();
15
16 $img->write(file => 'fob.jpg')
17  or die "Can't write: $!";

Das Modul bietet auch die Methode »calibrate()« an, die so lange mit verschiedenen Einstellungen für »brightness()« herumprobiert, bis das aufgenommene Bild eine vorgegebene mittlere Helligkeit zeigt. Das Capture-Objekt »$v« liefert im Erfolgsfall als Ergebnis ein Objekt vom Typ »Imager« zurück, dessen Bilddaten sich entweder weiterbearbeiten oder in einem gängigen Format wie Jpeg oder PNG zur weiteren Verwendung auf der Festplatte abspeichern lassen.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Perl-Snapshot

    Ist Perlmeister Schilli unterwegs, weiß er gern, was daheim abgeht. Mit zwei Skripten bekommt er es hin, dass die angeschaffte Billigkamera über das Tumblr-API zyklisch Schnappschüsse auf der Micro-Blogplattform ablegt. Tierisch schick, diese Überwachung.

  • Perl-Snapshot

    Mit einer chinesischen Guillotine und einem Einzugsscanner bewaffnet geht Perlmeister Michael Schilli diesmal seinen Büchern an den Leim. Die Grundlage seiner bibliophoben Tat liefert Google Drive, das mit 5 GByte genug Speicherplatz für ein Online-PDF-Lager mit eingescannten Büchern bietet.

  • Perl-Snapshot

    Größere Dateien tauscht die Jugend heute gerne über den proprietären Dropbox-Service aus. Dessen Web-API erlaubt auch den Einsatz selbst geschriebener Skripte, beispielsweise zum Abholen einer Datei aus dem Schatten einer Firewall.

  • Perl-Snapshot

    Ein kräftiger Windstoß genügt, um das System der Notizzettel vom Schreibtisch zu fegen. Evernote, eine Art hochstrukturierter digitaler Notizblock, zeigt dem User seine Aufzeichnungen unabhängig von Ort und Endgerät. Ein API erlaubt programmatischen Zugriff mit Facebooks Thrift-Library.

  • Runter kommen sie alle

    Spiele-Programmierer rechnen mit physikalischen Formeln und setzen spezielle Tricks ein, um Grafiken realitätsnah zu animieren. Der als Perl-Wrapper verfügbare Simple Direct Media Layer (SDL) bietet ein leistungsfähiges Framework, um einfache 2D-Welten zu schaffen, hier eine Fallschirmsprung-Simulation.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.