Programme, die nur als Maschinencode vorliegen sind oft nicht leicht zu handhaben: beim Übersetzen des noch verständlichen Sourcecodes gibt es zu viele Möglichkeiten durch Optimierungen die Struktur des Programmes zu verklären. Wir versuchen diese Struktur teilweise wieder zu gewinnen, darzustellen und für unsere Zwecke aufzubereiten.
Dabei wird zunächst der Maschinencode von IA32/Linux ELF Binärdateien disassembliert, mit Hilfe einer selbstentwickelten Disassembler-Library, deren Aufbau kurz erläutert wird. Die einzelnen Instruktionen werden danach mittels Trace-Verfahren in strukturellen Einheiten (basic blocks) zusammengefasst, zwischen denen der Codeflow analysiert werden kann.
Als Anwendung dieser Techniken zeigen wir zuerst das Fingerprinten von Funktionen. Dies nutzen wir zum Erkennung und Verändern von Schutzcode im Kernel (am Beispiel des StMichael Kernel "Schutz"-Modules). Weiter betrachten wir die Möglichkeiten bestimmte Aussagen über den Control-Flow zu machen, die für versteckte Backdoors genutzt werden können. Die Erkenntnisse daraus verwenden wir anschliessend um beliebigen Programmcode in einem anderen Programm an optimalen Stellen einzubauen.
Am Ende des Vortrages wird der Quellcode unter einer nicht-restriktiven Lizens veröffentlicht (LGPL, GPL, BSD oder so).