Como burlaram o DRM web do Kindle da Amazon
(blog.pixelmelt.dev)- Devido aos graves problemas de instabilidade do app Kindle, tentou ler em outro leitor os ebooks comprados na Amazon
- O sistema de DRM web da Amazon aplica proteção em várias camadas com mapeamento de caracteres aleatorizado
- Usa um mapeamento de fonte completamente diferente a cada requisição, dificultando tentativas comuns de hacking
- Desenvolveu um método para restaurar todos os glifos aleatorizados aos caracteres reais por meio de hashing baseado em imagem e correspondência de fontes baseada em SSIM
- Como resultado, concluiu uma solução para restaurar e arquivar completamente livros comprados em bibliotecas pessoais de ebooks, como o Calibre
TL;DR
- Após comprar o primeiro ebook na Amazon, ficou muito insatisfeito com a instabilidade do app Kindle para Android
- Só queria ler livremente offline, mas achou isso inconveniente porque não era possível baixar nem fazer backup
- Ao analisar o sistema de DRM do leitor web da Amazon, encontrou uma estrutura complexa de aleatorização e mapeamento do alfabeto
- Resolveu a aleatorização com hash de imagem e correspondência de fontes, restaurando com sucesso os livros que possuía
- Ao usar esse código, destaca a importância da propriedade do livro comprado e do direito de backup
A Amazon tornou isso pessoal
A única vez em que tentei fazer as coisas do jeito certo
- Antes, costumava obter ebooks principalmente por rotas não oficiais, mas tentou pela primeira vez uma compra formal na Amazon para apoiar o autor
- Ao abrir o livro no app Kindle, ele continuava travando, tornando a leitura praticamente impossível
Eu só queria ler meu livro
- Por causa da instabilidade do app, tentou usar o leitor web, mas descobriu que tanto o download offline quanto a integração com leitores externos estavam bloqueados
- Não havia integração com bibliotecas pessoais, como o Calibre, nem possibilidade de backup; e a Amazon poderia até remover o conteúdo a qualquer momento
- Percebeu que, na prática, era um aluguel sem propriedade real
Isso se torna pessoal
-
Poderia ter pedido reembolso ou recorrido a uma rota não oficial, mas decidiu fazer engenharia reversa do cliente web para provar a propriedade do livro comprado
-
Ao analisar as requisições de rede no Kindle Cloud Reader (web), encontrou o endpoint
/renderer/render -
Condições necessárias para o download
- Cookie de sessão (login na Amazon)
- Token de renderização (obtido pela API
startReading) - Token de sessão ADP (autenticação adicional)
-
Ao fazer a requisição com os mesmos headers e cookies do navegador, um arquivo TAR é fornecido
-
Exemplo da estrutura dentro do arquivo TAR
page_data_0_4.json: (informações de texto, embora na prática não seja texto)glyphs.json: definições SVG de todos os caracterestoc.json: dados do sumáriometadata.json: metadadoslocation_map.json: informações de mapeamento de localização
As camadas de ofuscação infernais do ebook da Amazon
-
Exemplo dos dados obtidos ao extrair texto
{ "type": "TextRun", "glyphs": [24, 25, 74, 123, 91, 18, 19, 30, 4, ...], "style": "paragraph" }- É composto não por caracteres reais, mas por um array de IDs de glifos
- Cada ID de glifo não fica preso a um caractere específico; ele é fornecido como uma imagem baseada em SVG
- Trata-se de uma estrutura de cifra de substituição, em que o mapeamento entre caractere e ID de glifo não é fixo
O alfabeto muda a cada. Cinco. Páginas.
- O mapeamento dos glifos é redefinido aleatoriamente a cada 5 páginas
- Uma tabela de mapeamento diferente é aplicada a cada requisição, tornando impossível mapear ou interpretar o ebook inteiro de uma só vez
- Como exemplo, no caso de um livro de 920 páginas
- 184 requisições necessárias
- 184 decodificações de alfabetos aleatórios necessárias
- 361 glifos únicos identificados no total
- 1.051.745 glifos precisam ser decodificados
Dicas falsas de fonte (eles ficaram espertos)
- Dentro dos paths SVG há comandos minúsculos de movimento sem significado (
m3,1 m1,6 m-4,-7)- No navegador, a renderização parece normal, mas em bibliotecas SVG de Python e afins surgem linhas de conexão incorretas
- Isso induz à falha de parsing quando se tenta analisar os paths de forma simples
- O problema só é resolvido ao renderizar fielmente o path inteiro de uma vez
Múltiplas variantes de fonte
- A fonte também não é uma só: 4 tipos (bookerly_normal, italic, bold, bolditalic) são usados separadamente
- Ligaturas e caracteres especiais (
ffi,fletc.) também existem como glifos separados, aumentando a dificuldade do mapeamento
OCR é mais ou menos (minha tentativa fracassada)
- Tentou interpretar as imagens renderizadas dos glifos com ferramentas tradicionais de OCR
- Cerca de 51% de taxa de reconhecimento; o restante falhou
- Caracteres isolados sem contexto são difíceis de distinguir no OCR (
1,l,I, pontuação etc.)
A solução que realmente funcionou
- Em cada requisição,
glyphs.jsoninclui informações de path SVG - Mesmo que o ID do glifo mude toda vez, se o caractere for o mesmo, a forma SVG (imagem) também será a mesma
Por que a comparação direta de SVG falhou
- Ao comparar diretamente as coordenadas dos paths SVG, pequenas diferenças e variações nos comandos faziam o método falhar
Correspondência perfeita em nível de pixel
- Após renderizar o SVG como imagem, identificou glifos iguais por comparação em nível de pixel
- Todos os SVGs foram convertidos em imagens com resolução 512x512 (usando
cairosvg) - Cada imagem foi processada com hash perceptual (Perceptual hash) — se a forma fosse igual, o valor do hash coincidia
- Os 184 mapeamentos de alfabetos aleatórios foram unificados com base nos valores de hash
- Para corresponder aos caracteres reais, cada caractere da fonte Bookerly TTF foi comparado pelo método SSIM (Structural Similarity Index)
- Todos os SVGs foram convertidos em imagens com resolução 512x512 (usando
Por que o SSIM é perfeito para isso
- O SSIM compara a estrutura da imagem e tolera pequenas diferenças de renderização, anti-aliasing e discrepâncias de tamanho
- Para cada glifo desconhecido, foi associado o caractere TTF com a maior pontuação de SSIM
Lidando com os casos de borda
- Ligaturas (
ff,fi,fl,ffi,ffl) tratam vários caracteres como um único glifo, então foram adicionadas diretamente ao TTF e processadas com hash - Caracteres especiais e vários estilos de fonte (negrito, itálico, negrito itálico) também foram gerenciados em bibliotecas separadas
O momento em que tudo funcionou
Estatísticas finais
=== 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 os caracteres foram decodificados com precisão, resultando em uma restauração de alta qualidade
Reconstrução em EPUB com formatação perfeita
- Usando as informações de coordenadas dos blocos de texto, estilo de fonte e links internos presentes nos dados JSON
- gerou um EPUB que preserva de forma próxima ao original separação de parágrafos, alinhamento, negrito e itálico, tamanho de fonte e links internos
A conclusão real
- Confirmou que a Amazon investiu bastante esforço no DRM web
- É um esforço excessivo para uso prático, mas tem valor como aprendizado e demonstração técnica
- Ressalta que o objetivo disso é backup dos próprios livros comprados e proteção do direito de propriedade
Materiais de referência (código open source)
- PixelMelt/amazon_book_downloader GitHub
- Ferramenta para fazer backup de livros lidos no leitor web da Amazon
- Resolve automaticamente estruturas complexas de DRM como a do caso descrito
- Útil para acervo pessoal, proteção de dados e pesquisa
1 comentários
Comentários no Hacker News
Compartilhando um fato curioso. Nos EUA, esse caso entra em um tipo de fala que, do ponto de vista do promotor, pode render punição <i>criminal</i> (espero que isso nunca aconteça, e que, se os tribunais respeitarem a Primeira Emenda, o caso seja rejeitado). Não é uma questão civil como difamação ou fraude; é algo em que a polícia pode literalmente bater à sua porta e te prender. Se você quer saber por que engenheiros odeiam tanto DRM, não é só porque dá trabalho: quando você passa por isso no seu próprio computador, é profundamente irritante. Pior ainda é que, se você contar a alguém o quão idiota, inconveniente e fácil de contornar isso é, até isso pode ser proibido por lei. Para mais detalhes, veja este artigo da EFF.
Não gosto da DMCA, mas desconfio da ideia de que este post, por si só, viole a 17 USC § 1201. Contornar DRM ou distribuir código relacionado certamente seria violação, mas fico curioso se já houve algum caso em que alguém foi punido apenas por "descrever em palavras" como fazer. Queria ver precedentes de processos baseados especificamente nesse tipo de explicação técnica. A lei diz basicamente “ninguém pode contornar DRM” e também proíbe a distribuição de “tecnologia, produto ou serviço”. Ela foi escrita com bastante cuidado para não se aplicar à imprensa tradicional ou a posts comuns. Veja o texto da lei.
Acho que a lei atual precisa mudar sem falta. Defendo que, se uma obra for distribuída com DRM, ela deve perder a proteção autoral para sempre. Isso porque o DRM acaba funcionando como uma forma de excluir a obra do domínio público permanentemente. Na verdade, acho que até distribuir por engano um demo ou preview com DRM deveria invalidar o copyright.
Para livros disponíveis só na Amazon, eu costumava comprar o livro, baixar pelo app de desktop, colocar no Calibre, converter para epub e remover o DRM para ler no Kobo. Mas recentemente a Amazon endureceu o DRM e esse método deixou de funcionar. Então agora eu simplesmente consigo esses livros por meios piratas e leio assim.
A Amazon tem culpa, mas parte da responsabilidade também é de algumas grandes editoras. Uma grande editora pressionou a Amazon a fechar essa brecha do DRM, ameaçando retirar todo o conteúdo se isso não acontecesse (trabalhei no Kindle entre 2017 e 2019 e fazia parte da equipe que desenvolveu o código que o OP fez engenharia reversa).
Conheço alguém que escreve livros, então tenho noção do quanto eles vendem pouco na era da distribuição ilegal online. Entendo a vontade de usar os livros do jeito que você quiser, mas baixar uma cópia pirata depois da compra e apoiar o autor são coisas separadas. Você ainda pode comprar o livro de verdade para ajudar o autor. Livros são muito baratos pelo valor e pelas horas de entretenimento que oferecem.
Livro é provavelmente a forma mais barata de entretenimento. Acho o custo-benefício absurdo. Recomendo comprar oficialmente como forma de apoiar autores e editoras. Se a grana estiver curta, biblioteca também é uma ótima opção. Conheço gente que baixa livro ilegalmente mas gasta centenas de dólares com streaming ou jogos com battle pass. Não faz sentido para mim, porque livro é barato demais. Eu comprei toda a série Storm Archives, do Brandon Sanderson, em ebook por $10 (100 horas de entretenimento). Dá 10 centavos por hora.
Recentemente eu estava pensando em comprar um e-reader para minha esposa, vi um vídeo do Louis Rossman sobre o DRM do Kindle e também ouvi muitos elogios ao Kobo aqui. Acho que vou acabar comprando um Kobo também.
Talvez um dia a gente chegue ao ponto de usar uma câmera scanner de livros físicos para ler ou digitalizar ebooks travados por DRM.
Não existe nada mais assustador do que um engenheiro irritado! Este post foi incrível e mostra muito bem a essência do hacking. "Será que eu só queria ler um livro? Não. Será que eu queria provar um ponto? Com certeza. Será que eu aprendi sobre renderização SVG, perceptual hashing e métricas de fontes? Provavelmente"
Fico curioso se ainda dá para baixar pelo app Kindle para PC usando a antiga ferramenta DeDRM do apprenticealf (hoje no fork nodrm/DeDRM_tools). Talvez só funcione em versões antigas do app para PC, e mesmo sem usar a versão mais recente ainda dava para bloquear o download em kfx e receber em formato azw3 com um hack no registro (isso funcionou em certa época). Há uma observação sobre isso no link da wiki no topo do README do repositório, na seção que diz que ele não é mais mantido. Só assim dá para obter um ebook mais próximo do original, em vez de uma tela que apenas se parece com ele. O absurdo é justamente precisar fazer tudo isso. Meu respeito a quem continua persistindo para quebrar o DRM da Amazon.
O método de hackear o DRM depois do download morreu quando a Amazon removeu a função de “Download & Transfer via USB”. Depois disso, nunca mais comprei ebooks da Amazon. Comprar o livro e depois baixar uma cópia sem DRM ilegalmente acabou sendo a alternativa mais realista.
Eu uso uma ferramenta paga chamada epubor, que remove praticamente todo tipo de DRM — Kindle, Kobo, Adobe etc. — e converte para epub. Ela é compatível com as versões mais recentes dos apps e, quando algo quebra, costuma receber atualização rápido. É estranho pagar pelo livro e também pagar por uma ferramenta para remover o DRM, mas essa é a realidade.
Em versões antigas do app para PC ainda há suporte para download, mas as versões compatíveis não baixam livros lançados depois de abril de 2025.
Para livros da Audible, recomendo o Libation.
Depois que a Amazon removeu a função de download, libertei todos os livros que eu tinha e migrei todo o sistema para Kavita+koreader. Não pretendo comprar livros Kindle nunca mais. Também fiz jailbreak nos dois Kindles e instalei o koreader. Agora até sincroniza o progresso com o Kavita, então nem sinto falta de funcionalidades.
Depois que saiu o último grande jailbreak para dispositivos Kindle, eu também instalei o koreader no meu Scribe. Para sincronização de progresso uso o Hardcover (uma alternativa ao Goodreads). Só que, por enquanto, as recomendações ainda não combinam muito com o meu gosto; espero que isso melhore quando a base de usuários crescer.
O fato de o Calibre conseguir enviar livros por wifi para o KOreader fez o jailbreak valer muito a pena. No próximo leitor, vou escolher um Kobo ou outro dispositivo em que o KOreader funcione sem dor de cabeça.
Remover DRM de ebook é praticamente padrão. Caso contrário, eu nem conseguiria ler no Kobo. Também nunca registrei meu leitor na Adobe, nem criei conta no Kobo (inclusive pulei a configuração inicial).
A situação do DRM do Kindle é realmente péssima. Antigamente bastava adicionar o plugin DeDRM no Calibre para descriptografar facilmente os arquivos KFX do app Kindle for PC. Desde o começo de 2025 isso foi bloqueado de vez. Especialistas ainda conseguem quebrar, mas já não compartilham mais. Até o mantenedor do plugin parou de fazer lançamentos oficiais por medo de ter sua identidade exposta. Veja link relacionado 1 e link relacionado 2. Hoje em dia a Amazon está reprimindo os métodos de contorno com tanta força que, se houver algum livro de que você precisa, é melhor remover o DRM o quanto antes.
O método de remoção de DRM dos ebooks da Amazon provavelmente não funciona muito bem para mangás e graphic novels da Amazon. Por isso, recentemente deixei a Amazon de lado e migrei totalmente para o Kobo, onde é mais fácil quebrar o DRM. Mesmo assim, como a Amazon comprou a Comixology, ela ainda tem de longe a coleção de quadrinhos mais ampla.
As imagens ainda não foram totalmente resolvidas, e existe uma camada extra de ofuscação
Quadrinhos precisam da página inteira como "imagem", então a remoção do DRM não é tão simples. Fico curioso se ele analisou as requisições de rede ou como as imagens são tratadas do lado do autor
Talvez você já saiba, mas eu tive uma boa experiência usando o hoopla com cartão de biblioteca para conseguir quadrinhos. Depende da biblioteca local, claro, mas eu encontrava algo como 35% do que queria ler. Não tem os lançamentos mais recentes, mas obras publicadas há 6 a 12 meses normalmente estavam disponíveis sem grandes problemas
A DMCA pode te pegar a qualquer momento. Espero que o autor tenha tomado cuidado para proteger a identidade, senão pode vir uma reação pesada. Veja caso relacionado 1 e caso relacionado 2.
Não é algo diretamente ligado a este post, mas compartilho uma informação um pouco relacionada à discussão. Quando não é possível baixar um livro da Amazon, existe um caminho alternativo de nicho: pegar o ebook por uma biblioteca que ofereça suporte a Overdrive/libby. Alguns apps de biblioteca permitem baixar diretamente arquivos protegidos por DRM, e dá para processá-los com Adobe+Calibre. Claro que depende de ter cartão de biblioteca e do livro desejado estar disponível, mas, para mim, esse método resolve 90% dos livros de que preciso.