# Reverse Engineering (Wintersemester 2024/2025) ## 👋 Willkommen zum Kurs Reverse Engineering (REE) In diesem Kurs erfahren Sie, wie man einem unbekannten Binärartefakt (Programm, Virus, Payload) seine Geheimnisse entlocken kann. Hierzu werden Sie grundlegende Techniken der Analyse solcher Programme erlernen und diese Techniken verwenden, um die Funktionsweise von Programmen zu verstehen und Schwachstellen zu finden. Am Ende des Kurses werden Sie in der Lage sein, einfache CTFs (Capture The Flag) aus dem Bereich des Reverse Engineerings zu lösen und eigene kleinere Aufgaben für Ihre Mitstudierenden zu entwickeln, die diese dann lösen müssen. ## 📆 Assignments Hier finden Sie die wöchentlichen Assignments für die Vorlesung Reverse Engineering (RE). Die Assignments sind unten, zusammen mit dem Fälligkeitsdatum, aufgelistet. Einige dieser Assignments sind _benotet_, d.h. die Qualität Ihrer Ausarbeitung geht in die Gesamtnote für diesen Kurs ein. Sie erkennen die _benoteten Assignments an dem Abgabedatum_, bis zu dem Ihre Lösung hochgeladen sein muss. Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/software.md). | # | Ausgabe | Thema | Fällig am 📆 | Musterlösung | |-----|------------|----------------------------------------------------------------------------------------|----------------|----------------| | 1. | 02.10.2024 | [Java-Klasse analysieren und patchen](Assignment_001/readme.md) | | [✅](Assignment_001/solution/) | | 2. | 02.10.2024 | [Dateien mit `file` untersuchen (files.zip)](Assignment_002/readme.md) | | [✅](Assignment_002/solution/) | | 3. | 02.10.2024 | [Importe mit rabin2 untersuchen (payload_1)](Assignment_003/readme.md) | **08.10.2024** | | | 4. | 02.10.2024 | [Exports und Imports mit rabin2 untersuchen (payload_2.so)](Assignment_004/readme.md) | **08.10.2024** | | | 5. | 09.10.2024 | [Importe mit rabin2 untersuchen (payload_1b)](Assignment_005/readme.md) | | | ## 🎓 Benotung Die Benotung des Kurses erfolgt im Format Continuous Assessment (CA). Hierzu werden Ihre Leistungen während des gesamten Semesters bewertet und die Endnote ergibt sich aus den Einzelleistungen. Bewertet werden: * die erstellten Writeups und Lösungen zu den Assignments * die Erstellung neuer Aufgaben/CTFs durch die Teams (Peer-Aufgaben) * die Lösung der Peer-Aufgaben/CTFs durch die Teams Alle mit einem Abgabedatum gekennzeichneten Assignments sind Teil der Bewertung und müssen von Ihnen bearbeitet und fristgerecht abgegeben werden. ## 💻 Hilfreiche Links und Tipps * [Typische Sicherheitslücken](help/sicherheitsluecken.md) * [Compiler Explorer](https://godbolt.org/) * [x86 and amd64 instruction reference](https://www.felixcloutier.com/x86/index.html) * [System V AMD64 ABI Calling Convention](https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI) 1. `RDI` ⬅ 1st param (left to right) 2. `RSI` ⬅ 2nd param (left to right) 3. `RDX` ⬅ 3rd param (left to right) 4. `RCX` ⬅ 4th param (left to right) 5. `R8` ⬅ 5th param (left to right) 6. `R9` ⬅ 6th param (left to right) * Stack ⬅ excess params (right to left) * `RAX` ⮕ result * [Linux kernel syscall tables](https://syscalls.mebeim.net/?table=x86/64/x64/latest) * [Linux System Call Convention](https://en.wikibooks.org/wiki/X86_Assembly/Interfacing_with_Linux) * `RAX` ⬅ System call number 1. `RDI` ⬅ 1st param (left to right) 2. `RSI` ⬅ 2nd param (left to right) 3. `RDX` ⬅ 3rd param (left to right) 4. `R10` ⬅ 4th param (left to right) 5. `R8` ⬅ 5th param (left to right) 6. `R9` ⬅ 6th param (left to right) * `RAX` ⮕ result * [printf Formatierungszeichen](http://www2.hs-esslingen.de/~zomotor/home.fhtw-berlin.de/junghans/cref/FUNCTIONS/format.html) * [gdb Cheat Sheet](https://users.ece.utexas.edu/~adnan/gdb-refcard.pdf) ## 📚 Literatur zur Vorlesung * Sikorski, M. and Honig, A. (2012). Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software. No Starch Press. * Andriesse, D. (2018). Practical Binary Analysis: Build Your Own Linux Tools for Binary Instrumentation, Analysis, and Disassembly. No Starch Press. * Eagle C. and Nance K. (2020). The Ghidra Book: The Definitive Guide. No Starch Press. * Yurichev, D. (2019). Reverse Engineering for Beginners. [Online](https://beginners.re/main.html) * [Johannes Plötner, Steffen Wendzel (2012). Linux das umfassende Handbuch.](https://openbook.rheinwerk-verlag.de/linux/) * [Jürgen Wolf (2009). C von A bis Z.](https://openbook.rheinwerk-verlag.de/c_von_a_bis_z/) * [x86-64 Assembly Language Programming with Ubuntu](http://www.egr.unlv.edu/~ed/assembly64.pdf) * [Intel Dokumentation zu x86-64](https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html) * [System V ABI](https://raw.githubusercontent.com/wiki/hjl-tools/x86-psABI/x86-64-psABI-1.0.pdf) ## 📚 Weiteres Material * [Eine kurze Einführung in die C-Programmierung: C-Kurs](https://moodle.hs-mannheim.de/course/view.php?id=5208) * [Linux-Konsolen-Kurs: Schnitzel-Tool](https://github.com/informatik-mannheim/schnitzel)