Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 1 » Assembly
Prüfer: Tilo Müller
Beisitzer: Mykola Protsenko
Atmosphäre war sehr entspannt, Tilo ist geduldig, hilft einem auf die Sprünge, und ist absolut fair.
Assembly war auf Blatt gedruckt, drunter leere Stacks, die man beschreiben durfte, auf der Rückseite wurden dann die restlichen Sachen aufgemalt. Für den Exploit gab es im Endeffekt das Bild aus der Vorlesung mit einer eingezeichneten Position von ESP und EBP und man musste das Bild im weiteren Verlauf vervollständigen.
Hinweis: ich übernehme keine Garantie für Vollständigkeit oder Richtigkeit.
Assembly
32 bit; quersumme; gcc unoptimiert
- Calling Conventions erklären
(Was macht Windows bei 'nem printf? → da stand ich aufm Schlauch: da wird explizit auf cdecl gewechselt)
- Parameteranzahl/-typ
- div-Befehl erklären (Warum wird edx mit 0x0 initialisiert? → weil unsigned)
- Basic Blocks einzeichnen (auch mit Pfeilen wo die jmps hingehen)
- Stackframe zeichnen
- Was passiert bei Framepointer Omission (FPO)? → anstatt ebp-relativ esp-relativ adressieren
Linear sweep + Recursive traversal
- Wie funktionieren beide Algorithmen?
- Wie kann man Linear Sweep besser dastehn lassen als Recursive Traversal? → worauf er raus wollte war, dass RT dem Code rekursiv folgt und ich letztlich durch rekursive Sprünge auf Daten den RT schlecht aussehen lassen kann, weil LS dem nicht folgt, RT aber schon und damit dann crasht.
Aufbau eines (x86-)Befehls
- Wie groß kann so ein Befehl maximal werden? → 15 Byte
- Wie ist der aufgebaut? (Das Bild aus der Vorlesung hinmalen und auch so ungefähr wissen wie groß die einzelnen Teile werden können), SIB wollte er bei mir noch genauer wissen (also 2 Bit Scale, 3 Index (Register), 3 Base (Register); welche Werte kann Scale annehmen und warum?) und wofür Displacement und Immediate verwendet werden.
Adressräume
- Wie schaut der Adressraum auf 64 Bit Architekturen aus?
- Wo liegen da jetzt Heap, Stack, Daten, …?
- Unterschiede zwischen linearem, logischen und physischen Adressraum erklären
- Was wird heute eingesetzt? (→ Long Mode de facto ohne Segmentierung)
Werkzeuge
- Wie kann ich mich gegen Debugging schützen? (Im konkreten Fall wollte er auf Windows raus → Folie aus dem Werkzeugeteil)
Softwareschutz (in meinem Fall Obfuskierung)
- Virtual Blackbox Obfuscator (Definition)
- Quines
- Kann man Quines auch obfuskieren? (Ja, und wenn man die Def von dem Virtual Blackbox Obfuscator her nimmt, dann ist das auch vollkommen ok und perfekt obfuskiert → Schwäche der Definition!)
Exploit (off by one)
- Stackframes ergänzen
- Was passiert, wenn die zwei Epiloge nicht direkt aufeinander folgen? → der Exploit ist dann nicht mehr möglich, weil ich mir alles aufm Stack zerschieße
- Was passiert bei FPO? → dann kann ich den Exploit nicht mehr fahren, weil dann der Basepointer irgendwo hinzeigt, aber nicht mehr von mir kontrolliert wird.