{"id":1613,"date":"2017-08-16T14:39:07","date_gmt":"2017-08-16T12:39:07","guid":{"rendered":"http:\/\/my.stargazer.at\/?p=1613"},"modified":"2017-08-17T08:50:02","modified_gmt":"2017-08-17T06:50:02","slug":"hacking-the-tribe-log","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2017\/08\/16\/hacking-the-tribe-log\/","title":{"rendered":"Hacken wir mal das Tribe-Log"},"content":{"rendered":"<p>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\u00f6glichkeit Notifications vom Gameserver zu senden und auszuwerten. Ger\u00fcchte 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\u00f6sung in Sicht. Warum dann nicht mal selbst was hacken?<\/p>\n<p>Wenn ich wei\u00df, 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 &#8211; es muss also irgendwo auf der Platte liegen. Der erste Versuch wenn man unter Linux lebt ist nat\u00fcrlich grep auf eine Meldung des Logs:<\/p>\n<p>Und wie es der Zufall so will hat <em>grep -r &#8222;Rei demolished&#8220;<\/em> ein File in den Tiefen von ~\/ShooterGame\/Saved\/SavedArks\/ mit Namen 1255828861.arktribe ausfindig gemacht.<\/p>\n<pre><code>^A^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^P^@^@^@PrimalTribeData^@^@^@^@^@^E^@^@^@^S^@^@^@PrimalTribeData_14^@^L^@^@^@ArkGameMode^@^P^@^@^@PersistentLevel^@\r\n^@^@^@TheIsland^@&amp;^@^@^@\/Game\/Maps\/TheIslandSubMaps\/TheIsland^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@\r\n^@^@^@TribeData^@^O^@^@^@StructProperty^@^H&lt;90&gt;^@^@^@^@^@^@\r\n^@^@^@TribeData^@\r\n^@^@^@TribeName^@^L^@^@^@StrProperty^@^O^@^@^@^@^@^@^@^K^@^@^@Stargazers^@^R^@^@^@OwnerPlayerDataID^@^O^@^@^@UInt32Property^@^D^@^@^@^@^@^@^@\/^B^C^H^@^@^@TribeID^@^L^@^@^@IntProperty^@^D^@^@^@^@^@^@^@}mJ^R^@^@^@MembersPlayerName\r\n^@^N^@^@^@ArrayProperty^@^U^@^@^@^@^@^@^@^L^@^@^@StrProperty^@^B^@^@^@^E^@^@^@Savi^@^D^@^@^@Rei^@^T^@^@^@MembersPlayerDataID^@^N^@^@^@ArrayProperty^@^L^@^@^@^@^@^@^@^O^@^@^@UInt32Property^@^B^@^@^@^^&lt;99&gt;(*\/^B^C^L^@^@^@TribeAdmins^@^N^@^@^@ArrayProperty^@^L^@^@^@^@^@^@^@^O^@^@^@UInt32Property^@^B^@^@^@\/^B^C^^&lt;99&gt;(* ^@^@^@TribeLog^@^N^@^@^@ArrayProperty^@^^&lt;8E&gt;^@^@^@^@^@^@^L^@^@^@StrProperty^@&lt;90&gt;^A^@^@Y^@^@^@Day 810, 22:08:46: Rei demolished a 'Stone Foundation'!&lt;\/&gt;^@Y^@^@^@Day 810, 22:11:03: Rei demolished a 'Stone Foundation'!&lt;\/&gt;^@V^@^@^@Day 810, 22:17:23: Rei demolished a 'Stone Ceiling'!&lt;\/&gt;^@U^@^@^@Day 810, 22:19:05: Rei demolished a 'Stone Pillar'!&lt;\/&gt;^@V^<\/code><\/pre>\n<p>Irgendwie gab es hier einen Moment von Hoffnung, dass es sich bei diesem File um etwas handelt, das eine Datenbank darstellt &#8211; doch &#8218;file&#8216; machte die Hoffnung mit &#8218;data&#8216; einfach nur zunichte. Der n\u00e4chste Versuch galt &#8217;strings&#8216;, da ich ja das File anhand der entsprechenden Zeichenketten fand:<\/p>\n<pre><code># strings 1255828861.arktribe\r\nPrimalTribeData\r\nPrimalTribeData_14\r\nArkGameMode\r\nPersistentLevel\r\nTheIsland\r\n\/Game\/Maps\/TheIslandSubMaps\/TheIsland\r\nTribeData\r\nStructProperty\r\nTribeData\r\nTribeName\r\nStrProperty\r\nStargazers\r\nOwnerPlayerDataID\r\nUInt32Property\r\nTribeID\r\nIntProperty\r\nMembersPlayerName\r\nArrayProperty\r\nStrProperty\r\nSavi\r\nMembersPlayerDataID\r\nArrayProperty\r\nUInt32Property\r\nTribeAdmins\r\nArrayProperty\r\nUInt32Property\r\nTribeLog\r\nArrayProperty\r\nStrProperty\r\nDay 810, 22:08:46: Rei demolished a 'Stone Foundation'!&lt;\/&gt;\r\nDay 810, 22:11:03: Rei demolished a 'Stone Foundation'!&lt;\/&gt;\r\nDay 810, 22:17:23: Rei demolished a 'Stone Ceiling'!&lt;\/&gt;\r\nDay 810, 22:19:05: Rei demolished a 'Stone Pillar'!&lt;\/&gt;\r\nDay 810, 22:23:04: Rei demolished a 'Stone Ceiling'!&lt;\/&gt;\r\nDay 810, 22:24:34: Rei demolished a 'Stone Pillar'!&lt;\/&gt;\r\nDay 810, 22:29:12: Rei demolished a 'Stone Wall'!&lt;\/&gt;\r\n....\r\nLogIndex\r\nIntProperty\r\nNone\r\nNone<\/code><\/pre>\n<p>Volltreffer. <em>tail<\/em>, <em>head<\/em> und etwas <em>sed<\/em> waren dann die Werkzeuge der Wahl um mir den letzten Log-Eintrag zu holen.<\/p>\n<pre><code>strings ${thefile} | tail -n 5 | head -n 1 | sed 's\/&lt;[^&gt;]*&gt;\/\/g'<\/code><\/pre>\n<p>Danach kam nur noch ein Zusammensetzen der Teile: Inotify berichtet von \u00c4nderungen der Datei und war mein Trigger. Curl war dann daf\u00fcr zust\u00e4ndig die Notifications an den selben Web-Dienst weiterzuleiten wie der ARK Server selbst:<\/p>\n<pre><code>\r\n#!\/bin\/sh\r\n\r\nthefile=\/path\/to\/your\/tribenumber.arktribe\r\n key=secret-webnotifypass\r\n title=TribeLog\r\n notifyURL=https:\/\/my.super.cool\/ark.php\r\n\r\nwhile inotifywait -e modify -e attrib \"${thefile}\" ; do\r\n message=`strings ${thefile} | tail -n 5 | head -n 1 | sed 's\/&lt;[^&gt;]*&gt;\/\/g'`\r\n curl --data \"key=${key}&amp;notetitle={$title}&amp;steamid=foo&amp;message=${message}\" ${notifyURL}\r\n done<\/code><\/pre>\n<p>Folgende Sachen m\u00fcssen angepasst werden:<\/p>\n<ul>\n<li>thefile ist der Pfad zum arktribe file.<\/li>\n<li>key ist der &#8218;key&#8216; aus AlarmPostCredentials.txt des ARK-Servers<\/li>\n<li>title ist der Titel den die Nachricht haben soll<\/li>\n<li>notifyURL ist die url zum Webseervice aus AlarmPostCredentials.txt<\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>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\u00f6glichkeit Notifications vom Gameserver zu senden und auszuwerten. Ger\u00fcchte und Versprechen von Seitens Wildcard versprachen, dass man auf diesem Weg [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1532,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8],"tags":[619,389,22],"class_list":["post-1613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-related-stuff","category-virtual-worlds","tag-ark","tag-bash","tag-linux"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=1613"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1613\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media\/1532"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=1613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=1613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=1613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}