Posts filed under 'Programmieren'
iTunes und Fairplay-DRM
Auch wenn ich keinen Mac besitze, höre ich regelmäßig den MobileMacs-Podcast. Darin hatte Tim Pritlove erwähnt, dass gekaufte Lieder, Programme und Videos erst im lokalen iTunes mit dem DRM versehen werden. Ich hatte das so verstanden, dass iTunes Dateien aus dem Store als unverschlüsselte Inhalte herunterläd.
Prima dachte ich mir, dann hab ich ja bald eine schöne Sammlung an DRM-freien M4A-Dateien auf meiner Festplatte rumzuliegen. Die erste Aktion war also Wireshark anzumachen und mir einen Song im iTunes-Store zu kaufen. Die heruntergeladene Datei wollte ich dann mittels Wireshark direkt speichern.
Das Ergebnis war relativ enttäuschend. So wie ich es mir vorgestellt hatte, funktioniert es nicht. Die iTunes-Server schicken, nach Austausch diverser Daten, zunächst unverschlüsselt das Coverbild als jpg und anschließend den Song. Dieser wird im m4p-Format geschickt. Eine M4P-Datei ist eine in einem MP4-Container verpackte und DRM-geschützte Datei.
Die englische Wikipedia stellt den Prozess ähnlich dar. Der Artikel über Apples DRM-System Fairplay sagt über die Funktionsweise folgendes:
FairPlay-protected files are regular MP4 container files with an encrypted AAC audio stream. The audio stream is encrypted using the AES algorithm in combination with MD5 hashes. The master key required to decrypt the encrypted audio stream is also stored in encrypted form in the MP4 container file. The key required to decrypt the master key is called the “user key.”
Each time a customer uses iTunes to buy a track a new random user key is generated and used to encrypt the master key. The random user key is stored, together with the account information, on Apple’s servers, and also sent to iTunes. iTunes stores these keys in its own encrypted key repository. Using this key repository, iTunes is able to retrieve the user key required to decrypt the master key. Using the master key, iTunes is able to decrypt the AAC audio stream and play it.
When a user authorizes a new computer, iTunes sends a unique machine identifier to Apple’s servers. In return it receives all the user keys that are stored with the account information. This ensures that Apple is able to limit the number of computers that are authorized and makes sure that each authorized computer has all the user keys that are needed to play the tracks that it bought.
When a user deauthorizes a computer, iTunes will instruct Apple’s servers to remove the unique machine identifier from their database, and at the same time it will remove all the user keys from its encrypted key repository.
The iPod also has its own encrypted key repository. Every time a FairPlay-protected track is copied onto the iPod, iTunes will copy the user key from its own key repository to the key repository on the iPod. This makes sure that the iPod has everything it needs to play the encrypted AAC audio stream.
Das hört sich durchaus so an als ob beim Abruf bereits ein mit dem Master-Key verschlüsseltes M4P-File empfangen wird. Der Master-Key ist in dem File mit dem User-Key verschlüsselt enthalten, so das man nur den User-Key benötigt um den Masterkey und damit das File zu entschlüsseln und abzuspielen. Den Key bekommt man dann von einem Apple-Server oder im Falle eines Offline-Devices, wie dem iPod, aus dem lokalen Repository.
Dennoch kann Tim mit seiner Aussage nicht ganz falsch liegen. iTunes verändert die Datei nach dem Herunterladen zumindest. Denn vergleicht man die M4P-Datei, die heruntergeladen wird und die M4P-Datei, die abgelegt wird, so sind die Dateien zwar größtenteils identisch - dennoch gibt es zwischen den beiden Dateien Unterschiede. So ist die abgelegte Datei im getesteten Fall um circa 140KB größer (die Gesamtgröße ist circa 3.3MB) .
Schaut man sich die beiden Dateien mit WinMerge an, so wird man feststellen, dass in der abgelegten M4P-Datei bei circa 48KB Inhalte eingefügt werden. Das sind die circa 140KB Unterschied. Im Anschluss daran sind die Dateien jedoch wiederum Identisch.
Da der Großteil der Datei nicht verändert wird - also der Audiostream definitiv nicht lokal verschlüsselt wird - nehme ich nicht an, dass das DRM lokal wesentlich verändert wird. Dennoch interessiert mich, was genau passiert.
Falls jemand von euch Informationen dazu hat - bitte postet entsprechende Infos in die Comments. Danke
Hier noch kurz ein Screenshot der Wireshark-Session. Die beiden M4P-Dateien kann ich auf Anfrage gerne auch bereitstellen.
Edit : Das Cover ist auch so circa 140KB groß. Und wenn man sich das Cover und die zusätzlichen 140K anschaut sieht man, dass zumindest ein Teil der 140K das Cover sind.
Add comment September 5, 2008
NoMule 2008.09.01 ist draußen
… und es hat ein neues Feature. Es gibt jetzt eine Kommandozeilenversion des Programms.
Das heißt zum einen, dass man es von der Kommandozeile aus nutzen kann und zum anderen, dass man es in andere Programme integrieren kann (andere Programme können es einfach aufrufen über die in der Doku festgelegten Parameter). Wenn man das Programm in andere Software integrieren will ist zu beachten, dass es unter der GPL veröffentlicht ist.
Natürlich gab es seit der letzten Version auch viele kleinere Änderungen. Diese wurden als “Minor Updates” sofort bereitgestellt. (Bspw. wurde Yuvutu als MediaProvider integriert)
Wie immer wünsche ich euch viel Spaß mit der neuen Version von NoMule ![]()
Add comment September 1, 2008
MySpace - on my computer
Heyho!
Heute ist eine neue NoMule-Version (2008.06.06) erschienen. Zum ersten mal wurde die Version über das NoMule Update-Notificationsystem bekanntgegeben.
Also - was hat sich verbessert?!
NoMule unterstützt MySpace als Mediaprovider. Das heißt, dass nun Videos und Songs von MySpace heruntergeladen werden können. Und es gibt noch was tolles : Videos und Songs können jetzt auch auf MySpace gesucht werden.
Das heißt dass für MySpace nun die gleichen Features bereit stehen, die es auch für YouTube gibt.
Es wurde auch noch ein anderes Thema angegangen - Unterstützung für Unix.
Ich habe mehrere Mails erhalten, dass NoMule unter Unix nicht so läuft wie es sollte. Also habe ich mich heute hingesetzt und ein bisschen rumgebastelt.
NoMule unterstützt jetz also auch die Voransicht von Videos im Browser in Unix und sollte generell besser unter Betriebssystemen dieser Familie laufen.
Falls ihr trotzdem in Probleme mit NoMule rennt schreibt mir ruhig eine Mail. Die Adresse ist:
kenny1987 at users dot sourceforge dot net
Also viel Spaß mit NoMule 2008.06.06 .
Und vielen Dank an Paul und Eric für die hilfreichen Mails
Update : War schon spät gestern, deswegen hab ich was vergessen : Die Dokumentation hat jetzt auch einen Abschnitt über Unix. Darin steht welche Pakete ihr braucht und was es für Tipps und Tricks gibt, wenn ihr NoMule unter Unix nutzt.
Add comment Juni 6, 2008
Es gibt was neues - und du weißt davon…
… denn NoMule 2008.05.16 ist draußen und es unterstützt Updatenotifications.
Das heißt, dass dir das Programm wannimmer eine neue NoMuleversion da ist darüber bescheid geben wird. Oder auch nicht. Denn du kannst dieses Verhalten auch über Einstellungen ausschalten.
Zu den Einstellungen, die du jetzt über ein Configfile machen kannst gehören:
- Automatische Updatesuche ein/ausschalten
- Den Familyfilter, der die Anzeige von Porncommunities unterdrückt, ein oder ausschalten
Kürzlich gab es ein paar Probleme mit YouTube, Google Video und Dailymotion, da die Seite die für die Linkumwandlung genutzt wird ihre URL geändert hat. Diese Probleme wurden mit der neuen Version behoben.
Es wurde auch ein neuer Medienprovider hinzugefügt. MySpass (dämlicher Name oder?!). Das ist die Videocommunity von Brainpool. Da gibts dann so Commedians wie Bastian Pastewka oder Axel Stein.
Wie immer könnt ihr NoMule nun hier herunterladen.
2 comments Mai 16, 2008
NoMule 2008.05.11 ist draußen!
Du willst dieses Lied auf deinem iPod haben. Also gehst du ins Internet und suchst dir den Song bei Youtube und lädst ihn dann mit NoMule runter indem du den Link kopierst und einfügst?
So ging es bisher. Seit heute kannst du direkt in NoMule suchen.
NoMule unterstützt nun also den kompletten Workflow vom Suchen des Videos bis zum Umwandeln in ein Format deiner Wahl und Taggen in einem Programm.
Momentan wird das Suchen auf zwei Webseiten unterstützt. Das sind:
- YouTube
- YouPorn
Wie immer kann man sich das ganze bei Sourceforge herunterladen. Have fun ![]()
Add comment Mai 10, 2008
Insulting sourcecode explained
(…) [S]ince SVN revision r4027 quodlibet’s source code is personally insulting me (…)
Wenn man das ließt denkt man erstmal - WTF?! Aber dahinter steckt eine Geschichte, die zeigt, dass es bei großen Projekten genauso zugehen kann wie im Kindergarten.
Dabei geht es darum, dass ein gewisser Sebastian Dröge wohl codetechnischen Mist gebaut hat undzwar in GStreamer, dem Mediaframework von GTK. GStreamer wird unteranderem benutzt von einem Audioplayer namens Quod Libet. In diesem Audioplayer musste herausgefunden werden, welcher Code sich um das Protokoll “file://” kümmert. Dazu wurde einfach “file://” an eine bestimmte Funktion übergeben. Durch den Bug in GStreamer hat das aber nicht mehr gefunzt.
Soweit so gut. Statt file:// kann man wohl auch irgendeine nicht existente URI mit dem Fileprotokoll übergeben um das gleiche zu erreichen. Was haben sie also gemacht? Sie haben file:// durch
file:///Sebastian/Droge/please/choke/on/a/bucket/of/cocks
ersetzt.
So und davon fühlte sich der Typ nun beleidigt. Verständlich - und man fragt sich nochmals - WTF?! Kindergaten?!
Auf der anderen Seite- wenn man mal eine Google Code Search nach “Bill Gates” macht kommt da auch nicht viel schönes raus.
Update: Was einmal war ist nun komplett anders. Und Schwänze werden zu Keksen.
Add comment April 24, 2008
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
- GET /crossdomain.xml
Antwort: Eine Menge an Domains von denen zugegriffen werden darf (unwichtig denke ich) - POST //1.0/webclient/xmlrpc.php - Ein XML-RPC der getSession aufruft
Antwort: Ein String mit einer Session-ID die im folgenden verwendet wird - 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
- GET /anon/… .mp3
Als Cookie ist auch hier wieder der Sessionkey gesetzt.Antwort: Nocheinmal eine Weiterleitung und nach dem folgenden POST dann das MP3
- 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..
Add comment April 14, 2008







