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