"Ich interessiere mich nicht so für Hardware..." Marc Ruef | 07.01.2008 Lange bevor ich einen eigenen Computer besass, entwickelte ich meine eigenen Computerspiele. Vorwiegend das Design beschäftigte mich, wie die Levels auszusehen hatten und welche Gegner an welcher Stelle auftauchen würden. Damals als Kind war dies mehr ein Zeichnen, denn ein Programmieren. Erst später eignete ich mir grundlegende Basic-Kenntnisse an. Noch immer keinen eigenen Rechner besitzend pflegte ich meinen Programmcode auf einer alten Schreibmaschine (nicht elektronisch!), übertrug die einzelnen Zeilen erst später in den 386er meines Vaters. Schon damals war es für mich klar, dass nur Software etwas "edles" besitzt. Edel in einem sehr philosophischen, ja schon fast sozialen Sinn. Software konnte frei sein. Jeder, der Schreiben könne, könne seine eigene Software entwickeln. Bei Hardware sah es da schon ein bisschen anders, eher kapitalistisch aus. Ohne die Investition von Geld konnte man sich keine Einzelteile kaufen und deshalb auch nichts Gescheites mit Hardware anfangen. Also interessierte ich mich nicht für Hardware - Sie war lediglich Mittel zum Zweck. Jetzt, es sind zwischenzeitlich seit der Manifestierung des ersten Gedankens dieser Art, etwa 15 Jahre vergangen, orientiere ich mich zunehmends anders. Durch das klassische Reverse Engineering mittels Disassembler entwickle ich mehr und mehr eine Liebe zur Hardware. Eigentlich schon mit der Nutzung von Assembler zur Umsetzung besonders effizienter Programme (z.B. Faktorenzerlegung von Primzahlen) hätte ich diesen Schritt gehen sollen, doch erst jetzt interessiert es mich wirklich, wie und warum etwas in jenes Register verschoben wird. Ein solches technisches Reverse Engineering ist sehr mächtig. Es ist wohl die mächtigste Technik, die man in der heutigen Zeit verfolgen kann. Das Aufspüren von Schwachstellen durch das Try-and-Error Prinzip als herkömmlicher End-User erscheint nämlich eigentlich sowohl wirtschaftlich als auch technisch als ineffizienter Witz erster Klasse. Wieso sich mit unhandlichen GUI-Elementen herummühen, wenn man entweder den Programmcode (Source Code Analyse) oder halt eben den Maschinencode inspizieren kann? Was Reverse Engineering mit IDA Pro und co. betrifft, empfinde ich mich selbst nach wie vor als Neuling. Eher ungestühm wühle ich mich durch MOV- and JNZ-Anweisungen. Dennoch bin ich immerwieder erstaunt, wie schnell mir doch manchmal die Resultate zufliegen. Da hätte ich für so manches Problem ein zig faches an Zeit bei einem reinen Blackbox Testing verbraten. Besonders proprietären Algorithmen minderer Qualität, die als die grossen Krypto-Lösungen angeboten werden, sind sehr unterhaltsam. (Oder halt auch Unternehmen, die mir meine GPL-Software klauen, leicht modifizieren, dann kommerziell vertreiben und behaupten, ich hätte mir das alles nur ausgedacht...) In der einschlägigen Literatur ist in der Tat eine Segmentverschiebung zu beobachten. Kein anderes Sub-Genre hat in den letzten zwei bis drei Jahren einen solchen Aufschwung erlebt, wie das Reverse Engineering mittels Hex-Editor, Disassembler und Decompiler. Das Ganze wurde langsam Salonfähig. Bücher wie Reversing von Eldad Eilam (http://www.amazon.de/exec/obidos/ASIN/0764574817/) und Exploiting Software von Greg Hoglund sowie Gary McGraw (http://www.amazon.de/exec/obidos/ASIN/0201786958/) erreichen eine Qualität, die selbst einen Einsteiger begeistern können. Früher wurden die eben dort beschriebenen Techniken vorwiegend von Crackern aus der Warez-Szene gepflegt. Und heute ist man schon fast uncool, wenn man nicht wenigstens die jüngste Version von IDA Pro (http://www.datarescue.com/idabase/) auf der Festplatte rumliegen hat. Dennoch glaube ich, dass sich die Anzahl der Leute, die sich ernsthaft mit Assembler auseinandersetzen wollen und können, sehr gering bleibt. Das Interesse ist nämlich in 99,9 % der Fälle nicht gross genug, um den immensen Aufwand für eine solche zeitintensive Studie zu rechtfertigen. Schade, denn ich habe und werde wohl auch noch viel Freude haben. Nämlich Spass mit lustigen Abkürzungen wie MOV, CMP, JZ und XOR...