Fessie Räumt Auf Konservierungsprojekt

Ihr erinnert euch sicher alle an das legendäre „Fessie räumt auf“-Let’s-Play von @Marah . https://rocketbeans.tv/mediathek/video/17713

Fessie räumt auf ist ja inzwischen deutlich über 20 Jahre alt und inzwischen zerfällt das Spiel ein bisschen. Es läuft nicht mehr nativ ohne Weiteres auf heutigen Computern. Der Link zur offiziellen Website gibt auch nur noch ein 404 zurück. Spontanstream-Sammelthread - #33 von gamebuddy Neuer Content ist nicht mehr zu erwarten. Die Highscore-Funktion ist seit zwanzig Jahren ohne Funktion.

Es gilt daher hochgradig, das Spiel vorm Verschwinden zu retten.

Download-Möglichkeiten

Im Wesentlichen rettet uns das Internet Archive. Es gibt archivierte Downloads von der Original Website

Es gab auch einzelne Level als Download. Ich glaube, dass die aber in neueren Versionen des Spiel integriert sind. https://web.archive.org/web/20040803230807/http://www.fessie.de/download/download_level.php

Es gibt auch einen Upload des Spiels: https://archive.org/details/fes-fessie_raeumt_auf

Lauffähigkeit auf modernen Geräten

Die gute Nachricht: Man kann kann das Spiel auch auf modernen Geräten spielen:

  • Linux/SteamOS (und vermutlich MacOS): Läuft mit Wine (ich habe in einem 1024 mal 768 virtuellen Desktop das Setup ausgeführt und das Spiel gestartet)
  • Android: Das Spiel läuft auch hier in wine mit der App Winlator Releases · brunodev85/winlator · GitHub Allerdings muss man sich eine virtuelle Touchscreen-Tastatur für die Pfeiltasten, Enter (Menü), Shift (Feuer speien), Ctrl (berühren) und Leertaste (Bombe platzieren) anlegen.
  • Windows: Marah hat das Spiel nach eigenen Angaben in den Kommentaren im Win 98 Emulator gespielt
  • Windows 10/11: Von @fessie mit dgVoodoo 2 lauffähig gemachte Version https://mirrors.max-reimann.de/games/fessie/fessie-raeumt-auf.zip
  • Web: Noch nicht getestet, aber theoretisch kann man Windows-Programme mit boxedwine auch im Browser laufen lassen. Web Build Configuration – Boxedwine

Content

Es gibt noch einen Trainer für das Spiel. Fessie räumt auf - Cheats für PC Ich habe ihn noch nicht getestet.

Einem YouTube-Video zufolge hat es jemand geschafft, Level für das Spiel zu erstellen.

Das Format für die Level habe ich mir mal durch Ausprobieren mit einem Hexeditor erschlossen. Eine Doku dazu habe ich irgendwo rumliegen. Eventuell finde ich die noch.

Es gibt einen Fessie-Klon für den Browser. Der hat auch einen Level-Editor. Eventuell könnte man ein Script basteln, das in klassische Fessie-Dateien für das Original-Spiel übersetzt. GitHub - DanielEnglisch/FessieReborn: Semesterprojekt in WDP3: FessieReborn

@etothepii hat für .NET 9 unter Windows einen Converter entwickelt, um die Leve im Tiled Map Editor bearbeiten zu können. GitHub - etothepii4/Fessie-Level-Converter: level converter for the "old" pc game "Fessie Räumt auf"

Highscore

Hier kenne ich keine Antwort. Das Spiel erzeugt Codes, mit denen man sich auf der Website unter einer URL, die inzwischen 404 liefert, eintragen konnte. Es ist mir nicht gelungen, die Berechnung des Codes rauszufinden. Sonst könnte man eine eigene Highscore-Seite bauen … Aber dann hätten die Highscores auch keine Bedeutung mehr.

Update: @fessie hat die Code-Generierung ausreichend zurückentwickelt, um eine funktionierende Highscore-Seite zu bauen:

Die lokale Highscore ist in C:\data.fcg in der klassischen und h.db in der inoffiziellen Version gespeichert. Nach 15 Bytes Konfiguration (darunter die Zahl freigespielte Level im zwölften Byte) Folgen zehn Highscore-Einträge, die jeweils dieses Format haben:

Mitmachen

Habt ihr noch Material und Ideen zur Rettung von Fessie räumt auf? Her damit!

2 „Gefällt mir“

Solche Projekte finde ich klasse. :slight_smile:

Leider sind meine Kenntnisse in IDA Pro und ähnlichen Tools komplett eingestaubt, ich kann also nicht wirklich beim Highscore-Code helfen. :see_no_evil:

1 „Gefällt mir“

Ich hatte es mal in Ghidra geöffnet. Ich meine mich auch zu erinnern, eine Stelle entdeckt zu haben, die ich für die Code-Berechnung hielt. Ich habe aber nichts verstanden und kam da nicht weiter. Es war mein erster Versuch mit Ghidra.

Wenn ich eines Tages meine Dokumentation zu dem Level-Dateiformat wieder auftreibe, wäre das ein zugänglicheres Mitmachprojekt.

Ich hab einen Converter gebastelt, der Fessie-Level in andere Formate konvertiert.
https://github.com/etothepii4/Fessie-Level-Converter

Das war einfach ein privates Interesse und Ich hab zufällig den Thread hier gesehen.
Mit dem Converter könnt ihr die Level in andere Formate wie JSON und .tmx für den Tiled Map Editor konvertieren, und zurück.
Vorallem große Level lassen sich mit Editoren wie Tiled dann doch einfacher bearbeiten als im JSON oder Hex-Editor zu fummeln.

Der Converter läuft unter .NET 9 nur auf Windows.
Ganz Basic von der Oberfläche mit ein paar Mausklicks bedienbar.
Das macht es einfach, Level umzuwandeln und dann zu bearbeiten.

Für mehr Infos und Anleitungen, werft gern einen Blick auf die Github Seite.
Dort ist alles beschrieben, auch die Level-Struktur.
(@Martin, du kannst ja gern gegenchecken ob sich das Level-Format mit deinen Findings deckt)
Falls ihr doch Bugs/Probleme findet, meldet die mir auch gern, ich hab sicherlich mal was übersehen.

2 „Gefällt mir“

Beispielsweise hat es mich schon immer gewundert, wo in Level 9 die ganzen Explosionen am Anfang stattfinden. Man hört es immer nur, aber sieht nix.
Jetzt ist mir klar, was passiert :wink:

2 „Gefällt mir“

Ich habe da tatsächlich vor einigen Jahren mal dran rumgebastelt (2021) und es für Windows 10/11 wieder lauffähig bekommen. Außerdem hatte ich die Online-Highscore-Funktionen entfernt, da dieser ja nicht mehr existiert…

Hier ist nochmal das Original:
https://mirrors.max-reimann.de/games/fessie/fes-fessie_raeumt_auf.zip

Und hier die inoffiziell aktualisierte Version:
https://mirrors.max-reimann.de/games/fessie/fessie-raeumt-auf.zip

Unter anderem hatte ich dgVoodoo 2 dafür genutzt, welches deshalb mit auf dem Exit-Screen zu sehen ist. Dafür hatte ich zwar auch eine schriftliche Erlaubnis eingeholt, jedoch kein passendes Forum gefunden, um das mal irgendwo zu erwähnen - naja, bis jetzt… :tada: Bei FES und Connecta hatte ich ebenfalls angefragt, ob man nicht ein Interesse daran hätte, das Spiel weiterhin bzw. wieder zum Download anzubieten, aber leider nie eine Antwort erhalten. :disappointed:

4 „Gefällt mir“

Das ist ja geil! Danke. Wie hast du die Online-Highscore-Funktion ausgebaut? Könnte man stattdessen die URL ändern und das selbst irgendwo hosten?

1 „Gefällt mir“

Gute Frage, ist ja schon wieder ein paar Jahre her… Ich nutze unterschiedliche Tools für derartige Zwecke, müsste ich nochmal durchprobieren.

Die URL hatte ich aber dokumentiert - diese lautet in der alten Version:
http://www.fessie.de/highscore.php3?score=%d&name=%s&code=%s

Es wäre für mich kein Problem, eine entsprechende PHP-Schnittstelle inkl. Frontend zu basteln und auf einer Sub-Domain von mir zu hosten, allerdings kenne ich den Algorithmus für die Codes aus dem Spiel nicht.

Dieser musste damals hier eingegeben werden:
https://web.archive.org/web/20011224062337/http://www.fessie.de/highscore/highscore_new.php

Und hier wurden die Ergebnisse dargestellt:
https://web.archive.org/web/20011216104718/http://www.fessie.de:80/highscore/highscore.php

Der Inhalt der Highscore-Datei (ursprünglich „data.fcg“, in meiner Version „h.db“) bringt einen hier nicht direkt weiter - vielleicht wurde das irgendwie über einen Zeichensatz bzw. die Nummern codiert, keine Ahnung…:

Ich kann ja einfach mal versuchen, den Webmaster von der Fessie-Seite zu erreichen - vielleicht existieren ja noch Backups von der ursprünglichen Website… :thinking::pray:

3 „Gefällt mir“

Von Connecta AG hab ich tatsächlich vor 2 Monaten eine Antwort erhalten,
allerdings mit der Info dass sie jegliche Game Files längst nichtmehr haben / finden.

1 „Gefällt mir“

Toll, die habe ich in meiner Mail gestern auch nochmal in CC genommen… - naja, vielleicht wird jetzt nochmal gründlich gesucht, um sich die Anfragen zu ersparen :joy:

Habe an die Marketingreferentin der FES Frankfurt sowie alle 3 im Laufe der Zeit beteiligten Webdesigner geschrieben, vielleicht findet sich irgendwo noch was.

Habe gestern Abend aber auch schon angefangen, nach dem Code für die Berechnung zu suchen und schon brauchbare Ansätze gefunden. Eventuell wird das bis zum Wochenende etwas.

2 „Gefällt mir“

Find das irgendwie voll cool, auch wenn mich das Spiel nicht wirklich interessiert. Macht weiter so! Die Angeschriebenen werden sicher überrascht gewesen sein. :smiley:

3 „Gefällt mir“

Kleines Update: der Code ist geknackt! :tada:*

Für 2001 finde ich den doch recht aufwendig, aber dank KI ging es vergleichsweise schnell. Veröffentlichen werde ich den natürlich nicht, da der Online-Highscore ja keinen Sinn mehr macht, wenn jeder beliebige Werte reinschummeln kann… :thinking:

Eine funktionierende Highscore-Seite mit Datenbank gibt es ebenfalls schon - die passe ich aber erstmal noch dem Design des Spiels an: https://fessie.max-reimann.de/

Wenn die Seite fertig ist, lade ich auch die neue Version des Spiels hoch, wodurch man den Highscore dann wieder übermitteln und einsehen kann. :hugs:

Da die Seite eh nur einen Zweck hat, muss es ja nicht nur auf die TOP 10 oder so beschränkt, sondern kann ruhig ein Bisschen mehr zum runterscrollen sein… :man_shrugging:

Soltte man vielleicht lieber noch einen Namensfilter für bestimmte Begriffe einbauen? :see_no_evil:

EDIT: * zumindest der wichtige Teil für die Serverkomponente. Die Codes zu reproduzieren bringt nichts, da dies für die serverseitige Validierung unbrauchbar ist…

2 „Gefällt mir“

Hey Sehr cool!

Du wirst nur nicht verhindern können dass künstliche High-Score-Werte in der Tabelle landen. Da die Levels sich sehr leicht editieren lassen. Und mit meinem Tool noch einfacher eigene Level erstellen lassen. Da kannst du den Score so hoch treiben wie du magst.
Keiner kann nachkontrollieren ob du die Orginallevel gespielt hast.

Da kannst du den Code auch veröffentlichen.

3 „Gefällt mir“

Ja, das ganze Konzept dieser Liste ist eigentlich prinzipbedingt zum Scheitern verurteilt - ein böser Akteur reicht schon, um die ganze Liste kollabieren zu lassen.

Insofern kann ich da …

… nur zustimmen; am Ende macht’s keinen Unterschied, aber so hat die Welt wenigstens einen weiteren Erkenntnisgewinn zu verzeichnen :wink:

2 „Gefällt mir“

Ja, das ganze Konzept dieser Liste ist eigentlich prinzipbedingt zum Scheitern verurteilt - ein böser Akteur reicht schon, um die ganze Liste kollabieren zu lassen.

Ja, gut - die Frage ist, wie viel Aufwand jemand dafür betreiben würde… Aus dem Original-Code per Skript entsprechende Anfrage an der Server zu generieren, ist auf jeden Fall einfacherer, als aus dem Spiel heraus. :grimacing:

Hier im Forum geht es ja eigentlich nur darum, dass man das Spiel erhalten möchte und dazu gehört prinzipiell auch der Online-Highscore. :man_shrugging:

so hat die Welt wenigstens einen weiteren Erkenntnisgewinn zu verzeichnen :wink:

Deshalb hier erstmal ein paar Infos dazu:

Es gibt 2 verschiedene Komponenten im Spiel:

  1. der lokale Highscore (siehe Screenshots aus meiner ursprünglichen Antwort)
  2. die lokale Code-Generierung zur Übermittlung

Der Code, welcher lokal erzeugt und dann an den Server übergeben wird, berechnet sich erstaunlich komplex aus dem Namen in Kleinbuchstaben, dem Score sowie einem Zeitstempel. Es finden hier mehrere Zeichentransformationen statt und es gibt etliche Fallback-Schleifen für alle erdenklichen Szenarien. Nur durch das Dekompilieren, also ohne den originalen Quelltext, war es mir auch mit bester KI-Unterstützung nicht möglich, die Codes brauchbar zu reproduzieren. Wer sich den angucken möchte, kann einfach in Ghidra oder IDA zur Stelle mit der URL springen. :wink:

Da die Codes mit einem Zeitstempel berechnet werden, welchen der Server aber nicht exakt kennen kann und man den Highscore auf der alten Seite ja auch zeitverzögert manuell eingeben konnte, habe ich es mit einem weniger komplexen Ansatz versucht. Tatsächlich lässt sich aus allen (zumindest mit allen getesteten) Codes eine entsprechende Prüfsumme generieren, die eine Validierung ermöglicht. Ich gehe mal davon aus, dass die ursprüngliche Server-Koponente auch nicht viel komplexer war (würde die trotzdem gerne mal sehen :nerd_face:) - schließlich handelt es sich hier um eine Freeware aus 2001 für Kinder… :face_with_monocle:

In der heutigen Zeit müsste man eigentlich mit User-IDs, Sessions, IPs und richtigen Hash-Berechnungen inkl. Salt arbeiten. Das lässt sich ohne den Quelltext aber auch nicht mehr einfach integrieren, man könnte allenfalls eine neue Engine schreiben - in meinen Augen etwas unverhältnismäßig. :sweat_smile:

2 „Gefällt mir“

Am Ende bringt das alles nichts, weil der Server keine Möglichkeit hat, zu verifizieren, dass die Highscore-Zahl, die durch diese ganzen Prozesse nur (immer komplexer) „aufgebauscht“ wird, auch tatsächlich aus dem Spiel(fortschritt) stammt.

Das meinte ich mit „ist prinzipbedingt zum Scheitern verurteilt“ – man kann’s den Leuten nur schwerer machen, beliebige Highscore-Codes zu erzeugen, aber mit der aktuellen technischen Ausgangslage Betrug nicht verhindern.

Edit: … und es reicht eben ein Einziger mit genug Freizeit und Motivation, das ganze Konzept einer solchen Highscoreliste dann kaputt zu machen. Ich würde heutzutage keine offizielle automatische Highscore-Liste im Netz mehr anbieten, ehrlich gesagt; klar, wenn dein Game keiner kennt ist die Gefahr, ge0wned zu werden gering, aber wenn am Ende irgendwelcher (evtl. sogar strafrechtlich relevanter) Scheiß in deiner Liste für alle einsehbar steht, weil irgend ein Skriptkiddie das lustig findet, hast du trotzdem die Arbeit. Sollen die Leute doch einfach ihre angeblichen Highscores auf Social Media posten mit passendem Hashtag und Screenshot :wink:

3 „Gefällt mir“

Also hast du den Berechnungs-Code zur Übermittlung jetzt nicht ganz geknackt, sondern ein brauchbares analoges Verhalten hingekriegt? Versteh ich das richtig?

1 „Gefällt mir“

Also augenscheinlich lässt sich die Berechnung der Codes aus dem ganzen Dekompilierten Code rekonstruieren (wobei da halt viele Funktionieren keinem bekannten Standard entsprechen) und ich hatte auch per KI eine Funktion hinbekommen, die solche Codes ausspuckt - allerdings konnte ich die Codes nicht einfach mal schnell mit den echten abgleichen, da auch der Zeitstempel passen müsste und dieser für mich während des Spiels nicht exakt ermittelbar ist (x32dbg macht leider auch nur den fertigen Code sichtbar)… :expressionless:

Die ursprünglich Serverkomponente hat den Code höchstwahrscheinlich nicht auseinander gebaut und Name, Score sowie Zeitstempel bekommen, sondern diesen Code nur zur Validierung der Anfrage genutzt - deshalb mussten auch alle 3 Teile an den Server übergeben bzw. dort eingetippt werden. :face_with_monocle:

Exakte Abgleiche (über Score + Name und dann per sicherem Hash mit Salt) waren damals noch nicht so verbreitet - selbst heute findet man immer wieder noch Passwörter, die nur mit einem einfachen Hash „verschlüsselt“ bzw. somit nur codiert sind. Die Generierung der Codes selbst wurde wohl nur so aufwendig gemacht, damit sich diese nicht bei gleichem Score und Namen wiederholen sowie die Daten im Klartext darstellen und von jedem manipuliert werden können.

Ich habe zumindest dank KI einen funktionierenden Validator hinbekommen, der die tatsächlich in den Codes integrierten Prüfsummen validieren kann (mehrfach getestet) und die verwendeten Codes dann mit in der Datenbank speichert. So scheint die originale Serverkomponente ebenfalls gearbeitet zu haben - mehr ist halt nicht drin. :man_shrugging:

Wenn man zeitgemäße Sicherheit haben möchte, und nicht nur eine kleine „Spielerei“ bzw. Rekonstruktion dieser veralteten Pseudo-Sicherheit, dann sollte man wohl eine neue Engine basteln bzw. das Spiel bspw. in Unity nachbauen und bei Steam anbieten… :sweat_smile:

2 „Gefällt mir“


Obscurity, not Security!

1 „Gefällt mir“

Ah okay, schade.
Wäre safe schön gewesen die orginale Logik mal zu wissen, der Nostalgie wegen.
Gibt ja genug Spiele aus der Zeit die sich garnicht die Mühe machen irgendwas zu hashen.

1 „Gefällt mir“