Sinnlose Verschlüsselung bei MyVideo.de
Das LG Hamburg verbot die Software JDownloader2, weil diese von der Webseite MyVideo.de Videos herunterladen konnte (Beschluss als PDF). Angeblich waren diese Videos mit einem Verschlüsselungsverfahren
geschützt, das das Gericht als wirksame technische Schutzmaßnahme
beschreibt. Wie aber funktioniert diese Verschlüsselung? Um das herauszufinden, schaute ich mir den Quellcode von MyVideo.de an; als Beispiel wählte ich eine Folge der Anime-Serie Naruto.
Die Herstellerfirma von JDownloader2 erläutert: Die Funktion war lediglich vorübergehend in einer Beta-Version der Software, also den Nightly-Builds des JDownloader2, enthalten.
Auf entsprechenden Hinweis ist diese Änderung selbstverständlich rückgängig gemacht worden. Sowohl der JDownloader als auch die aktuellen Nightly-Builds (JDownloader2) sind also weiterhin legal.
Die Webseite enthält zwei Variablen, die an den eingebetteten Flash-Player übergeben werden: _encxml mit dem Wert http%3A%2F%2Fwww.myvideo.de%2Fdynamic%2Fget_player_video_xml.php und ID mit dem Wert 8336292. Die erste Variable ist URL-kodiert; dekodiert lautet sie http://www.myvideo.de/dynamic/get_player_video_xml.php. Übergibt man die zweite Variable als Parameter im Query String, erhält man http://www.myvideo.de/dynamic/get_player_video_xml.php?ID=8336292 – dort befindet sich ein unleserliches – vermutlich verschlüsseltes – Dokument.
Den notwendigen Schlüssel berechnet der Flash-Player von MyVideo.de aus einem Generalschlüssel und der Variable ID – die Formel lautet md5(Generalschlüssel+md5(ID)). Der Generalschlüssel ist mit der Kommandozeile ermittelbar: Die Eingabe von tail -c+9 ming.swf | openssl zlib -d | strings | grep KEY ergibt unter Anderem MASTER_KEY@c8407a08b3c71ea418ec9dc662f2a56e40cbd6d5a114aa50fb1e1079e17f2b83. Mit echo -n c8407a08b3c71ea418ec9dc662f2a56e40cbd6d5a114aa50fb1e1079e17f2b83`echo -n 8336292 | md5sum | cut -d' ' -f1` | md5sum erhält man schließlich den Schlüssel 36210cd70cc7f123dfd358bf8653eb4a.
Die Entschlüsselung erfolgt mit dem RC4-Algorithmus (Beispiel-Code in Python); das Ergebnis ist eine XML-Datei – im vorliegenden Beispiel gehört diese allerdings nicht zu Naruto sondern zu einem Werbe-Video mit David Hasselhoff. Der Grund dafür sind fehlende URL-Parameter: Entschlüsselt man den Inhalt von http://www.myvideo.de/dynamic/get_player_video_xml.php?domain=www.myvideo.de&flash_playertype=SER&ds=1&autorun=yes&ID=8336292&_countlimit=4, erhält man Informationen zum gewünschten Video, das sich dann mit dem Programm rtmpdump lokal speichern lässt.
Weswegen Myvideo.de die zum Abspielen eines Videos notwendigen XML-Dateien verschlüsselt, dann aber sämtliche Schlüssel öffentlich zur Verfügung stellen, ist mir unklar: Ich selbst habe zwar kein Interesse an dort angebotenen Videos (und auch nicht genug Bandbreite), kann mir jedoch kaum vorstellen, dass eine derartige Maßnahme Leute am Herunterladen der Videos hindert.
Vermutlich haben die Entwickler nicht verstanden, dass der Einsatz von Verschlüsselung Inhalte nicht schützen kann, wenn man alle Schlüssel veröffentlicht. Für diese Vermutung spricht auch der Einsatz von RTMPE, das für die Verschlüsselung ebenfalls nur öffentlich zugängliche Daten verwendet.
Meiner Ansicht nach handelt es sich bei der Verwendung des Flash-Players um eine wirksamere technische Maßnahme, bestimmte Leute vom Ansehen der Videos auszuschließen. Zum Einbetten von Videos empfehle ich die Verwendung des <video>
-Elements.
Myvideo ist ein deutsches IT-Produkt der Samwer-Brüder. Aufgekauft von einem Privatfernsehsender. Überrascht mich also nicht so wirklich, dass dort sowas passiert, aber spaßig ist sowas natürlich immer :3
Mal gucken, ob da was passiert. Hast du denen eine Mail über deinen Artikel geschickt?
Rechtlich gesehen ist jede Art von Verschlüsselung eine “wirksame Verschlüsselung”, egal wie leicht sie zu umgehen ist. Daher spielt dies im Bezug auf das Urteil des LG Hamburgs keine Rolle.
hi!
find den beitrag super, bin jedoch ziemlicher noob was rtmpdump angeht.
hab jetzt die .xml datei des streams, wie extrahier ich daraus den befehl für rtmpdump?