Sonntag, 28. Januar 2018

Strava Apps - Fürs Schummeln

Nach Strava Apps - Für Schön und Für Rückenwind heute eine fürs Schummeln. Velogram ist auf den ersten Blick erstmal eine App um alle möglichen Grafiken mit Statistiken der Strava Aktivitäten zu erzeugen. Die Konfigurationsmöglichkeiten sind begrenzt, die Beschreibung im App Store "Create brilliant infographics from your Strava data" halte ich für reichlich übertrieben, da habe ich schon besseres gesehen:


Die viel interessantere Funktion verbirgt sich aber hinter dem Menüpunkt "Choose Activity (inc. Clone & Boost)". Ein Wisch nach links auf der Liste der Aktivitäten bringt eine Rakete zum Vorschein. Dort lassen sich die Aktivitäten zwischen einem und zehn Prozent verbessern. Velogram kopiert die Aktivität, setzt die original Datei auf privat (=unsichtbar) und lädt die neue Datei hoch. Immerhin gibt es einen deutlichen Hinweis, dass es sich dabei um Betrug handelt und man es selbstredend nur mal zum testen machen sollte. Was man da testen will erschließt sich mir allerdings nicht so ganz.

Die Print Screens der verschiedenen Strava Aktivitäten sehen auf den ersten Blick ganz normal aus. Während ich für die 120 km tatsächlich 4:30 unterwegs war, waren es mit 1% Boost 4:22 und mit 10% Boost sogar unter vier Stunden. Die Durchschnittsgeschwindigkeit stieg von 26,8 über 27,2 auf 29,9 km/h. Und hey, den KOM am Oberleukener Küppchen habe ich um satte 7 Sekunden auf 1:03 verbessert!


Das Webinterface gibt einen genaueren Einblick in die Manipulation der Daten. Die folgen Bilder zeigen das Original, 1% und 10% Boost. Zoomt man in die Aktivität herein, fällt recht schnell auf, dass die Geschwindigkeitslinie nach der Manipulation regelmäßige Spitzen hat. Die  Geschwindigkeit wird nicht gleichmäßig angehoben, sondern nur alle paar Sekunden. Bei einem Boost um 1% gibt es etwa alle 100 Sekunden einen Zacken, bei einem 10% Boost alle 10 Sekunden. Im Durchschnitt steigt die Geschwindigkeit dann genau um den gewählten Prozentsatz an. Dieser Ansatz der "punktuellen Beschleunigung" war seinerzeit auch bei DigitalEpo zu beobachten (via ScarletFire).

Nicht auf den ersten Blick ersichtlich ist, dass die verbesserten Dateien keine Leistungswerte mehr enthalten. Im Original ist die Kurve violett, stammt also von einem Powermeter, in den Fakes ist diese schwarz, also von Strava geschätzt und sehr viel volatiler.

Original Aktivität

1% Verbesserung, Spikes in der Geschwindigkeit alle 100 Sekunden und geschätzte Power

10% Verbesserung, Spikes alle 10 Sekunden

Strava KOM's lassen sich so mit Velogram ganz einfach und auf Knopfdruck erringen. Genauso leicht lässt sich die Schummelei aber auch entdecken, was die Funktion für die, die es tatsächlich notwenig haben ihre Strava Fahrten zu dopen, wertlos macht. Wer seinen hart erkämpften KOM verliert, sollte durchaus mal einen genauen Blick in die Fahrt des "Gegners" werfen und diese bei Auffälligkeiten auch an Strava melden.

Nun stellt sich die Frage, warum die Boost-Aktivitäten eine gezackte Geschwindigkeitskurve aufweisen und diese nicht einfach gleichmäßig angehoben wird. Dazu habe ich mir zunächst die Dateien angeschaut, die man von Strava zurückbekommt. Dabei besteht kein Unterschied, ob man diese über das Webinterface oder via API abfragt. In beiden Fällen handelt es sich um eine XML Datei mit der Endung gpx. Die Dateien lassen sich mit jedem Text Programm öffnen. Hier der Anfang der original Datei mit den ersten beiden Datenpunkten. Gespeichert wird die GPS Position (Längen und Breitengrad), die Höhe, die Zeit und einige Erweiterungen (Power, Temperatur, Puls, Trittfrequenz).

 <metadata>
  <time>2017-12-31T08:24:39Z</time>
 </metadata>
 <trk>
  <name>Festive 500 // 500 in - 0 to go</name>
  <trkseg>
   <trkpt lat="49.4549800" lon="6.6405450">
    <ele>188.8</ele>
    <time>2017-12-31T08:24:39Z</time>
    <extensions>
     <power>18</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:atemp>14</gpxtpx:atemp>
      <gpxtpx:hr>118</gpxtpx:hr>
      <gpxtpx:cad>26</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>
   <trkpt lat="49.4549890" lon="6.6405750">
    <ele>189.4</ele>
    <time>2017-12-31T08:24:40Z</time>
    <extensions>
     <power>1</power>
     <gpxtpx:TrackPointExtension>
      <gpxtpx:atemp>14</gpxtpx:atemp>
      <gpxtpx:hr>119</gpxtpx:hr>
      <gpxtpx:cad>13</gpxtpx:cad>
     </gpxtpx:TrackPointExtension>
    </extensions>
   </trkpt>

Die Datei enthält also Paare aus Zeit und Position. Die Geschwindigkeit wird über die Positionsveränderung zwischen zwei Zeitpunkten berechnet. Die Zeitspanne zwischen zwei Datensätzen beträgt dabei eine Sekunde, da das Format offensichtlich keine Sekundenbruchteile vorsieht, ist dies die kleinste darstellbare Veränderung. Das stimmt mit der üblichen Datenaufzeichnungsrate von Radcomputern mit einem Wert pro Sekunde (1 hertz) überein.

Möchte man die Geschwindigkeit einer Fahrt erhöhen möchte, hat man grundsätzlich zwei Möglichkeiten:
  •  Man verringert die Zeit zwischen zwei GPS Punkten, verteilt also alle Punkte auf weniger Zeit. Die Anzahl an Datenpaaren würde dann gleich bleiben. Bei einer Verbesserung um 10% würde der Abstand 0,9 statt 1 Sekunde betragen.
  • Oder man verringert die Zahl der Datenpaare. Weniger Datenpaare bedeutet weniger Sekunden, wenn der Abstand weiterhin immer eine Sekunde beträgt. Weniger Zeit für die gleiche Strecke ergibt eine höhere Geschwindigkeit.
Möglichkeit eins scheidet aus, da das Dateiformat keine Sekundenbruchteile zulässt. In Möglichkeit zwei müssen die GPS Positionen neu zugeordnet werden. Der Anfang und das Ende der Aktivität müssen in der manipulierten Datei dem Original entsprechen, ebenso soll die Strecke weitgehend gleich bleiben, ansonsten würde die Geschwindigkeit ja nicht steigen. (Tatsächlich fehlen den beiden manipulierten Fahrten aber jeweils fast zwei Kilometer.)

Dazu ein einfaches Beispiel: Ausgehend von einem fliegenden Start und einer originalen Geschwindigkeit von 8 m/s (28,8 km/h) legt ein Fahrer in 10 Sekunden 80 Meter zurück. Der Einfachheit halber sind die Wegpunkte durch die zurückgelegte Strecke auf einer Geraden beschrieben statt durch GPS Koordinaten im zweidimensionalen Raum. Erhöhen wir die Geschwindigkeit um 10% benötigt unser Fahrer nur noch 9 Sekunden. Der erste Wegpunkt (8 m) ist bereits nach 0.9 Sekunden erreicht, bei Sekunde 1 sind 8,89 Meter zurückgelegt (80 Meter / 9 Sekunden). 8,89 liegt zwischen dem originalen Wegpunkt 1 (8m) und dem originalen Wegpunkt 2 (16m).  Der Punkt, an dem sich der 10% schnellere Fahrer nach einer Sekunde befindet, muss also berechnet werden. Würden so alle Punkte korrekt interpoliert werden, würde die Geschwindigkeit gleichmäßig steigen und es wären keine Auffälligkeiten festzustellen. Nicht trivial, aber auch nicht unlösbar.

Stattdessen kann man aber eine Abkürzung nehmen (passend für eine App zum Schummeln) und einfach alle 100 Sekunden (bei Verbesserung um 1%) bzw. alle 10 Sekunden (10%) einen Wegpunkt auslassen. In dem Beispiel fehlt der ursprüngliche Punkt 7 (56m). Während die anderen Punkte davor gleich sind, folgt nun auf Punkt 6 (48m) sogleich der ursprüngliche Punkt 8 (64m) jetzt schon bei Sekunde 7. 


Legt man die originale und die manipulierte Strecke in Golden Cheetah übereinander und zoomt so weit hinein, dass die einzelnen Datenpunkte sichtbar werden, sieht man, dass nicht einfach nur ein Punkt herausgenommen wird, sondern auch die beiden davor und danach manipuliert sind. Die Geschwindigkeitskurve (mit der grünen Legende) zeigt immer vier Punkte mit erhöhter Geschwindigkeit, wobei die originale violette Kurve für die gleiche Strecke fünf Punkte (bzw. Sekunden) hat. Danach folgen fünf Punkte, bei denen die originale und manipulierte Kurve aufeinander liegen. Die Aktivität mit dem 10% Boost hat also 9 Punkte (Vier manipuliert, fünf normal), während die echte Datei für die gleiche Strecke 10 Punkte hat. Der Rhythmus variiert leicht, in diesem Ausschnitt sieht man auch 3 zu 4 + 6. Es kommen aber immer 10 originale auf 9 manipulierte Punkte.



Man sollte also annehmen, dass man etwa die Hälfte der GPS Punkte aus der manipulierten auch in der originalen Datei findet. Das ist aber nicht der Fall. Auffällig ist hingegen, das in der manipulierten Datei die GPS Positionen an Genauigkeit verlieren, statt <trkpt lat="49.4494120" lon="6.6368520"> heißt es dann <trkpt lat="49.4494100" lon="6.6368500">. Darüber hinaus weicht auch die Höhe geringfügig ab und die Zeit ist um einige Stunden verschoben. Welche dieser Veränderungen durch Velogram und welche durch den Strava Algorithmus nach dem Hochladen der manipulierten Datei durchgeführt wurden, lässt sich natürlich nicht sagen.


Erstaunlich ist, dass eine App zum offensichtlichen aufmotzen von Strava Aktivitäten auf der Strava Webseite gelistet wird, dass sich solche Dateien hochladen lassen und von Strava nicht entfernt werden. Obwohl die Identifizierung relativ einfach sein sollte, führt Strava in dieser Richtung keine Prüfungen durch. Am Anfang meiner Recherche habe ich den Strava Support angeschrieben:

"Hello Strava Support, I’m in the process of writing a blogpost on my blog http://unterlenker.com about digital epo kind cheating. Usually the speed line is after the “improving” bumpy, every few points have a massivly increased speed, others looks normal. Is there a technical reason that these services don’t increase ALL speed points by the same amount? Attached a comparison of a ride before and after improving (Print screen from Golden Cheetah). What do you think? Is there a behind the scenes check in Strava to check these anormalies? Thanks in advance for your help and best regards from Germany Boris"

Hier die Antwort:

Wer trotz der leichten Entdeckung und der damit (hoffentlich) verbundenen Ächtung durch seine realen und virtuellen Sportkameraden seine Aktivitäten einmal "testweise" boosten möchte, der findet auf der Velogram Homepage Links zum Google Play- und Apple App-Store. Der Spaß kostet 1,99 USD.

Zum Schluss vielen Dank an meinen Freund Uwe von SRM und Mister VeloViewer Ben Lowe für den hilfreichen Einblick und die gute Tips.

Keine Kommentare:

Kommentar veröffentlichen