Ein Projekt im Rahmen des Game Programming Seminars am HPI im Wintersemester 2019.
Dieses Readme beschreibt das gesamte Projekt und enthält außerdem die Beschreibung und Installationsanleitung der Serverkomponente (siehe Server).
Dieses Repo enthält einerseits den Code der Serverkomponente und außerdemdas Wiki unseres Projekts.
Im Rahmen dieses Seminars soll anhand von Spielprototypen demonstriert werden, wie Technologien missbraucht werden können. Wir versuchen in diesem Prototypen weitreichende Berechtigungen auf dem Smartphone des Spielers zu erlangen, um die gespielte Krimigeschichte adaptiv auf den Spieler anzupassen. Außerdem möchten wir die Grenze zwischen dem Spiel und der Realität des Spielers verwischen. Letztendlich möchten wir anhand des Spielprinzips (Interaktion durch Chat und GPS Daten) einerseits demonstrieren, dass solche Daten anfällig für Manipulation sind (indem wir den Spieler dazu zu bringen, ungewöhliche Dinge zu tun z.B. Besuche von (ungewöhnlichen) Orten, Aufstehen zu ungewöhnlichen Zeiten). Andererseits lenken wir Aufmerksamkeit darauf, dass vielen Menschen nicht bewusst ist, welche Daten man aus gewöhnlichen Standortdaten (die viele einfach preis geben) ableiten kann, so zB den Wohnort durch Messung des Standorts an einem Montag und Dienstag nachts um 2oo Uhr (Standort des Bettes = Wohnort).
Im Rahmen des Seminars haben wir ein Framework für text-basierte Spiele entworfen. Das Framework benötigt story.json
und story.py
seitens des Framework-Nutzers. Anschließend kann das so spezifizierte Spiel über Telegram mithilfe eines Chatbots gespielt werden. Dabei bietet unser Framework vor allem an, sich Zugriff auf das Telefon des Nutzers zu verschaffen, damit an dessen Daten zu kommen und mit diesen Daten die Story zu personalisieren. Durch Nutzen des Chatbots schaffen wir außerdem eine "Erzählerfigur", mit der der Spieler direkt in Kontakt treten kann.
Der Spieler übernimmt die Rolle eines frisch beförderten Kommissars. Er erhält von seinem Vorgesetzten Hauptkommissar Anweisungen. Diese erfüllt er mithilfe der App, um sich in der Story voranzuspielen. (siehe story.json)
- Ein Smartphone (Minimale Android API Version 23)
- Eine Telegram-Account
Die Software besteht aus 3 Hauptkomponenten, der datensammelnden App (im Folgenden "App" genannt), dem Chatbot (im Folgenden "Bot" genannt) und dem orchestrierendem Server (im Folgenden "Server" genannt).
Diese App ist der Hauptdatensammler des Spiels. Da wir über die Telegram-API nur an sehr begrenzte Daten kommen, versuchen wir mit dieser App an Berechtigungen auf dem Smartphone des Spielers zu erlangen. Die aus solchen Berechtigungen resultierenden Daten können wir dann über das Internet teilen und anhand dieser Daten das Verhalten des Bots anpassen.
Die App muss vom Spieler heruntergeladen werden, um den Telegram-Chat mit dem Bot zu starten (dabei wird ein Schlüssel übermittelt, damit die gesammelten Daten der App mit einem Telegram-User korreliert werden können). Für eine Liste der möglichen spionierten User Daten siehe Spied User Data
Der Telegram-Bot simuliert die Kommunikation des Hauptkommissars mit dem Spieler. Über ihn wird die (adaptive) Spielgeschichte erzählt und die Aufgaben des Hauptkommissars an den Spieler kommuniziert.
Der Server bietet sowohl für die App als auch für den Bot die notwendigen API Endpunkte. Er erhält Daten von der App und speichert und analysiert diese. Er liefert dem Bot die Story, bereits personalisiert für den jeweiligen User. Dafür verwaltet der Server sowohl die Grundstory als auch die Userdaten (persönliche Daten und story-relevante Daten wie aktuellen Spielstand).
Der Source-Code und Dokumentation des Servers ist in diesem Repo zu finden.
Voraussetzung ist ein Linux System mit installiertem python 3.8
./manage.sh install
um den Server zu installieren./manage.sh start
um den Server zu starten- für weitere Befehle
./manage.sh help
benutzen - siehe Bot Repo für Installation und Start des Bots
- nach Start von Server und Bot kann die App und damit das Spiel gestartet werden
Der Server wird durch eine Flask App (/app
) implementiert. Diese verwaltet verschiedene API-Endpunkte (/app/routes
). Außerdem wird eine Datenbank verwaltet. Deren ORM wird in /app/models
implementiert. Der Story-Inhalt und der Story-verwaltende Code liegt unter /app/story
.
Unsere App ist sehr datenhungrig. Deswegen startet die App per default in einem Sicherheitsmodus, der das Senden persönlicher Daten verhindert. Um das Spiel trotzdem spielen zu können, haben wir ein Postman package erstellt. Dieses bietet Mock-Daten an, welche die sonst von der App gestohlenen Daten ersetzen.
detective-game-no-app-walkthrough.json
mit Postman Desktop importieren- Die Postman Umgebungsvariable
server_ip
auf die Adresse des Rechners setzten, auf dem die Serverkomponente (der Code dieses Repos) läuft - Die App starten und "Kommissar Rex kontaktieren" tippen und in Telegram auf
STARTEN
tippen- alternativ (aber nicht empfohlen) kann komplett ohne App gespielt werden, indem die debug request
create user
gesendet wird und der erhaltenetelegram.me
Link geöffnet wird. Dann entfällt der nächste Schritt.
- alternativ (aber nicht empfohlen) kann komplett ohne App gespielt werden, indem die debug request
- mit der debug request
display all users
die eigene user id finden und in die Postman Umgebungsvariableuser_id
eintragen send mocked contacts
senden, um das Stehlen von Kontakten für "Personalisierung" zu mocken- Die Story spielen und neue Aufgaben erfüllen, indem die entsprechende Postman request geschickt wird
- die Aufgaben requests sind Story-chronologisch geordnet
- Achtung! - für den
take photo of cameras
task muss zuerst ein Bild in Postman ausgewählt werden - alternativ kann auch jederzeit der Sicherheitsmodus deaktiviert und die Aufgabe mit der App erfüllt werden, indem erst die Daten produziert werden und dann auf die Aufgabe getippt wird
Das Finale unseres Spiels ist der Highjack des Telgram Accounts des Nutzers durch die "Mafia".
Dies funktioniert offensichtlich nur, wenn der Sicherheitsmodus deaktiviert ist.
Es reicht jedoch, den Sicherheitsmodus ausschließlich für den Highjack zu deaktivieren, sodass keine weiteren persönlichen Daten gesendet werden
Bevor die Story endet (dies kann auch manuell mit der debug request set current story point
und dem Parameter end
hervorgerufen werden) muss:
- Der Sicherheitsmodus deaktiviert werden
- Die Telefonnummer in den Einstellungen der App gesetzt werden (auch falls schon die richtige Nummer da steht muss sie noch einmal bestätigt werden)
- Die App SMS Berechtigungen haben Disclaimer: Unser Highjack richtet keinen Schaden an, trotzdem sollte die "gehackte" Session danach in den Telegram Einstellungen entfernt werden
- Warum benutzen wir Telegram und simulieren die Kommunikation nicht auch in der App?
Da Telegram das Hauptkommunikationsmittel am HPI ist, hoffen wir durch das Integrieren dieser Plattform die Grenzen zwischen dem Programm und echten Personen zu verwischen (indem der Botaccount zwischen echten Kontakten auftaucht, die Nachrichten von echten Menschen und die des Bots in einer Push-Notification stehen, usw.). Außerdem spart uns diese Entscheidung die Arbeit an einem Chatprogramm, welche für einen Prototypen nicht notwendig ist. - Welche Annahmen wurden für den Prototypen getroffen?
Folgende Annahmen wurden getroffen, damit wir an der Kernidee des Spiels arbeiten konnten. Die Annahmen haben einfache, aber zeitintensive Lösungen, die zur Demonstration des Game Konzeptes nicht notwendig sind:
- Der Spieler nutzt bereits Telegram (dies ist ein HPI Seminar und der IM-Dienst des HPIs (unter Studierenden) ist Telegram) (Würde durch eigenen Chatclient in der App gelöst werden)
- Die App wird während des Spiels nicht vom Spieler deinstalliert (Würde durch "uninstall" Nachricht der App an den Server gelöst werden)
- Die App hat eine ununterbrochene Internetverbindung (Würde durch interne Queue in der App und regelmäßige Checks seitens des Servers gelöst werden)