1 puntos por GN⁺ 2025-10-17 | 1 comentarios | Compartir por WhatsApp
  • Debido a los graves problemas de inestabilidad de la app de Kindle, intentó leer en otro lector un ebook comprado en Amazon
  • El sistema DRM web de Amazon aplica doble y triple protección con varias capas de seguridad y mapeo aleatorio de caracteres
  • Usa un mapeo de fuentes completamente distinto en cada solicitud, lo que dificulta los intentos de hackeo convencionales
  • Desarrolló un método para restaurar todos los glifos aleatorizados a sus caracteres reales mediante hashing basado en imágenes y emparejamiento de fuentes con SSIM
  • Como resultado, completó una solución para restaurar y conservar por completo los libros comprados en bibliotecas personales de ebooks como Calibre

TL;DR

  • Tras comprar su primer ebook en Amazon, quedó muy molesto por la inestabilidad de la app de Kindle para Android
  • Solo quería leer libremente sin conexión, pero le resultó incómodo no poder descargar ni respaldar el libro
  • Al analizar el sistema DRM del lector web de Amazon, se encontró con una compleja estructura de aleatorización y mapeo alfabético
  • Resolviendo la aleatorización con hashes de imagen y emparejamiento de fuentes, logró restaurar con éxito los libros que posee
  • Al usar este código, subraya la importancia de la propiedad del libro comprado y el derecho a respaldarlo

Amazon lo hizo personal

La única vez que intenté hacer las cosas bien

  • Antes solía conseguir ebooks principalmente por vías no oficiales, pero para apoyar al autor intentó por primera vez una compra oficial en Amazon
  • Al abrir el libro en la app de Kindle, se cerraba continuamente, haciendo imposible leerlo bien

Yo solo quería leer mi libro

  • Debido a la inestabilidad de la app, intentó usar el lector web, pero descubrió que estaban bloqueadas tanto la descarga offline como la integración con lectores externos
  • No se puede integrar con bibliotecas personales como Calibre, no se puede respaldar, e incluso Amazon podría borrarlo en cualquier momento
  • Se dio cuenta de que, en la práctica, era una forma de alquiler sin verdadera propiedad

Se vuelve personal

  • Podía haber pedido un reembolso o elegido una vía no oficial, pero decidió hacer ingeniería inversa del cliente web para demostrar la propiedad del libro que compró

  • Al analizar las solicitudes de red en Kindle Cloud Reader (web), encontró el endpoint /renderer/render

  • Requisitos para la descarga

    • Cookie de sesión (inicio de sesión en Amazon)
    • Token de renderizado (obtenido con la API startReading)
    • Token de sesión ADP (autenticación adicional)
  • Al enviar la solicitud con los mismos headers y cookies que el navegador, se entrega un archivo TAR

  • Ejemplo de contenido dentro del archivo TAR

    • page_data_0_4.json : (información de texto, aunque en realidad no es texto)
    • glyphs.json : definiciones SVG de todos los caracteres
    • toc.json : datos de la tabla de contenido
    • metadata.json : metadatos
    • location_map.json : información de mapeo de ubicaciones

Las capas de ofuscación infernales del ebook de Amazon

  • Ejemplo de los datos que aparecen al extraer el texto

    {
      "type": "TextRun",
      "glyphs": [24, 25, 74, 123, 91, 18, 19, 30, 4, ...],
      "style": "paragraph"
    }
    
    • Está compuesto por un arreglo de IDs de glifos, no por caracteres reales
    • Cada glyph ID no está fijado a un carácter específico, sino que se entrega como una imagen basada en SVG
    • Tiene una estructura de cifrado por sustitución, donde el mapeo entre caracteres y glyph IDs no es constante

El alfabeto cambia cada cinco páginas.

  • El mapeo de glifos se reinicia aleatoriamente cada 5 páginas
  • En cada solicitud se aplica una tabla de mapeo distinta, por lo que no se puede mapear ni interpretar el ebook completo de una sola vez
  • Como ejemplo, en un libro de 920 páginas
    • Se requieren 184 solicitudes
    • Se necesita descifrar 184 alfabetos aleatorios
    • Se identifican 361 glifos únicos en total
    • Hay que descifrar 1,051,745 glifos

Pistas falsas en la fuente (se están poniendo astutos)

  • Dentro del path SVG se incluyen comandos de movimiento minúsculos sin sentido (m3,1 m1,6 m-4,-7)
    • En el navegador se renderizan normalmente, pero en bibliotecas SVG de Python, por ejemplo, generan líneas de conexión incorrectas
    • Esto busca provocar fallos en el parsing mediante análisis simples por path
  • El problema se resuelve renderizando fielmente el path completo de una sola vez

Múltiples variantes de fuente

  • La fuente no es una sola, sino 4 tipos distintos (bookerly_normal, italic, bold, bolditalic) usados por separado
  • Las ligaduras y caracteres especiales (ffi, fl, etc.) también existen como glifos independientes, lo que aumenta la dificultad del mapeo

El OCR se queda corto (mi intento fallido)

  • Intentó interpretar las imágenes renderizadas de los glifos con herramientas de reconocimiento óptico de caracteres (OCR)
    • Aproximadamente 51% de acierto; el resto falla
    • Los caracteres individuales sin contexto son difíciles de distinguir para el OCR (1, l, I, signos de puntuación, etc.)

La solución que de verdad funcionó

  • En cada solicitud, glyphs.json incluye información de paths SVG
  • Aunque los glyph IDs cambian cada vez, si el carácter es el mismo, la forma SVG (imagen) es la misma

Por qué falló la comparación directa de SVG

  • Al comparar directamente las coordenadas de los paths SVG, fallaba por pequeñas diferencias y por variaciones en los comandos del path

Coincidencia perfecta a nivel de píxel

  • Después de renderizar los SVG como imágenes, identificó los mismos glifos comparando píxel por píxel
    1. Convirtió todos los SVG a imágenes de resolución 512x512 (usando cairosvg)
    2. Procesó cada imagen con hash perceptual (Perceptual hash) — si la forma es la misma, el hash coincide
    3. Unificó los 184 mapeos de alfabetos aleatorios basándose en los valores hash
    4. Para emparejar con los caracteres reales, comparó cada carácter de la fuente TTF Bookerly usando SSIM (Structural Similarity Index)

Por qué SSIM es perfecto para esto

  • SSIM compara la estructura de las imágenes, permitiendo pequeñas diferencias de renderizado, antialiasing y desajustes de tamaño
  • Para cada glifo desconocido, se asigna el carácter TTF con la puntuación SSIM más alta

Manejo de casos límite

  • Las ligaduras (ff, fi, fl, ffi, ffl) se tratan como un solo glifo para varios caracteres, por lo que se agregaron directamente al TTF y se procesaron con hash
  • Los caracteres especiales y los distintos estilos de fuente (negrita, cursiva, negrita cursiva) también se gestionan como bibliotecas separadas

El momento en que todo funcionó

Estadísticas finales

=== NORMALIZATION PHASE ===
Total batches processed: 184
Unique glyphs found: 361
Total glyphs in book: 1,051,745

=== MATCHING PHASE ===
Successfully matched 361/361 unique glyphs (100.00%)
Failed to match: 0 glyphs
Average SSIM score: 0.9527

=== DECODED OUTPUT ===
Total characters: 5,623,847
Pages: 920
  • Todos los caracteres fueron descifrados con precisión, logrando una restauración de alta fidelidad

Reconstrucción EPUB con formato perfecto

  • Aprovechando la información de coordenadas de bloques de texto, estilos de fuente y enlaces internos dentro de los datos JSON
    • Se genera un EPUB que conserva lo más posible del original, incluyendo separación de párrafos, alineación, negritas, cursivas, tamaño de fuente y enlaces internos

La conclusión real

  • Quedó claro que Amazon invirtió un esfuerzo considerable en su DRM web
  • Puede ser un esfuerzo excesivo para uso práctico, pero tiene valor como aprendizaje técnico y demostración
  • Se enfatiza que esto tiene como fin el respaldo de libros comprados por el propio usuario y la protección de su propiedad

Material de referencia (código open source)

  • PixelMelt/amazon_book_downloader GitHub
    • Herramienta para respaldar libros leídos en el lector web de Amazon
    • Resuelve automáticamente estructuras DRM complejas como la del caso descrito
    • Útil para colección personal y protección/investigación de datos

1 comentarios

 
GN⁺ 2025-10-17
Comentarios en Hacker News
  • Comparto un dato interesante. En Estados Unidos, este caso entra en una categoría de declaraciones que, desde la perspectiva de un fiscal, podría dar lugar a castigo <i>penal</i> (espero que no ocurra en la práctica, y si los tribunales respetan la Primera Enmienda, cabría esperar que lo desestimen). No es un tema civil como difamación o fraude, sino algo por lo que la policía podría venir directamente a arrestarte. Si alguien se pregunta por qué los ingenieros odian tanto el DRM, no es solo porque sea una molestia en el trabajo; cuando lo sufres en tu propia computadora, resulta tremendamente irritante. Lo más grave es que, si le explicas a alguien lo tonto, incómodo y fácil de eludir que es, incluso eso también está prohibido legalmente. Para más contexto, vean este artículo de la EFF.

    • No me gusta la DMCA, pero dudo de la afirmación de que este texto en sí viole 17 USC § 1201. Eludir DRM o distribuir código relacionado claramente sería una infracción, pero me pregunto si existe algún caso en que se haya castigado únicamente por “describirlo con palabras”. Tengo curiosidad por la jurisprudencia: si realmente se ha procesado a alguien por una explicación técnica de este tipo. La ley dice “nadie debe eludir DRM”, y solo prohíbe la distribución de “tecnología, productos o servicios”. Está redactada con cuidado para que no se aplique a prensa tradicional o publicaciones. Ver texto completo de la ley.

    • Creo que la ley actual debe cambiarse sí o sí. Sostengo que, si se distribuye una obra con DRM, esa obra debería quedar excluida para siempre de la protección del copyright. El motivo es que el DRM termina funcionando como una forma de excluir permanentemente la obra del dominio público. Incluso creo que, si por error se distribuye una demo o preview con DRM, eso también debería invalidar el copyright.

  • Con los libros que solo se podían comprar en Amazon, antes compraba el libro, lo descargaba en la app de escritorio, lo metía a Calibre, lo convertía a epub y de paso le quitaba el DRM para leerlo en Kobo. Pero hace poco Amazon reforzó el DRM y ya bloquearon ese método. Así que ahora simplemente consigo esos libros en versión pirata.

    • Amazon tiene culpa, pero parte de la responsabilidad también es de algunas editoriales grandes. Una gran editorial presionó a Amazon para que cerrara sí o sí esta vulnerabilidad del DRM, y dijo que si no lo hacían retiraría todo su contenido (trabajé en Kindle entre 2017 y 2019, y estaba en el equipo que desarrolló el código que el OP hizo reverse engineering).

    • Conozco a alguien que escribe libros, así que ve de primera mano lo poco que venden en la era de la piratería en internet. Entiendo las ganas de usar un libro como uno quiera, pero volver a bajarlo pirata después de comprarlo y apoyar a los autores son cosas distintas. Puedes comprar el libro de verdad para ayudar al autor. Los libros son muy baratos para el valor y las horas de entretenimiento que ofrecen.

    • Los libros son, de hecho, la forma más barata de entretenimiento. Me parece que la relación precio/valor es enorme. Recomiendo comprarlos legalmente como forma de apoyar a autores y editoriales. Si el dinero aprieta, la biblioteca también es una gran opción. Conozco gente que baja libros pirata pero luego gasta cientos de dólares en streaming o juegos con battle pass. Me cuesta entenderlo, porque los libros son ridículamente baratos. Yo compré toda la serie de Storm Archives de Brandon Sanderson en ebook por $10 (unas 100 horas de entretenimiento). Sale a 10 centavos por hora.

    • Hace poco quise comprarle un e-reader a mi esposa, vi también un video de Louis Rossman sobre el DRM de Kindle y además escuché aquí elogios sobre Kobo. Al final, parece que yo también terminaré comprando un Kobo.

    • Puede que al final llegue el día en que terminemos leyendo o escaneando ebooks con DRM bloqueado usando una cámara escáner para libros físicos.

  • ¡Nada da más miedo que un ingeniero enojado! Este artículo fue realmente impresionante y muestra muy bien la esencia del hacking. "¿Solo quería leer un libro? No. ¿Quería demostrar mi punto? Eso sí. ¿Aprendí sobre renderizado SVG, perceptual hashing y métricas tipográficas? Probablemente sí".

  • Me pregunto si todavía se pueden bajar libros con la app de Kindle para PC usando la vieja herramienta DeDRM de apprenticealf (ahora el fork nodrm/DeDRM_tools). Tal vez solo funcione con versiones antiguas de la app para PC, y aun sin usar la última versión se podía impedir la descarga en formato kfx mediante un hack al registro y recibirlo en formato azw3 (hubo un tiempo en que eso funcionaba). En el repo, en el enlace a la wiki que aparece al inicio del README, dentro del apartado que dice que ya no tiene mantenimiento, está esa información. Solo así se podía obtener un ebook más cercano al original (en vez de una pantalla que solo se ve parecida). El simple hecho de que haya que hacer todo esto ya es absurdo. Mis respetos a quienes siguen resistiendo e intentando romper el DRM de Amazon.

    • Lo que se vino abajo en los métodos de hackeo del DRM después de la descarga fue porque Amazon quitó la función de “Descargar y transferir por USB”. Desde entonces no he vuelto a comprar ebooks de Amazon. Comprar el libro y luego bajar una copia pirateada sin DRM es, más o menos, la única alternativa realista.

    • Yo uso una herramienta de pago llamada epubor, que quita casi todo tipo de DRM —kindle, kobo, Adobe, etc.— y luego convierte a epub. Es compatible con las versiones más recientes de las apps y, cuando algo deja de funcionar, suelen sacar actualizaciones rápido. Sí se siente raro pagar por el libro y además pagar por una herramienta para quitar el DRM, pero esa es la realidad.

    • En las versiones antiguas de la app para PC sí se puede descargar, pero las versiones compatibles ya no descargan libros publicados después de abril de 2025.

    • Para libros de Audible, recomiendo Libation.

  • Desde que Amazon quitó la función de descarga, liberé todos los libros que tenía y migré por completo mi sistema a Kavita+koreader. No pienso volver a comprar jamás un libro Kindle. También hice jailbreak a mis dos Kindle y les instalé koreader. Ahora incluso sincroniza el progreso con Kavita, así que ya no siento que me falte ninguna función.

    • Desde que salió el último gran jailbreak para dispositivos Kindle, yo también uso koreader en un Scribe. Para sincronizar el progreso uso Hardcover (una alternativa a Goodreads). Eso sí, las recomendaciones todavía no se alinean mucho con mis gustos, aunque espero que mejore cuando crezca la base de usuarios.

    • El jailbreak valió muchísimo la pena gracias a la función de Calibre para pasar libros a KOreader por wifi. Mi próximo lector probablemente será un kobo u otro dispositivo donde KOreader funcione sin tanto hassle.

  • Quitar el DRM de ebooks es prácticamente un estándar. Si no, ni siquiera podría leerlos en Kobo. Tampoco registré el lector en Adobe ni creé una cuenta de Kobo (hasta me salté la configuración inicial).

  • La situación del DRM de Kindle es realmente la peor. Antes bastaba con agregar el plugin DeDRM a Calibre para descifrar fácilmente archivos KFX desde la app Kindle for PC. Desde inicios de 2025 lo bloquearon por completo. Los expertos todavía logran romperlo, pero ya no comparten cómo hacerlo. Hasta el propio mantenedor del plugin dejó de publicar releases oficiales por temor a quedar expuesto. Ver enlace relacionado 1, enlace relacionado 2. Hoy Amazon está cerrando con mucha fuerza las vías de bypass, así que si necesitas algún libro, mejor quitarle el DRM lo antes posible.

    • Amazon tiene culpa, pero algunas editoriales grandes también. Una editorial presionó a Amazon para que cerrara sí o sí una vulnerabilidad de bypass del DRM, y amenazó con retirar todo su catálogo si no lo hacían (trabajé en el equipo de Kindle entre 2017 y 2019, y estaba en el equipo que escribió el código al que el OP le hizo reverse engineering).
  • El método para quitar el DRM de ebooks de Amazon probablemente no funcione muy bien con manga o novelas gráficas de Amazon. Por eso últimamente dejé Amazon y me cambié por completo a Kobo, donde el DRM es mucho más fácil de romper. Pero como Amazon compró Comixology, sigue teniendo la colección de cómics más grande.

    • Las imágenes todavía no están resueltas del todo; además tienen una capa extra de ofuscación.

    • En los cómics se necesita la “imagen” completa de la página, así que quitar el DRM no es tan sencillo. Me pregunto si analizaron las solicitudes de red o cómo maneja las imágenes el autor.

    • Puede que ya lo sepas, pero a mí me ha funcionado bien conseguir cómics con una tarjeta de biblioteca a través de hoopla. Depende de tu biblioteca local, pero he podido encontrar más o menos el 35% de los cómics que quería. No están las obras más recientes, pero los lanzamientos de hace 6 a 12 meses suelen estar sin mucho problema.

  • La DMCA puede alcanzarte en cualquier momento. Ojalá el autor haya cuidado bien su identidad, porque si no podría venirle un golpe fuerte. Ver caso relacionado 1, caso relacionado 2.

  • No está relacionado de forma directa con el artículo, pero comparto un dato algo conectado con la discusión. Cuando no puedes descargar un libro desde Amazon, hay una vía alternativa algo de nicho: conseguir el ebook desde una biblioteca que soporte Overdrive/libby. Algunas apps de bibliotecas permiten descargar directamente archivos con DRM, y luego se pueden procesar con Adobe+Calibre. Claro, necesitas tarjeta de biblioteca y también depende de si tienen el libro que buscas, pero en mi caso resuelvo así el 90% de los libros que necesito.