Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 1 » Reversen   (Übersicht)

3 Prüfungen am 23.07.2014 Prüfer: Tilo Müller Beisitzer: Johannes Stüttgen

Reversen

Fibonacci, 32 bit, cdecl, -O1 -fno-omit-frame-pointer

Quersumme, 32 bit, cdecl, -O1 mit Frame Pointer, -mpreferred-stack-boundary 8

Fakultät, 64 bit, 32 bit params, SystemV, -O0

  • Bittigkeit erkennen
  • Calling Convention erkennen
  • Andere Calling Conventions erklären, unterschiede, Caller vs. Callee Cleanup, Microsoft x64 vs. SystemV
  • Was ist Prolog? Was Epilog? Was macht Mnemonic „Leave“? → mov esp ebp; pop ebp; (Oder die Frage in die andere Reichtung)
  • Welche Parameter & Rückgabewert der Funktion?
  • Wie erkennt man den Datentyp? Was ist er? (Keine signedness erkennen bei fakultät, beim Rest schon)
  • Basic Blocks einzeichnen
  • Funktionsrumpf hinschreiben in Pseudo-C
  • Welche Register sind Caller/Callee saved? → Warum logisch bei eax/rax?
  • Für was wird SBB verwendet? Für was ist es eigentlich gedacht?
  • Warum wird soviel Speicher auf dem Stack reserviert? (Alignment)
  • Rest des Codes in Pseudocode hinschreiben, Algorithmus erkennen.
  • Frame Pointer Omission erklären, wann geht's nicht? (variable length arrays)

Opcodes

  • Unterschied zwischen Mnemonic und Opcode? → Menschen leserliche Darstellung (asm) vs. Bytefolge
  • Elemente des Opcodes hinschreiben, wie lange ist Opcode minimal/maximal? (prefix, opcode, mod r/m etc; 1 - 15 bytes)
  • Wie sind die Bits vom SIB aufgeteilt? Wie berechnet man Scale, index, base, displacement?
  • Unterschied zwischen Diplacement und Immediate? → Speicherzugriff vs. Konstante laden
  • Unterschied zwischen Displacement und Base? → Konstante vs. Register
  • Wie kann man SIB sinnvoll zur Array Addressierung verwenden? → Dispacement = Ort des Arrays auf stack relativ zu ebp, Base == ebp / Alternativ ESP, Index = Zähler, Scale = Elementgrösse: 1,2,4,8
  • Welchen Opcode hat RET? NOP?

M: PE-Format: Kompletten Aufbau des Headers. Auch ein paar Werte aus Optional Headers.

Nur Bei D:

  • Von Neumann vs. Harvard Architektur? (Harvard: Daten und Code getrennt)
  • Exploits auf Harvard möglich? (ROP!)
  • Was ist ThreadEnvironmentBlock, ProcessEnvironmentBlock?
  • Was ist wichtiges darin gespeichert?
  • Wie kommt man auf den TEB/PEB? (FS bzw. GS, 18 bzw. 30)
  • Was ist spannendes für den Reverser in PEB? (IsDebuggerPresent Flag, Liste der geladenen DLLs)

Softwareschutz

M+V: Intel SGX erklären: Encalven, Schlüssel aus dem Internetz laden, Geschützt vor BS

M: Was würde perfekte Obfuskierung erlauben? (Synchrone Crypto als Asynchrone verwenden, voll Homomorphe Verschlüsselung)

Hardware vs. Software Break- && Watchpoints

D: Wie kann man Debugging verhindern/erschweren?

Funktionsweise von Exploits

in Schaubilder mit Stack, Heap usw.

aus Folien eintragen && erklären:

V: Heap Overflow, Bonusfrage: Heap Overflow bei NX-Bit möglich?

D: Off-By-One, Off-By-One heute immer noch möglich? (Kaum, da alignment, NX-Bit, Canaries)

M: JMP2ESP

Ergebnisse < 2