assignments/Assignment_001/readme.md

54 lines
2.5 KiB
Markdown

# Assignment: Java-Klasse analysieren und patchen
<!-- Points: 5 -->
[Musterlösung](solution/)
In diesem Assignment werden Sie Java-Klassen analysieren und so verändern, dass ein Flag ausgegeben wird. Hierzu verwenden wir den [Java Decompiler (JD)](http://java-decompiler.github.io/).
## Flags
Die Executables enthalten ein Geheimnis (Flag), das in der Form `FLAG{...}` ausgegeben wird, wenn Sie das richtige Passwort angeben. Leider kennen Sie das Passwort nicht.
_Beispiel:_
```console
$ ./password_check_1
Enter password: my_password
FLAG{supper_secret}
```
Ihre Aufgabe ist es, diese Geheimnisse aus den Dateien zu extrahieren. Sie können versuchen, das Passwort oder direkt das Flag zu finden. Ein Brute-Force-Angriff auf das Passwort ist aber nicht Teil dieser Übung -- wir betreiben hier Reverse-Engineering und kein Cracking ;-)
## Flags sammeln
Wenn Sie das Flag erhalten haben, so tragen Sie das Flag bitte auf der [CTF-Webseite](http://tank.informatik.hs-mannheim.de) ein. Bei der ersten Benutzung legt sich jedes Team einen Benutzer an, der wie das Team heißt.
## Aufgabe
Die folgende Datei gibt das Flag nicht aus, auch wenn Sie das richtige Passwort eingeben. Es ergibt also keinen Sinn, das Passwort aus der Datei extrahieren zu wollen.
* [flag_printer.jar](flag_printer.jar)<!-- binary -->
Deswegen werden wir die Java-Klassen dekompilieren und untersuchen.
Da es sich hier um ein Java-Archive (jar) handelt, können Sie es einfach mit `java -jar flag_printer.jar` starten.
Gehen Sie wie folgt vor:
* Installieren Sie den [Java Decompiler (JD)](http://java-decompiler.github.io/)
* Untersuchen Sie das vorliegende Java-Programm und finden Sie die Stelle an der eine Prüfung der Eingabe erfolgt.
* Schreiben Sie eine neue Klasse, die genauso heißt und dieselben Methoden hat, aber bei der Prüfung des Passwortes immer ein korrektes Passwort meldet.
* Ersetzen Sie im JAR die Original-Klasse durch ihre eigene.
* Starten Sie das Programm.
## Abgabe
Überlegen Sie sich eine sinnvolle Verzeichnis-Struktur, um dieses und die folgenden Assignments abzulegen.
* Schreibern Sie auf, was Sie über die vorhandenen Klassen herausgefunden haben.
* Schreiben Sie auf, wie Sie bei der Lösung der Aufgabe vorgegangen sind. Dies umfasst die eingegebenen Befehle und weitere Informationen, sodass ein fachkundiger Dritter Ihr Vorgehen nachvollziehen kann.
* Checken Sie die geänderte Klasse und das veränderte JAR ein.
Die Abgabe erfolgt über das Repository, das Ihrem Team zugeordnet ist.