Reverse Engineering

Analyse von Binärprogrammen

Wie analysiert man Programme, deren Quelltext nicht verfügbar ist? Ist ein Programm aus einer mir unbekannten Quelle vertrauenswürdig? Wie genau funktioniert diese Schadsoftware? Wie behebe ich den Fehler in einem Programm, welches nicht mehr offiziell unterstützt wird?

Um Fragen wie diese zu beantworten, beschäftigen wir uns in diesem Kurs mit der Analyse von Binärprogrammen, dem Reverse Engineering. Wir lernen, wie wir Maschinencode zurück in Assembler übersetzen und dann den Code zum besseren Verständnis in einer Hochsprache abbilden können. Dazu werden die Teilnehmer schrittweise an die Thematik herangeführt und wenden die Techniken in den zahlreichen praktischen Aufgaben an.

Die in diesem Kurs gezeigten Techniken sind auf unterschiedlichen Betriebssysteme (Linux, Windows, MacOS, ...) und CPU Plattformen übertragbar. Praktisch verwenden wir hier vor allem Linux und x86_64

Trainer und Dozenten

Tim Blazytko ist Reverse Engineer sowie Chief Scientist und Mitgründer von emproof. Seit dem Abschluss seiner Promotion an der Ruhr-Universität Bochum leitet Tim ein Team, welches eingebettete Software gegen Reverse Engineering und Exploitation absichert. Neben seiner Forschung führt Tim Sicherheitsanalysen durch und gibt Trainings als Freiberufler.

Voraussetzungen

  • Grundkenntnisse im Umgang mit der Linux-Kommandozeile, wie sie Sie in unserer Schulung "Linux Grundlagen vermitteln
  • Grundkenntnisse in der Programmiersprache C, wie wir Sie in unserer Schulung "C Programmierung vermitteln
  • Vorwissen über die x86-Assembler ist hilfreich, aber nicht notwendig

Inhalt

Von C zu Assembler

  • Source Code versus Assembler
  • Was macht ein Compiler?
  • Was ist Maschinensprache?

x86-64 Assembler

  • Register- und Speicherzugriffe
  • Instruktionen/Befehlssatz
  • Kontrollfluss
  • Wie schreibt man x86-64 Assembler?

Rekonstruktion von Funktionen

  • Rekonstruktion von Kontroll- und Datenfluss
  • Rekonstruktion von Variablen
  • Identifikation von Hochsprache-Konzepten (z.B. if-Statements, Schleifen, ...)
  • Calling Conventions

Rekonstruktion von Datenstrukturen

  • Rekonstruktion von elemantaren Datentypen (byte, short, int, ...)
  • Erkennen von Strings
  • lokale versus globale Datenstrukturen
  • Pointer
  • Rekonstruktion von Structs und Unions

Statische Analyse

  • Basic Blöcke
  • Kontrollflussgraphen
  • Disassembler
  • Decompiler
  • state-of-the-art Programme

Dynamische Analyse

  • Debugging
  • Single Stepping
  • Patching
  • state-of-the-art Programme

Kurszeiten

Wer möchte, reist bis 22 Uhr am Vortag an und nutzt den Abend bereits zum Fachsimpeln am Kamin oder im Park.

An den Kurstagen dann von 9-18 Uhr (mit 2 Kaffee- und 1 Mittagspause) etwa 60% Schulungen und 40% Übungen. Selbstverständlich arbeitet jeder Teilnehmer am von uns gestellten Notebook oft parallel zum Referenten mit.

Anschließend Abendessen und Angebote für Fachsimpeln, Ausflüge uvm. Wir schaffen eine Atmosphäre, in der Fachleute sich ungezwungen austauschen. Wer das nicht will, wird zu nichts gezwungen und findet auch jederzeit Ruhe.