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.

Link zu der Vergleichsansicht

pruefungen:hauptstudium:ls1:re_2014 [24.07.2014 08:08] – Link zu titanpad mit aktuellem Zwischenstand maltepruefungen: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üferTilo Müller 
 +BeisitzerJohannes 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,   
 +  * 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