Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 1 » Reversen (Übersicht)
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
pruefungen:hauptstudium:ls1:re_2014 [24.07.2014 08:08] – Link zu titanpad mit aktuellem Zwischenstand malte | pruefungen:hauptstudium:ls1:re_2014 [20.09.2016 11:49] (aktuell) – inlining von externer Seite mate | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Work In Progress: [[https://titanpad.com/52VLBfvmi9]] | + | 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, | ||
+ | |||
+ | * Bittigkeit erkennen | ||
+ | * Calling Convention erkennen | ||
+ | * Andere Calling Conventions erklären, unterschiede, | ||
+ | * Was ist Prolog? Was Epilog? Was macht Mnemonic " | ||
+ | * 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, | ||
+ | * 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 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: | ||
+ | * 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? | ||
+ | * Exploits auf Harvard möglich? (ROP!) | ||
+ | * Was ist ThreadEnvironmentBlock, | ||
+ | * 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/ | ||
+ | |||
+ | |||
+ | ====== 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 |