Yoan Blanc’s weblog

Another swiss guy lost in Paris

Yet a more secure MP3 player and server

Yoan BlancMon, 03 Sep 2007, , , , , ,

I finally managed to build a secure, I mean a thing that I cannot break, Flash based MP3 player. Someone else will break it, please do!

It takes its inspiration into the (old) Atom API documentation, but due to the limitations of the embedded Flash player itself, I adapted it. So less HTTP headers and more GET or XML datas. What is important is that every call to a file is unique and you can’t fake it.

Let’s dive. I created a very basic song player with the free (as in beer) Flex SDK. As I’m using GNU/Linux by night I don’t have the choice if I want to produce a SWF.


one list, 4 buttons, it’s already too much.

This player browse a RSS feed, the same that the one you use for a podcast and loads the songs.

The Atom API protocol, works with one shared secret, the user password and one counter that works like a ticket.

  1. Client: Gimme the song “a.mp3”
  2. Server: No way man, please identify your self!
  3. Client: I’m “Yoan”, with ticket 1, gimme the song “a.mp3”, please.
  4. Server: Okay, there it is.
  5. Client: I’m “Yoan”, with ticket 2, gimme the song “b.mp3”, please.
  6. Server: Okay, there it is.

You cannot cheat the ticket counter and whole informations are encrypted to build a unique string that the server can rebuild on it’s side to verify.

Last but not least, disable the cache with the appropriates HTTP headers. I won’t explain you in details how it works, just grab the files bellow (at your own risks), fill the RSS feed with your songs (that must be in the same directory) and test by running twistd -ny mp3.py and visiting: http://localhost:8080/ (it’s your own box).

I would be really happy to see this solution used somewhere, there is lots of work to do. But the concept it here. Feel free to ask me. It was my first tries with Flex and Twisted.web2 by the way. As far as I know, you cannot decompile a SWF generated by the Flex compiler but I would advise you to crypt it anyway.

Et voilà, j’ai fait chauffer mes méninges pour mettre sur pied un système client/serveur permettant de diffuser des mp3 à la demande où on ne peut pas récupérer les dits MP3 simplement. Parti de la constation que trop peu de services font attention à ce détail là: MySpace et Mx3 sont ceux qui, à ma connaissance, offrent une protection sérieuse.

Le but du jeu est d’avoir une URL unique par fichier demandé, non réutilisable et authentifiée. Ne voulant réinventer la roue, mon choix s’est porté sur l’Atom API qui date peut-être un peu. Et à cause des limitations pour des raisons de sécurité du lecteur Flash des navigateurs la pluspart des informations transittant via entêtes HTTP passent ici en GET ou dans le corps du message (dans un format XML).

Le fonctionnement est assez simple et repose sur un secret partagé (un mot de passe) et un compteur qui permet d’éviter la rejouabilité d’une requête. Les deux parties possèdent ces informations, mais le mot de passe ne transite jamais entre les deux ce qui devrait garantir une protection suffisante. La seule faille étant d’obtenir le mot de passe en décompilant le fichier SWF ou en ayant accès au serveur.

N’ayant pas envie de détailler tout, ce qui me prendrait quelques heures et est digne d’un rapport scolaire (non merci), je vais vous laisser jouer avec les fichiers ci-dessous, qu’il faut compléter par les fichiers audios de Backini (ou les vôtres en adaptant le flux RSS). Une fois le serveur lancé twistd -ny mp3.py vous avez accès au lecteur via l’adresse suivante: http://localhost:8080/. C’est un simple serveur local sur votre machine.

Bien sûr, utilisez-ceci à vos risques et périls, un ennui est si vite arrivé. N’hésitez pas à essayer de casser ce système, même s’il y en a de bien plus facile parmi les sites publics. C’est mon premier essai avec Flex et Twisted.web2 donc, il y a certainement moyen de faire bien mieux. Sinon, à votre disposition pour d’éventuelles question.

About

meYoan Blanc is a web developer that lives in Paris (19, rue Bichat75010France) works for Yahoo! and comes from Switzerland ( La Chaux-de-Fonds). This web site is for this weblog, a playground for random stuffs and can help keepingconnected with some friends out there.

Get my vCard or contact me by phone (+33 1 74 30 12 92) or email ().

Misc

RSS, list.blogug.ch

This site reflects only my opinion and is not affiliated with my employer.

copyright 2006-2007 — doSimple.ch