Neben dieser Aufgabenstellung zur Challenge “Misc 200” – “Bilder laden um Türen zu öffnen” – wird uns eine ZIP-Datei übergeben. Diese entpacken wir zunächst einmal und sehen uns an, womit wir es bei dieser Challenge genau zu tun haben.
Das Archiv beinhaltet viele Dateien von denen die Datei “drop.exe” als das Hauptprogramm der Challenge ins Auge fällt. Der Aufruf dieses Binarys lässt ein Fenster erscheinen, das über einen großen Button “Load” Bilder annimmt und an dessen Unterkante sich zehn Radiobuttons befinden, die vom Benutzer durch Klicken verändert werden können.
Das testweise Laden beliebiger Bilder führt zunächst zu keinem sichtbaren Ergebnis. Man erkennt jedoch, dass das Programm arbeitet – nicht zuletzt, da im Verzeichnis kurzzeitig temporäre Dateien erscheinen. Eine genauere Überprüfung des Verhaltens mit dem Werkzeug “procmon” aus der Sysinternals Suite liefert:
Demnach wird nach dem Laden des Bildes das Programm “dontdelete.exe” mit den Parametern “temp.bmp temp” ausgeführt sowie im weiteren Verlauf auf die Datei “temp.txt” zugegriffen. Es wird Zeit, sich die anderen Dateien des Archives – hier insbesondere die Datei “dontdelete.exe” – genauer anzusehen.
Das reine Ausführen der Datei “dontdelete.exe” führt dazu, dass eine Datei “tesseract.log” mit folgendem Inhalt angelegt wird:
Tessedit:Error:Usage:Tessedit imagename outputbase [configfile [[+|-]varfile]...]
Es handelt sich also um ein Programm namens “Tessedit”, ähnlich des Verzeichnisses “tessdata”, das ebenfalls mit dem Archiv ausgeliefert wurde. Eine Suche im Internet führt zur der Erkenntnis, dass es sich dabei um eine OCR-Engine namens Tesseract-OCR handelt. OCR steht im Allgemeinen für “Optical Character Recognition”, also ein Verfahren, dass Buchstaben und Zeichen aus Bildern in direkte lesebare ASCII-Zeichen umwandeln soll.
Als nächstes Versuchen wir die mit “procmon” erkannte Kommandozeile mit einem mit Paint erstellen Beispielbild auszuführen und erhalten:
Das erstellte Bild wurde durch “tessedit” in ASCII-Zeichen umgewandelt und diese in der Datei temp.txt abgelegt. Ähnliches müsste auch beim Laden von Bildern mit dem Programm “drop.exe” geschehen. Nach Laden unseres Beispielbildes “rup0rt” erkennen wir jedoch keine Veränderung. Wie gehen wir also weiter vor?
Der Tipp zur Challenge, “load IMAGES” – also mehrere Bilder – sowie die zehn Radiobuttons, die Buchstaben darstellen könnten, lassen darauf schließen, dass eine bestimmte Zeichenkette durch das Laden mehrerer Bilder an das Programm übergeben werden könnte. Um dies zu testen, erstellen wir 36 Bilddateien mit jeweils einzelnen Zeichen von A bis Z sowie 0 bis 9.
Diese Bilder laden wir nun testweise nacheinander in das Programm “drop.exe”. (Alternativ kann man auch die Datei “temp.txt” mit den zu testenden Zeichen füllen, mit einem Schreibschutz versehen und anschließend ein beliebiges Bild laden.) Bereits nach dem Laden weniger Bilder zeigt sich uns dieses Ergebnis:
Der erste Radiobutton hat sich tatsächlich verändert und wurde aktiviert. Da die Veränderung beim Laden des Bildes “1.bmp” eingetreten ist, scheint die Zahl “1” damit das erste Zeichen unseres Codewortes darzustellen. Wir beginnen das Laden der Bilder von vorn, in der Hoffnung, die weiteren Zeichen des Codewortes genauso finden zu können.
Nach einigen Versuchen sind alle Radiobuttons aktiviert und das Codewort “1235BDPQRT” steht damit fest. Der obige – vorher traurige Smiley – hat sich nun zum Lachen gewendet und die Challenge scheint gelöst! Das Klicken des lachenden Smiley-Buttons bringt jedoch keine Veränderung und auch die Zeichenkette “1235BDPQRT” wird keinesfalls als Lösung zur Challenge akzeptiert. Vielmehr stellt sich nach weiteren Versuchen heraus, dass auch andere Wörter, zum Beispiel “TR1BPQD325” die Radiobuttons komplett aktivieren.
Es müssen also noch mehr Schritte erforderlich sein! Nachdem weitere Versuche, sinnvolle Codewörter zu bilden, fehltschlugen, widmen wir uns nochmals dem Smiley-Button selbst. Passiert vielleicht doch etwas, nachdem wir den – erst nach Eingabe des Codewortes aktivierten – Smiley-Button klicken? Um das zu untersuchen verwenden wir nochmals das Werkzeug “procmon”.
Nach Klicken des Button stellen wir fest, dass das Programm hier tatsächlich eine Datei namens “IOUUWVKPI.synapse” im temporären Verzeichnis anzulegen und Daten hinein zu schreiben scheint. Diese Datei betrachten wir nun etwas genauer.
lambda:~# file IOUUWVKPI.synapse IOUUWVKPI.synapse: # ISO 9660 CD-ROM filesystem data '20121028_1555' (bootable) lambda:~# mount IOUUWVKPI.synapse /mnt/iso/ mount: warning: /mnt/iso/ seems to be mounted read-only. lambda:~# ls -lh /mnt/iso/ total 13K -r-xr-xr-x 1 root root 12K Oct 28 16:57 mboot.bin -r-xr-xr-x 1 root root 700 Oct 28 16:57 mboot.mbt
Bei der Datei handelt es sich um ein CDROM-Image, das “bootable” ist und demnach als Start-CD verwendet werden kann. Da wir jedoch sehr faul sind und keinen Neustart durchführen wollen, sehen wir uns die Dateien per Editor an und finden in der Datei “mboot.mbt” unter anderem folgenden Inhalt:
:label_0
cls
print QNTG-2454-W3XG-QUNTM
getkey
goto start
Die Lösung zur Challenge lautet somit “QNTG-2454-W3XG-QUNTM“.