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