Monday, 02 March 2015
Écrit par
Grégory Soutadé

EDITED : 03rd January 2019 : Add ADB section

EDITED : 03rd September 2018 : Muse HD screen calibration issue seems solved

EDITED : 29th January 2018 : Link for Nolimbook 5.2.2020 stock rom

EDITED : 31th December 2017 : Add jailbreak for Nolimbook HD 6.3.2325

EDITED : 10th August 2017 : Add jailbreak for Muse HD 2 6.3.2536 (thanks Lupin)

EDITED : 2nd August 2016 : Add jailbreak for Odyssey Frontlight 2 6.3.2322

EDITED : 27th july 2016 : Add jailbreak for Muse 6.3.2350

EDITED : 15th august 2015 : Add jailbreak_backup (suggested by niceguy)

EDITED : 12th august 2015 : Another problem with Odyssey jailbreak reported by niceguy.

EDITED : 21th july 2015 : Totally rework Odyssey jailbreak : key generation was bad

EDITED : 07th july 2015 : Seems not to work for firmware >= 2340. Add /lib/

EDITED : 28th may 2015 : Remove Orizon/Fallback support (now it's tested). Set Muse jailbreak to version 6.3.2326

EDITED : 2nd april 2015

Those who do not try to hack the Cybook Odyssey e-reader won't understand the title. In facts, Bookeen appends this sentence at the end of update files. Arrogant, isn't it ? Surely, but now it's outdated.

Bookeen primary delivers a full access to its e-readers. Unfortunately, since Odyssey one they became very proprietary while its concurrents (except Amazon) lets user modify the core system. Did the concurrents puts out of business ? No. They're still alive, and they sell more e-readers than Bookeen. Kobo ahead.

OK, stop doing politic and start hacking. It has been a hard work, but I finally did it : a Cybook Jailbreak.

This jailbreak installs dropbear (a SSH client/server) onto the e-reader and launch it at boot. It has been fully tested on Cybook Odyssey and Nolimbook HD+ (Muse) whatever the firmware version running. See notes for other Cybook versions.




I Finally found how to activate adb daemon on AW8/13 platforms (all platforms except Odyssey one). It's less destructive than apply a new update. To do it, follow these instructions :

  • Plug your reader in USB mode
  • Create an empty file called "adb_debug" in the mounted filesystem
  • Unplug your reader
  • Plug your reader in USB mode again
  • A popup should appears asking you if you want your computer to see your reader's files : SAY NO
  • Go to Menu -> Advanced
  • Click on "Open ADB"

Now you should be able to use adb util to open a shell on your reader. I can't start adb on my Odyssey reader, maybe you should enable ADB first and plug your reader after or use adb through Wifi.


It seems that more and more people have problems with these jailbreaks for Nolimbook device. So, please, don't try it if your current reader has a different version than the proposed one. Plus, Bookeen don't seems to upload new firmwares (they're only burned in factory). For now (as I don't own a Muse serie device), I can't provide another way to jailbreak it.

Muse firmware should be compatible with Odyssey frontlight 2

Signature verification

gpg --verify SHA256SUMS.sign SHA256SUMS

My gpg key can be found here


Rename downloaded files into CybUpdate.bin and copy it to the e-reader via USB. De-connect USB and start upgrade.

Once rebooted, activate Wifi and connect to the e-reader (you can find the IP address in your internet box/router web interface) :

ssh -o "KexAlgorithms +diffie-hellman-group1-sha1" -o "Ciphers +aes128-cbc" root@EREADERIP

There is no password.

Those who uses Windows can download putty as SSH client.

Info : I compiled a new version of dropbear, but I'm not able to test it. If someone want to test, send me an email. I will then put it on new jailbreak versions.

Enjoy !

Tip : The e-reader goes to sleep after X minutes of inactivity and switch off Wifi, and thus SSH connexion. To avoid this problem, kill ebrmain and boordr (the first re spawn the second).

Notes for Muse/Nolimbook/Odyssey essential/Odyssey frontlight 2 e-readers

The update format has changed and for my surprise it's more simple than the previous one. I saw that the whole flash is overwritten during an update. So, keep the jailbreak related to your current version.

If you want to make your own custom ROM, please read my another article How to make custom ROM for Cybook e-readers

Nolimbook recover

A lot of people bricked their reader after applying jailbreak on Carrefour Nolimbook device. KotCzarny succeded in recover its reader by reading NAND flash thanks to UART pads available on motherboard. Here is a stock ROM 5.2.2020. Thanks to him ! For any more help, he is reachable on freenode irc, channel #h3droid, nick KotCzarny.

A page dedicated to Muse device has been created on linux-sunxi. You'll find some information about Muse hardware and FEL mode (in an other section). On new hardware boards, there is no information printed about UART pins, you needs to search dedicated pins thanks to a multimeter. Don't hesitate to update the page with new information !

Backup for Odyssey

Hacking Odyssey may lead to editing/removing files you should not. A backup jailbreak that contains a full factory image (+SSH server) is available for Odyssey readers. It willl only works if /boot has not been damaged !!

Hacking Muse

Alejandro Antúnez hacks basic display/event functions in combination with DirectFB, helping develop applications. Code and example are available on GitHub. A lot of thanks to him.

Legal notices

Providing a jailbreak is not a benign choice. I had a long reflexion before this and tried to know why Bookeen doesn't wants users access core system. The only response I got was "It's not scheduled".

Laws concerning copyright are complex and different in each country. France has its own who is called DADVSI (Loi relative au droit d'auteur et aux droits voisins dans la société de l'information) which is the transposition of European directives. It defines DRM and penal sentences. We can resume in some paragraphs (sorry, french only) :

Article 13

« Art. L. 331-5. - Les mesures techniques efficaces destinées à empêcher ou à limiter les utilisations non autorisées par les titulaires d'un droit d'auteur ou d'un droit voisin du droit d'auteur d'une oeuvre, autre qu'un logiciel, d'une interprétation, d'un phonogramme, d'un vidéogramme ou d'un programme sont protégées dans les conditions prévues au présent titre.

« On entend par mesure technique au sens du premier alinéa toute technologie, dispositif, composant qui, dans le cadre normal de son fonctionnement, accomplit la fonction prévue par cet alinéa. Ces mesures techniques sont réputées efficaces lorsqu'une utilisation visée au même alinéa est contrôlée par les titulaires de droits grâce à l'application d'un code d'accès, d'un procédé de protection tel que le cryptage, le brouillage ou toute autre transformation de l'objet de la protection ou d'un mécanisme de contrôle de la copie qui atteint cet objectif de protection.

Un protocole, un format, une méthode de cryptage, de brouillage ou de transformation ne constitue pas en tant que tel une mesure technique au sens du présent article.

« Les mesures techniques ne doivent pas avoir pour effet d'empêcher la mise en oeuvre effective de l'interopérabilité, dans le respect du droit d'auteur. Les fournisseurs de mesures techniques donnent l'accès aux informations essentielles à l'interopérabilité dans les conditions définies aux articles L. 331-6 et L. 331-7.

« Les mesures techniques ne peuvent s'opposer au libre usage de l'oeuvre ou de l'objet protégé dans les limites des droits prévus par le présent code, ainsi que de ceux accordés par les détenteurs de droits.

Article 14

« Art. L. 331-7. - Tout éditeur de logiciel, tout fabricant de système technique et tout exploitant de service peut, en cas de refus d'accès aux informations essentielles à l'interopérabilité, demander à l'Autorité de régulation des mesures techniques de garantir l'interopérabilité des systèmes et des services existants, dans le respect des droits des parties, et d'obtenir du titulaire des droits sur la mesure technique les informations essentielles à cette interopérabilité. A compter de sa saisine, l'autorité dispose d'un délai de deux mois pour rendre sa décision.

« On entend par informations essentielles à l'interopérabilité la documentation technique et les interfaces de programmation nécessaires pour permettre à un dispositif technique d'accéder, y compris dans un standard ouvert au sens de l'article 4 de la loi n° 2004-575 du 21 juin 2004 pour la confiance dans l'économie numérique, à une oeuvre ou à un objet protégé par une mesure technique et aux informations sous forme électronique jointes, dans le respect des conditions d'utilisation de l'oeuvre ou de l'objet protégé qui ont été définies à l'origine.

« L'autorité a le pouvoir d'infliger une sanction pécuniaire applicable soit en cas d'inexécution de ses injonctions, soit en cas de non-respect des engagements qu'elle a acceptés. Chaque sanction pécuniaire est proportionnée à l'importance du dommage causé aux intéressés, à la situation de l'organisme ou de l'entreprise sanctionné et à l'éventuelle réitération des pratiques contraires à l'interopérabilité. Elle est déterminée individuellement et de façon motivée. Son montant maximum s'élève à 5 % du montant du chiffre d'affaires mondial hors taxes le plus élevé réalisé au cours d'un des exercices clos depuis l'exercice précédant celui au cours duquel les pratiques contraires à l'interopérabilité ont été mises en oeuvre dans le cas d'une entreprise et à 1,5 million d'euros dans les autres cas.

Article 21

« Art. L. 335-2-1. - Est puni de trois ans d'emprisonnement et de 300 000 EUR d'amende le fait :

1° D'éditer, de mettre à la disposition du public ou de communiquer au public, sciemment et sous quelque forme que ce soit, un logiciel manifestement destiné à la mise à disposition du public non autorisée d'oeuvres ou d'objets protégés ;

I think it's a good summary. The purpose of this jailbreak is to fully access a computer I OWN without damage it. Particularly, it do not help to get/read illegal content.

gPass 0.6

Tuesday, 10 February 2015
Écrit par
Grégory Soutadé

Logo gPass

Petit rappel : gPass est un gestionnaire de mot de passes en ligne. C'est une alternative libre à lastpass. Il permet d'héberger un serveur de mot de passe, qui stockera un mot de passe fort et unique pour chaque site web. Les mots de passes sont chiffrés par une "clé maître" que seul l'utilisateur connaît et sont remplacés à la volée dans le formulaire d'authentification.

Voici la version 0.6 de gPass. Outre les quelques modifications esthétiques de l'addon (ajout des icônes), l'apport majeur de cette version est la compatibilité avec le navigateur Chrome ! Ça a demandé un peu de travail, mais finalement ce n'était pas si compliqué.

Attention, Chrome est très pointilleux sur la sécurité, et le mélange des contenus normaux (http) et sécurisés (https) est mal vu. Il se peut donc que la démo ne fonctionne pas, car le certificat utilisé est auto signé. Donc, à moins de le rajouter explicitement, il risque d'y avoir des soucis.

Autre fonctionnalité "cachée" : les shadow logins (ou identifiants fantômes en français). C'est un mécanisme qui empêche un utilisateur mal intentionné de télécharger la base de données ou de la supprimer si celle-ci n'est pas protégée par une identification. En effet, au lieu de retourner directement les couples nom d'utilisateur/mot de passe (chiffrés bien sûr), le serveur retourne une "image". Il s'agit d'une suite aléatoire qui devra être chiffrée avec la clé maître pour obtenir un jeton d'accès, qui lui permettra de récupérer le couple sus-cité et de le supprimer si nécessaire.

Mais, comme cela requiert beaucoup de temps de processeur, c'est désactivé par défaut.

Les addons sont disponibles ici (firefox) et (Chrome). La partie serveur est à télécharger sur la page du projet.

Certificat SSL/TLS auto signé avec sa propre autorité de certification

Wednesday, 07 January 2015
Écrit par
Grégory Soutadé

Aujourd'hui, un petit tutoriel sur la génération de certificats SSL/TLS auto signé avec openssl. Il en existe déjà des dizaines sur le web. Celui-ci n'apporte pas grand chose de nouveau, si ce n'est me permettre de garder la procédure sous le coude (qui a dit égoïste ?).

SSL/TLS Quèsaco ?

Pour rappel, SSL (Secure Socket Layer) et son remplaçant TLS (Transport Layer Security) sont des protocoles permettant de chiffrer (personne ne peut lire les échanges client/serveur) et d'authentifier (on est sûr de parler à la bonne personne) une connexion réseau. C'est le mécanisme qui est mis en oeuvre lorsqu'on accède à un site via https:// (entre autres).

Chaine de confiance

Le modèle SSL/TLS repose sur une chaîne de confiance. C'est à dire que chacun des maillons va signer le suivant (jusqu'au final). Donc, si on est sûr du maillon initial (racine), on peut vérifier la chaîne de bout en bout. C'est la faiblesse théorique du protocole : celui qui a la clé privée du certificat racine (l'autorité de certification ou Certificate Authority (CA) en anglais) peut faire ce qu'il veut, comme générer une chaîne complète. Les certificats racines de confiance (partie publique uniquement) étant enregistrés dans un répertoire du navigateur (Firefox, Chrome...) lors de l'installation et mis à jour régulièrement (certains sont même révoqués avant leur date d'expiration).

Cela paraît un peu flou ? Exemple simple, mais néanmoins courant : votre entreprise construit son propre certificat racine et l'enregistre dans votre navigateur (ceci est tout à fait légal), elle pourra générer à la volée un certificat pour * et ainsi pouvoir lire tous vos mails de (gmail) sans que le navigateur ne détecte d'erreurs !

Hiérarchie de certificats

Certificat auto-signé, pourquoi ?

Le marché du certificat est très juteux. Pour assurer votre sécurité, les autorités de certification vendent chaque certificat plusieurs centaines d'euros par an (une dizaine pour un particulier). Pourtant, le travail de certification est relativement simple. Il existe cependant des autorités gratuites telles que CACert, mais, très peu d'entres elles voient leurs certificats racines intégrés aux navigateurs.

Jadis, j'utilisais un certificat OVH (signé par Symantec Corporation), puis un certificat Gandi (COMODO CA Ltd), mais, au delà de l'aspect pécunier, j'ai décidé de vouloir maîtriser ma chaîne de bout en bout car, quitte à ne pas être reconnu par les navigateurs, autant que je puisse vérifier que je ne suis pas espionné.

Générer un certificat, la pratique

La première chose à faire est de générer la clé privée et le certificat racine de notre autorité de certification (CA). Pour cela, je choisis de générer un certificat d'une validité de 10 ans avec une taille de clé 4096 bits. La clé privée (protégée par un mot de passe) sera contenue dans soutade-ca.key, et le certificat racine (partie publique) dans soutade-ca.crt

    openssl req -new -x509 -extensions v3_ca -keyout soutade_ca.key -out soutade_ca.crt -days 3650 -newkey rsa:4096

    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:

    Country Name (2 letter code) [AU]:FR
    State or Province Name (full name) [Some-State]:France
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Soutade CA
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:
    Email Address []:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

Maintenant que nous avons notre autorité, nous allons passer au certificat final (on pourrait en avoir des intermédiaires) pour tout Il faut répéter la procédure à partir de cette étape lors du renouvellement annuel.

Il faut commencer par créer une clé privée (2048 bits dans cet exemple) :

    openssl genrsa -out 2048

La requête de signature (sans mot de passe)

    openssl req -key -new -out

    Country Name (2 letter code) [AU]:FR
    State or Province Name (full name) [Some-State]:France
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Soutade
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:*
    Email Address []:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

Enfin, le certificat final (signé par notre autorité) et valide 1 an (maximum recommandé)

    openssl x509 -req -days 365 -in -CA soutade_ca.crt -CAkey soutade_ca.key -out -CAcreateserial -CAserial

Accessoirement, on peut supprimer les requêtes de signature

    rm -f *.csr

L'option -CAcreateserial va créer le fichier C'est important pour ne pas regénérer un certificat avec le même numéro de série.

IMPORTANT : Maintenant, il faut stocker la clé privée de l'autorité racine dans un lieu SÛR. Je conseille de faire un GPG du tar.gz et de le copier sur plusieurs supports !

Configuration pour nginx

La première étape est d'installer les certificats sur le système (exemple sur Debian)

    sudo cp /etc/ssl/

Deuxième étape, configurer nginx. Dans /etc/nginx/sites-available/default

    listen   80 default; ## listen for ipv4
    listen   443 ssl; ## listen for ipv4

    server_name *;
    ssl_certificate     /etc/ssl/;
    ssl_certificate_key /etc/ssl/;

    ssl_session_timeout  5m;

    ssl_protocols   TLSv1.2;
    ssl_ciphers  HIGH;
    ssl_prefer_server_ciphers   on;

On pourra noter que je n'active que TLSv1.2 avec les algorithmes de chiffrement les plus hauts et en préférant ceux du serveur. À la vue des dernières découvertes autour de SSL/TLS, les experts en sécurité conseillent fortement de désactiver les versions (obsolètes) de SSL (v3) et TLS (v1), quitte à ne pas supporter les vieux navigateurs (TLSv1.2 est quand même sorti en 2008).

Installation dans Firefox

Pour ce faire, il faut copier soutade-ca.crt en soutade-ca.pem, puis (dans Firefox) : Édition-> Préférences -> Avancé -> Afficher les certificats -> Importer...


Maintenant nos connexions sont protégées des vils pirates ? Pas forcément ! Comme dans l'exemple, il y a toujours la possibilité de générer à la volée un certificat à partir d'une autorité de certification que l'on maîtrise. Le seul moyen pour ne pas se faire avoir est de vérifier l'empreinte du certificat quand nous nous connectons, mais en général, l'autorité de certification ne mentionnera pas "Soutade CA" comme émetteur (plus facile à contrôler).

Nine nine nine nine. Are you sure that's random ? That's the problem with randomness : you can never be sure

IWLA : Intelligent Web Log Analyzer

Tuesday, 23 December 2014
Écrit par
Grégory Soutadé

Capture d'écran IWLA

C'est mon cadeau de noël à moi : IWLA. Il s'agit, basiquement, d'un clone d'AWSTATS. Pour ceux qui ne connaissent pas, awstats est un analyseur de log (journal des entrées) d'un serveur web (ce dernier faisant aussi l'analyse des logs ftp, ssh, mail...).

C'est un projet qui me tenait à cœur depuis longtemps et, mine de rien, il y a pas mal de boulot juste pour faire des additions !

IWLA a été pensé pour être le plus modulaire possible. Contrairement à awstats qui est complètement monolithique (tout le code dans gros un fichier PERL), l'extraction des statistiques et l'affichage de celles-ci passe par des plugins (hormis les opérations de base). On peut donc ajouter/retirer/modifier à loisir des modules et obtenir exactement ce que l'on veut (et ce de manière très simple). Chaque module va s'occuper de sa partie, voire modifier le résultat des modules précédents !

L'autre avantage (ou inconvénient), est qu'IWLA génère uniquement des pages statiques (en plus de pouvoir les compresser), ce qui accélère la visualisation. Côté design, il reprend le thème d'awstats (ça aurait été beaucoup plus moche si je l'avais fait moi-même) : un design simple qui va à l'essentiel !

Mais ce n'est pas tout, les données (robots, moteurs de recherche), sont directement extraites d'awstats !

Pour finir de troller, IWLA est écrit en Python, ce qui est bien plus moderne :)

Le tout est disponible sous licence GPL sur ma forge. Amusez-vous bien !

Se protéger des robots sur internet

Tuesday, 25 November 2014
Écrit par
Grégory Soutadé

Mona Lisa en robot

Quel drôle de titre ! Je vais donner ici quelques astuces pour éviter que les robots qui parcourent le net n'aient accès à vos données sensibles. Cet article s'adresse surtout aux webmasters.

Qu'est-ce qu'une robot ?

Un robot est un programme automatique qui va scanner tout le web à la recherche d'informations. Tous les robots ne sont pas méchants : Google utilise des robots pour indexer les sites parcourus. D'autres, par contre n'ont qu'un seul objectif : récupérer des informations personnelles pour en faire un mauvais usage (SPAM en tête) ou encore exploiter des failles de sécurité sur les sites rencontrés.


En tant qu'éditeur de site web (le mien !), je suis aux premières loges. Je n'ai pas envie que mon adresse mail se balade partout sur les annuaires de SPAM, mais je souhaite quand même la fournir aux visiteurs légitimes.

Une astuce que j'ai utilisé et qui fonctionne très bien est d'encoder un contenu que l'on ne souhaite pas exposer aux robots en base64 et de l'inclure dans un div avec comme classe CSS "decode64". Au chargement de la page, un petit bout de Javascript va décoder le contenu et l'afficher. C'est exactement ce qui se passe pour ma page "À propos" (regardez le source). L'inconvénient est l'obligation d'activer le Javascript.


Un système de commentaire sur internet (forum, articles...) est tout aussi sujet à SPAM. Les robots vont écrire automatiquement des commentaires sur tout système qui le leur permet. Pour bloquer cette avarie, on peut soit n'autoriser les commentaires que via inscription (ce que fait Disqus), soit utiliser une petite astuce.

Quand on poste un commentaire, il est souvent requis d'entrer son email. Les robots remplissent donc automatiquement le champ "email" d'un formulaire. Sur Dynastie, j'utilise deux champs email : le premier se nomme "email" et est caché par CSS (donc invisible pour l'utilisateur légitime), et le second "mel" (facultatif chez moi) qui est le véritable email.

Ainsi, quand le moteur de blog reçoit un formulaire dont le champ "email" est rempli, il le rejette, car il ne peut provenir que d'un robot !

Email de contact

Il y a encore une faille dans laquelle s'engouffre les robots spammeurs : l'email de contact. Par convention, on définit souvent une adresse "contact@monnomdedomaine". Les robots peuvent donc tenter d'écrire à cette adresse même s'ils ne l'ont trouvé nulle part (ça ne coûte rien). Le seul moyen pour parer cette attaque est le filtre anti spam du serveur mail...