Comment j’ai triché dans une chasse aux iBeacon au salon MWC

Maintenant que le MWC est fini, et que je ne suis pas le gagnant, je vais avouer un truc : j’ai triché à un jeu. Une société (Mobisfera) organisait en effet, au salon Mobile World Congress, une chasse aux iBeacon, comme celle organisée durant le CES. Et tricher avec la détection des iBeacon… c’est simple.
mwc_logo1

Le jeu était simple : la société avait placé des capteurs iBeacon sur le salon, et chaque iBeacon détecté permettait d’augmenter ses chances de gagner. Deux applications étaient proposées : une pour iOS et une pour Android.

Le truc, c’est que les iBeacon, c’est assez simple à émuler : on a uniquement un UUID et deux valeurs. Et une application, pour détecter le iBeacon, doit donc contenir les valeurs. A partir de là, quand on est capable de se servir de quelques logiciels, c’est totalement trivial de récupérer les valeurs.

J’ai utilisé la même technique que le hacker qui a triché au CES : télécharger l’APK du programme, convertir l’APK en fichier JAR et ensuite chercher dans le code source avec un programme adapté.

Avec quelques notions de programmation, on trouve assez facilement la valeur de l’UUID et de la valeur Major dans le code.

Major

Major

Il m’a fallu un peu de temps pour trouver la valeur Minor, mais ça reste assez simple si on connaît un minimum Java.

Minor

Minor

Globalement, en moins d’une heure, j’avais trouvé les valeurs, et il est très simple de programmer un faux iBeacon avec les bonnes valeurs soit avec un appareil dédié soit avec un Raspberry Pi.

Du coup, j’ai activé les iBeacon dans l’application avant le salon. Dans la pratique, je n’ai pas gagné, vu qu’il s’agissait d’un tirage au sort dans les personnes ayant participé, mais j’ai fortement augmenté mes chances…

Tout est activé

Tout est activé

Au final, c’est juste un conseil : si les concours à base d’iBeacon sont ludiques, ça demande un peu de sécurisation pour éviter la triche. Les deux choses simples à mettre en place, c’est éviter de coder les valeurs dans l’application (par exemple en téléchargeant à la demande) et de lier les informations à la localisation de l’appareil. On peut toujours passer outre, mais ça devient nettement plus ardu…