Last.fm Protokollanalyse

Hallo Leute.

Ich habe mir gedacht, dass es doch extrem cool wäre wenn man mit zukünftigen Versionen von NoMule Mp3s von Last.fm speichern könnte. Nunja nun ist es allerdings bei Last.fm nicht so einfach. Es gibt für Last.fm nicht soetwas wie keepvid oder Ähnliches.

Das heißt, dass ich von Hand ran muss und mir anschauen muss was der Flashplayer, der auf Last.fm eingebettet ist tut.

Herangehensweise

Zunächst habe ich mir eine beliebige Seite eines Songs bei Last.Fm angeschaut und mir angesehen was für Cookies gesetzt wurden. Die kann man ja später immer noch brauchen. Dann habe ich Wireshark aufgemacht und auf HTTP „eingestellt“, um anschließend zu sehen wie der eingebettete Flashplayer sich denn so mit Last.fm unterhält.

Dann ging es los – indem der Play-Button im Flashplayer gedrückt wurde. Die folgenden Pakete erklären dann den Ablauf der Kommunikation und wie man letztendlich an das Mp3-File herankommt, welches durch den Last.fm Player abgespielt wird.

Analyse

  1. GET /crossdomain.xml
    Antwort: Eine Menge an Domains von denen zugegriffen werden darf (unwichtig denke ich)
  2. POST //1.0/webclient/xmlrpc.php – Ein XML-RPC der getSession aufruft
    Antwort: Ein String mit einer Session-ID die im folgenden verwendet wird
  3. GET /1.0/webclient/getresourceplaylist.php?resourceID=…&
    resourceType=…&sk=…&fod=…&onData=…& y=…Die wichtigen Parameter sind hier:

    • resourceID , resourceType und y – kann man im HTML-Quelltext finden
    • sk – ist die eben empfangene Session ID

    Die restlichen Parameter sind mehr oder weniger fest. Als Cookie ist nocheinmal der Sessionkey gesetzt.

    Antwort: Das ist etwas tricky und hat mir etwas zu denken gegeben. Die Antwort ist zunächst einmal gezippt. Kein Problem. Der Content-Type ist folgender: „application/xpsf+xml“. XPSF ist das XML Shareable Playlist Format. In ihm können Playlisten abgelegt werden. Es handelt sich dabei um ein offenes Format.
    Das was da nach dem entzippen rauskommt sieht aber überhaupt nicht nach XML aus. Zuerst dachte ich es wäre soetwas wie ROT-13-kodiertes XML. Ist es aber auch nicht. Nach einiger Zeit kam ich darauf, dass das ganze verdächtig nach Base64-Kodierung aussieht (wie sie auch in Emails verwendet wird).
    Und Bingo – das ist es. Macht man eine Base64-Dekodierung sieht man das XML. Zwar wurden alle Zeichen die keine Buchstaben oder Zahlen sind URL-Kodiert (%20 für Leerzeichen u.Ä.), aber das macht ja nix.
    In diesem XML-Wirrwarr enthalten ist die URL des MP3-Files 🙂

  4. GET /anon/… .mp3
    Als Cookie ist auch hier wieder der Sessionkey gesetzt.

    Antwort: Nocheinmal eine Weiterleitung und nach dem folgenden POST dann das MP3 🙂

  5. POST /webClient/logPlay
    Hier werden nocheinma die Session-ID und die oben erwähnte Resource-ID gesendet.

    Antwort: Das heißersehnte MP3-File

So – mit diesem WIssen werde ich demnächst herangehen und mal schauen ob man das vernünftig in NoMule implementieren kann. Und bis dahin kann man sich übrigens den Mp3-Stream auch aus WireShark extrahieren und als Mp3 speichern..

Advertisements

Über kenny1987

Hallo Leute, ich bin kenny. Ich studiere momentan Informatik und werde über alles interessante was mir so über den Weg läuft bloggen. Seien es irgendwelche News oder aktuelle Entwicklungen von meinen Anwendungen. Viel Spaß :)
Dieser Beitrag wurde unter Internetz allerlei, Programmieren, Unterhaltung abgelegt und mit , , , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s