Quand Amazon transforme vos ebooks en manuscrits médiévaux impossible à déchiffrer ou presque
Voici l’histoire de Pixelmelt, un développeur qui voulait simplement sauvegarder en local un ebook acheté sur Amazon pour le lire avec une autre app parce que l’app Kindle d’Android a crashé une fois de trop à son goût.
Mais c’est impossible. Pas de bouton download, pas d’export, que dalle… Même si vous avez acheté le livre, c’est Amazon qui décide de comment et de quand vous pouvez le lire.
Bref, frustré, il se tourne alors vers le Kindle Cloud Reader, la version web de l’app. Et là, il découvre un truc incroyable ! Amazon a créé un système d’obfuscation tellement complexe qu’il ressemble aux techniques de cryptographie des manuscrits anciens. Mais siii, vous savez, ces textes enluminés que seuls les moines pouvaient déchiffrer au Moyen-Âge. Amazon a réinventé le concept en version numérique.
Pour fonctionner, le Kindle Cloud Reader utilise un endpoint de rendu qui nécessite plusieurs tokens d’authentification. Déjà c’est pas simple. Mais ça se corse un peu plus quand on regarde le texte qui s’affiche car ce ne sont pas des lettres ! Ce sont des glyphes, essentiellement des séries de coordonnées qui dessinent une lettre. Ainsi, au lieu de stocker le caractère ‘T’, Amazon stocke “glyphe 24” qui correspond à une forme dessinée via des commandes SVG. Et ces glyphes changent de mapping toutes les 5 pages, un peu comme un codex (coucou Dan Brown ^^) où l’alphabet se transforme à tous les chapitres.
Du coup, pour son livre de 920 pages, il a fallu faire 184 requêtes API distinctes. Chaque requête récupère un nouveau jeu de glyphes soit au total 361 glyphes uniques découverts, et 1 051 745 glyphes à décoder. Oui, ça fait plus d’un million de symboles à traduire pour lire un seul livre.
Amazon a même ajouté des pièges comme des micro-opérations MoveTo complètement inutiles dans les SVG qui s’affichent parfaitement dans le navigateur mais cassent toute tentative de parsing automatique. C’est de l’anti-scraping placé là volontairement, comme des fausses pistes dans des cryptogrammes médiévaux destinées à tromper les copistes non autorisés.
Face à ce délire, notre développeur est alors devenu malgré lui un crypto-archéologue. Sa méthode a donc été de comparer pixel par pixel chaque caractères, valider chaque hypothèse, pour tout reconstruire patiemment. Je vous passe les détails techniques mais il a sorti chaque glyphe SVG sous la forme d’une image, puis a comparé ces images pour trouver leur correspondance avec les vraies lettres en utilisant un outil (SSIM) qui simule la perception humaine pour évaluer la similarité entre deux images.
Résultat, 100% des glyphes matchés ont un score quasi-parfait ce qui lui a permis de reconstruire un fichier EPUB complet avec le formatage, les styles, les liens internes…etc. Tout y est, c’est trop fort !
Bref, Pixelmelt 1 - Amazon 0 ! Et ça, ça fait plaisir ! Maintenant si vous voulez connaitre tous les détails de ça et refaire la même chez vous (pour rigoler hein, ne vous lancez pas dans dans une opération de piratage massif sinon vous finirez en taule comme Sarko ^^)