Hacken wir mal das Tribe-Log

Ark: Survival evolved ist mein derzeitiges Lieblingsspiel, in dem ich viel zu viel Zeit verbringe. Damit ich auch hier mit meinen Freunden zusammen spielen kann, habe ich kurzerhand einen kleinen Server aufgestellt. Seit Patch 243.0 gab es die Möglichkeit Notifications vom Gameserver zu senden und auszuwerten. Gerüchte und Versprechen von Seitens Wildcard versprachen, dass man auf diesem Weg das komplette Tribe-Log bekommen sollte. Wir haben nun Patch 264.53 und noch immer keine Lösung in Sicht. Warum dann nicht mal selbst was hacken?

Wenn ich weiß, dass niemand am Server spielt schalte ich ihn normalerweise ab um ein Verhungern der Dinos zu verhindern. Dabei fiel mir auf, dass das sog. Tribe Log mit den wichtigsten Ereignissen immer noch vorhanden ist – es muss also irgendwo auf der Platte liegen. Der erste Versuch wenn man unter Linux lebt ist natürlich grep auf eine Meldung des Logs:

Und wie es der Zufall so will hat grep -r „Rei demolished“ ein File in den Tiefen von ~/ShooterGame/Saved/SavedArks/ mit Namen 1255828861.arktribe ausfindig gemacht.

^A^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^P^@^@^@PrimalTribeData^@^@^@^@^@^E^@^@^@^S^@^@^@PrimalTribeData_14^@^L^@^@^@ArkGameMode^@^P^@^@^@PersistentLevel^@
^@^@^@TheIsland^@&^@^@^@/Game/Maps/TheIslandSubMaps/TheIsland^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@TribeData^@^O^@^@^@StructProperty^@^H<90>^@^@^@^@^@^@
^@^@^@TribeData^@
^@^@^@TribeName^@^L^@^@^@StrProperty^@^O^@^@^@^@^@^@^@^K^@^@^@Stargazers^@^R^@^@^@OwnerPlayerDataID^@^O^@^@^@UInt32Property^@^D^@^@^@^@^@^@^@/^B^C^H^@^@^@TribeID^@^L^@^@^@IntProperty^@^D^@^@^@^@^@^@^@}mJ^R^@^@^@MembersPlayerName
^@^N^@^@^@ArrayProperty^@^U^@^@^@^@^@^@^@^L^@^@^@StrProperty^@^B^@^@^@^E^@^@^@Savi^@^D^@^@^@Rei^@^T^@^@^@MembersPlayerDataID^@^N^@^@^@ArrayProperty^@^L^@^@^@^@^@^@^@^O^@^@^@UInt32Property^@^B^@^@^@^^<99>(*/^B^C^L^@^@^@TribeAdmins^@^N^@^@^@ArrayProperty^@^L^@^@^@^@^@^@^@^O^@^@^@UInt32Property^@^B^@^@^@/^B^C^^<99>(* ^@^@^@TribeLog^@^N^@^@^@ArrayProperty^@^^<8E>^@^@^@^@^@^@^L^@^@^@StrProperty^@<90>^A^@^@Y^@^@^@Day 810, 22:08:46: Rei demolished a 'Stone Foundation'!</>^@Y^@^@^@Day 810, 22:11:03: Rei demolished a 'Stone Foundation'!</>^@V^@^@^@Day 810, 22:17:23: Rei demolished a 'Stone Ceiling'!</>^@U^@^@^@Day 810, 22:19:05: Rei demolished a 'Stone Pillar'!</>^@V^

Irgendwie gab es hier einen Moment von Hoffnung, dass es sich bei diesem File um etwas handelt, das eine Datenbank darstellt – doch ‚file‘ machte die Hoffnung mit ‚data‘ einfach nur zunichte. Der nächste Versuch galt ’strings‘, da ich ja das File anhand der entsprechenden Zeichenketten fand:

# strings 1255828861.arktribe
PrimalTribeData
PrimalTribeData_14
ArkGameMode
PersistentLevel
TheIsland
/Game/Maps/TheIslandSubMaps/TheIsland
TribeData
StructProperty
TribeData
TribeName
StrProperty
Stargazers
OwnerPlayerDataID
UInt32Property
TribeID
IntProperty
MembersPlayerName
ArrayProperty
StrProperty
Savi
MembersPlayerDataID
ArrayProperty
UInt32Property
TribeAdmins
ArrayProperty
UInt32Property
TribeLog
ArrayProperty
StrProperty
Day 810, 22:08:46: Rei demolished a 'Stone Foundation'!</>
Day 810, 22:11:03: Rei demolished a 'Stone Foundation'!</>
Day 810, 22:17:23: Rei demolished a 'Stone Ceiling'!</>
Day 810, 22:19:05: Rei demolished a 'Stone Pillar'!</>
Day 810, 22:23:04: Rei demolished a 'Stone Ceiling'!</>
Day 810, 22:24:34: Rei demolished a 'Stone Pillar'!</>
Day 810, 22:29:12: Rei demolished a 'Stone Wall'!</>
....
LogIndex
IntProperty
None
None

Volltreffer. tail, head und etwas sed waren dann die Werkzeuge der Wahl um mir den letzten Log-Eintrag zu holen.

strings ${thefile} | tail -n 5 | head -n 1 | sed 's/<[^>]*>//g'

Danach kam nur noch ein Zusammensetzen der Teile: Inotify berichtet von Änderungen der Datei und war mein Trigger. Curl war dann dafür zuständig die Notifications an den selben Web-Dienst weiterzuleiten wie der ARK Server selbst:


#!/bin/sh

thefile=/path/to/your/tribenumber.arktribe
 key=secret-webnotifypass
 title=TribeLog
 notifyURL=https://my.super.cool/ark.php

while inotifywait -e modify -e attrib "${thefile}" ; do
 message=`strings ${thefile} | tail -n 5 | head -n 1 | sed 's/<[^>]*>//g'`
 curl --data "key=${key}&notetitle={$title}&steamid=foo&message=${message}" ${notifyURL}
 done

Folgende Sachen müssen angepasst werden:

  • thefile ist der Pfad zum arktribe file.
  • key ist der ‚key‘ aus AlarmPostCredentials.txt des ARK-Servers
  • title ist der Titel den die Nachricht haben soll
  • notifyURL ist die url zum Webseervice aus AlarmPostCredentials.txt

Author:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Notify me of followup comments via e-mail. You can also subscribe without commenting.