Yoan Blanc’s weblog

Another swiss guy lost in Paris

August 2007

“Out of sight, out of mind”

Yoan BlancSun 26 August 2007, , , , ,

Most of the MP3 player I’ve seen doesn’t protect the owner of the MP3 to be stolen. It’s sometimes a choice, but everyone (should) know that by using one of those simple MP3 players in Flash:

You are offering your MP3 files the same way that if you putted a link on it, called “download it”.

A little bit keen user will find the file and download it, it’s very very easy with the Net tab of Firebug (for Firefox) or the Activity Window of Safari.

Firebug on Samples.fr Using Firebug on Samples.fr homepage (a very cool blog about who sucks the song of who, only 30 sec. preview).

For a personnal website, a blog or whatever, it’s not a problem from my point of view, because it belongs to you and you are responsible of you do with it. The problem comes with public services.

MySpace has had troubles with their MP3 player back in september 2006 and are now using a more secure player and file delivery system (token based).

At the beginning Mx3 had the same issue, they fixed that a first time by using a token based authentication. But it wasn’t enough, because you could grab the source code of the SWF movie by decompiling it with Flare for example.

v1.GETTOKENURL = '/single/get_token?s=';
v1.GETMP3URL = '/single/get_MP3?h=';
v1.SHAREDKEY = \
  '812664f85904d7458291529ae9c503b3';
[...]
var v2 = com.meychi.ascrypt.MD5.calculate( \
  PlayerCtrl.SHAREDKEY + \
  '--' + \
  this.__getTokenLoadVars.t);
this.__playback.setMedia( \
  PlayerCtrl.GETMP3URL + \
  v2 + ’'&t=' + \
  this.__getTokenLoadVars.t,\
  'MP3');

This issue was solved using a encrypting solution (and changing the shared key of course).

I’ve spent some times to investigate on famous, eye-candy, übercool web radio, music selling, or sound web site. Most of them have no protections at all! Nothing. I built scripts that download all the songs from a query on a band for two of them :

Theses scripts deal only with RSS and Flash Remoting and aren’t more than 100 lines (with comments and bla-bla). But it was easy, no cookies, no sessions, no internal counter, no HTTP header to simulate, ... I have the feeling that I didn’t hack anything, just used the offered RSS based REST or Flash Remoting API. I even didn’t decompile a single SWF file.

To protect your files, don’t rely on technologies like Flash, XML or Flash Remoting but put some kind of authenticaton in the discussion protocol your are using, that cannot be simulated easily outside the MP3 player your are providing. If the URL that gives the file to the player can be runned only one time and cannot be generated without decompiling the swf file, you’ve got it. Next step is to encrypt your swf file and it’s not mandatory for Flash 8 at least. I’ve tested with swf files generated by Flex and cannot find anything, it’s a matter of time I think.

I’m managing to build a MP3 player (based on Flex) and a server that could protect the MP3 it plays from being stolen. More to come.

One kind of protection is to deliver crap: poor quality, not the entire song (like Amazon does), no ID3 tags, random file name, etc.

But music tastes better if you buy it or respect its licence:

J’aime beaucoup le petit dicton « Loin des yeux, loin du coeur », en terme de développement web c’est tout aussi vrai que dans la vie de tous les jours. Tout ceci pour vous dire que la grande, l’écrasant majorité des lecteurs MP3 en Flash qu’on trouve sur la toile ne protège pas contre le téléchargement de la chanson elle-même. Sachez que parmi les suivants :

Tous permettent le téléchargement des fichiers directement. Un enfant pourrait le faire en allant dans l’onglet Net de Firebug pour Firefox ou via l’Activity window de Safari.

On peut dire qu’ils sont destinés à un usage personnel donc que la personne les publiant le fait sur son site perso et en est donc pleinement responsable. Oui, je suis d’accord avec ça. Cette réflexion vient poser problème pour des sites de service offrant la mise à disposition de musique ou la libre écoute.

MySpace par exemple a eu un petit problème en septembre 2006 quand une personne a publié un logiciel pour télécharger les chansons d’une page donnée et ils ont rapidement dû revoir leur copie.

Un autre service, Suisse celui-ci, Mx3, avait le même problème au départ qu’ils ont rapidement corrigé en utilisant un système basé sur un jeton unique qui permet d’obtenir le fichier. Mais ce jeton était facilement falsifiable, le code étant pour ainsi dire disponible. Des outils permettent de décompiler un fichier SWF pour en extraire le code, les images, ... d’autres permettent de le crypter pour se protèger de ce type de problème, chose qui a été faite.

J’ai passé du temps à jouer avec des services offrant de la musique, qu’ils soient jolis, web 2.0, populaires ou pas, très peu se protègent du téléchargement de leurs fichiers musicaux. Sans même avoir à décompiler leur lecteur SWF, j’ai pu construire des scripts permettant de télécharger toutes les chansons en fonction d’une recherche. Certains se basent sur Flash Remoting, d’autres des fichiers XML (comme RSS par exemple) qui fournissent l’adresse du fichier à télécharger directement. Rien d’autre à contourner comme un cookie, une entête HTTP, un jeton, ... rien!

Une technologie ne protège pas, XML et Flash Remoting ne protègent pas. Tant qu’il n’y a pas une forme d’authentification dans les messages échangés entre le client (le lecteur en Flash) et le serveur qui fournit les fichiers audios, il n’y a pas de protection.

J’essaie actuellement de mettre en place un lecteur MP3 (en Flex, je bosse sous GNU Linux donc pas trop le choix) et un serveur de fichiers devant offrir une forme de protection suffisante. À suivre.

Une forme de protection assez efficace est de fournir de la mauvaise qualité : des fichiers tronqués (comme Amazon), de mauvaise qualité, sans les tags ID3, avec un nom aléatoire, ...

Au passage, il y a plétore de sites internets qui mettent à disposition de la musique de qualité en libre téléchargement. Et en plus, ça fait plaisir d’avoir autre chose à se mettre sous l’oreille que les tubes passant à la radio, non ?

When is my train? Not that easy

Yoan BlancThu 09 August 2007, , , , ,

It’s a fact that Switzerland is the country of the watches and the chocolate but also of the trains (because of the watches I guess). So the trains are expensive but almost on time. One thing that surprise me is that I’m still using the swiss web site to find a train between to cities in France, even sometimes the German one that knows about everything.

It’s not about nostaligia it’s because this one rocks by its simplicity. Clean and nothing else. I did a little sample to find how to go from Paris to London (nothing to see with Switzerland of Germany, but enjoy).

To start, the French one, la SNCF. I type sncf.fr which fails, corrected it to www.sncf.fr. Hell, what do I have to do now? After a couple of tries and my great experience I found that it’s Voyage SNCF where I have to click.

SNCF home SNCF results

To get a results, I had to specify both starts and destination with a stupid popup and to wait on an advertisment. The web pages are full of advertisments and blinky pictures. A very bad experience, but I can buy a ticket at the end.

Now, let’s test from the british web site: National Rails Enquiries. The homepage is clean (see the screenshot) with some autocompletion, brilliant. But it doesn’t know where Paris is and fails miserably.

The german one is interesting because I could hear from french people that live in Germany that they are using it to buy tickets instead of the french one that could simply not for Germany (but the opposite is true). This is the first one that just does the job, it requires to fill its age in the process, that is weird just to know when there is a train to London.

DB home DB results

Next one, is the Italy one. I’m not very keen in italian but it’s an interesting one because it’s the only one that has a liquid layout (100%). And in term of efficiency, great. I just entered the two cities and it gives me what I wanted.

FS Trenitalia home FS Trenitalia results

And the last one, my favourite: SBB CFF FFS because I’m using it for a while and know how to find things quickly. During the process it asked me to specify the destination station, but already filled it with the most probable choice (the SNCF doesn’t do this sadly).

SBB home SBB results

But seeing all these big interfaces with at least 4 inputs: start, destination, day and hour. Why not doing a simpler alternative: one field. I want to be able to ask: Paris London next Monday and to obtain what I’m asking. Google Switzerland does that for the cities only and it works quite well.

SBB Google

They are lots of bad example of fields that are to complicated. Compare LinkedId (or Xing) and Ziki (its little french cousin). The first one say: “keyword, name, company or title” (whatever in a word) and the second has two fields: “First Name” and “Last Name”, why?. As I’m sure that most of the people still use the mouse to switch from one input field to the next one, they should be more upsetted by this kind of user interface.

As a last reflection, it’s maybe not a good idea to mix concepts like where and when. Most of local services doesn’t mix what and where, but is that only a technical issue? I often don’t like them because they ask you to separate the idea you have. The natural language is very hard to process, but the solution I will use in the future is there.

I’d love to do a comparative between the ticket automat in the train station for different countries because the french one is so lame when you try the italian, german or swiss ones.

Rentrant de voyage où j’ai sillonné un bout de l’Europe géographique en train, je me suis rendu compte d’un truc très intéressant. Même vivant en France, et de ce fait prenant le train de temps à autre, j’utilise toujours le site des chemins de fer suisse car il fonctionne avec une grande simplicité.

Quand il ne va pas, je me tourne vers le site allemand qui lui fait tout, mais avec la barrière de la langue en plus. Il n’est pas rare qu’au guichet on vous dise non, et que le site allemand dise oui. Donc j’ai testé les différents pays pour un petit tour d’horizon. Mon itinéraire de test est Paris - Londres.

Le premier, le plus beau, la SNCF qui une fois que vous avez déniché la bonne URL contenant le formulaire, demande encore tout une gymnastique afin d’en faire sortir un horaire. Généralement il me demande de respécifier le lieu de départ et celui d’arrivée ce qui n’arrange rien au fait qu’il est plein de publicité clignotante. Parfois, s’en prendre à une borne automatique ou aux guichets est moins frustrant (parfois).

En passant sur le site de la Grande Bretagne, qui est très clean offrant rapidement beaucoup d’option et munit d’une autocomplétion (qui en fonction de ce qu’on a déjà entré propose les noms qu’il connait). Hélas, la modeste ville de Paris lui est inconnue, donc échec en puissance.

Enfin les trois qui sont utilisables: l’Italie (rien à redire), l’Allemagne (qui demande l’âge en court de route) et la Suisse (très simple).

Un point intéressant est que les bornes d’achat de tickets ont la même ergonomie entre les pays, la France étant une catastrophe de lenteur et les autres plutôt fonctionnels et clairs (je ne peux pas me prononcer sur la Grande-Bretagne).

Un point qui m'étonne est que ces sites offrent souvent au moins 4 champs pour un trajet : lui de départ, destination, jour et heure. Les deux dernier par toujours simple à manipuler. Google Suisse offre un moyen de demander son chemin via le moteur de recherche. En ne motionnant que deux villes, le premier résultat pointera sur l’horaire des CFF. Hélas, il ne permet pas encore de spécifier le quand avec une phrase du genre : « samedi prochain » ou « demain matin ».

Je suis certain que de minimiser le nombre de champs est un pari gagnant si l’expérience utilisateur en est grandie. Actuellement les services locaux séparent les idées du quoi, du où et du quand. Cette séparation n’est pas naturelle dans une première recherche et est imposée par la technique uniquement j’imagine.

Pour faire l’antithèse de mon point de vue à vouloir tout minimiser, offrir un point d’entrée aussi simple qu’un seul champ pour de multiple concept de lieu, temps et manière demande un apprentissage et tout le monde ne souhaite pas être confronté à ça.

Bref, un sujet à méditer.

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