assignments/Assignment_001
Thomas Smits e0c7002951 Update of exercises 2024-10-09 13:21:07 +02:00
..
solution Update of exercises 2024-10-02 15:10:42 +02:00
flag_printer.jar Update of exercises 2024-10-09 13:21:07 +02:00
readme.md Update of exercises 2024-10-02 15:10:42 +02:00

readme.md

Assignment: Java-Klasse analysieren und patchen

Musterlösung

In diesem Assignment werden Sie Java-Klassen analysieren und so verändern, dass ein Flag ausgegeben wird. Hierzu verwenden wir den Java Decompiler (JD).

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:

$ ./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 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.

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)
  • 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.