Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 1 » Reversen (Übersicht)
Inhaltsverzeichnis
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