世界を動かす技術を、日本語で。

AmazonのKindleウェブDRMを回避する方法

概要

  • Amazon KindleのDRM解除に挑戦した体験談
  • Kindleアプリの不具合とダウンロード制限への不満
  • Amazonの複雑なDRMとフォント乱数化の詳細解説
  • 画像ハッシュとフォント比較による完全解読方法
  • 技術的挑戦の成果と注意喚起

AmazonのDRMとの戦い:電子書籍を「本当に」所有するまで

  • Amazon Kindle で初めて電子書籍を購入した体験
  • Kindle Androidアプリ が頻繁にクラッシュし、読書が困難
  • 書籍のダウンロードや他アプリ(Calibre等)での利用が不可
  • 購入したはずの本が 実質レンタル状態 である現実
  • Amazonの都合で削除可能 な制限付き所有権

Kindle Cloud Readerのネットワーク解析

  • Kindle Cloud Reader (Web版)経由での書籍取得を試行
  • 必要な認証情報:セッションCookie、レンダリングトークン、ADPセッショントークン
  • 正しいヘッダーとクッキーでアクセスすると TARファイル を取得
    • page_data_0_4.json:テキスト情報(ただし実際はテキストでない)
    • glyphs.json:各文字のSVG定義
    • toc.json:目次
    • metadata.json:書籍情報
    • location_map.json:位置情報

AmazonのDRM多重防御

  • テキストは Unicode文字列ではなく、Glyph ID(数字の羅列)
  • 各Glyph IDはSVGパス(画像としての文字)に変換
  • 置換暗号 のような仕組みで、文字とGlyph IDの対応が非連続
  • 5ページごとにアルファベット全体がランダム化
    • 1冊で184回も異なるアルファベットを解読する必要
    • 総Glyph数1,051,745、固有Glyph数361

フォント解析を妨害する工夫

  • SVGパス内に 偽のコマンド(micro MoveTo) を大量挿入
    • ブラウザでは正常表示、Python等のSVGライブラリではレンダリング破壊
  • 4種類のフォントバリアント :normal/italic/bold/bold-italic
    • ligature(ff, fi, fl等)も多数含む
  • OCR(光学文字認識)は単文字認識が弱く、 識別率51%で断念

完全解読へのアプローチ

  • 各APIリクエストごとに glyphs.json (SVGパス定義)を取得
  • SVGレンダリング→画像化→ピクセル単位のハッシュ生成
    • cairosvgで512x512px画像化し、 perceptual hash で比較
  • Bookerly TTFフォント 全文字を画像化し、 SSIM(構造的類似度指数) で一致判定
    • Glyphごとに最も類似度の高い文字を対応付け
  • Ligatureや特殊文字、各フォントバリアントにも個別対応

EPUBの再構築と成果

  • テキスト位置やスタイル情報もJSONから抽出し、 段落・装飾・リンク も忠実再現
  • 最終成果:
    • 184バッチ、361ユニークGlyph、100%マッピング成功
    • 5,623,847文字、920ページの完全デコード
    • 元書籍とほぼ見分けがつかないEPUB生成

技術的・倫理的まとめ

  • AmazonのWeb DRMは本気で堅牢
  • 「1冊読むため」には割に合わないが、 技術的挑戦としては価値あり
  • この知識は 自分が購入した書籍のバックアップ 目的に限ること
  • GitHubリポジトリ: PixelMelt/amazon_book_downloader
    • 利用・拡散時は法的リスクに注意

技術的ポイントまとめ

  • API認証 :セッションCookie・トークン管理
  • SVGパス解析 :画像化→ハッシュ化→類似度判定
  • 複数フォント・Ligature対応 :全バリアントの網羅
  • EPUB再構築 :段落・装飾・リンク情報の復元
  • DRM回避の限界と責任 :自己所有物の正当なバックアップのみ推奨

参考リンク

Hackerたちの意見

これ、彼らの漫画やグラフィックノベルにはうまくいかないんじゃないかな? しばらく前にAmazonからの電子書籍の購入をやめて、Koboに完全に切り替えたんだけど(そっちのDRMは簡単に解除できるしね)、AmazonがComixologyを買収したから、デジタルコミックのコレクションはまだまだ一番だよね。

これ知ってると思うけど、実は図書館のカードでhooplaから漫画をたくさん入手できてるんだ。もちろん、これは地元の図書館次第だけど、まだ試してないなら、ぜひ見てみて! 欲しいものが35%の確率であるかな。最新のリリースではないけど、6ヶ月から12ヶ月前の作品は問題なく手に入れられたよ。

漫画はページにフルの「画像」が必要だから、これはうまくいかないと思う。リクエストを調べてみて、何が得られるか見れる? それとも、著者に聞きたいんだけど、電子書籍の画像はどうなるの?

まだ画像がうまくいってないんだ。ちょっと変な難読化がされてるみたいだし。

これは本来存在すべきじゃない面倒な問題に対する美しい解決策だね! 素晴らしい仕事だ。

どんな状態かは分からないけど(何年も使ってないし)、apprenticealfのDeDRMツールって、nodrm/DeDRM_toolsにフォークされてるやつ、まだKindle PCアプリのダウンロードに対応してるのかな? 現行バージョンがダメでも、古いバージョンのPCアプリをいじってみるのもアリかも。kfxのダウンロードを無効にしてazw3を取得するレジストリハックもあったはずで、昔はそれがうまくいったこともある… apprenticealfのDeDRMリポジトリに、そのことが書かれてるwikiリンクがREADMEの上の方にあるよ。これで、見た目が似てるだけじゃなくて、元の電子書籍に近いバージョンが手に入るかも。そもそもこんなことが必要だなんて、ありえないよね。AmazonのDRMを回避するために根気よく頑張ってる人には、頭が下がるよ。

ダウンロード -> crack DRMの流れを潰したのは、Amazonが「USB経由でダウンロードして転送する」オプションを削除したことだね。それ以来、Amazonから電子書籍を買ってないよ。唯一の選択肢は、書籍を買ってからDRM解除されたコピーを海賊版で手に入れることだね。

古いバージョンのPCアプリのダウンロードには対応してるけど、サポートされてるバージョンでは2025年4月以降にリリースされた本はダウンロードできないよ。

あと、Audibleの本用のLibationもね。

Kindleアプリでのレンダリングで一番イライラするのは、数式系のコンテンツ(x²みたいなちょっとしたものでも)を画像として表示することなんだよね。それが(a)低解像度で、(b)ダークモードで反転しないのがまた嫌だ。もう一つの不満は、ダークモードでは黒背景にグレーしか使えなくて、白は使えないってこと。

あなたが言ってる電子書籍は、²の記号をCSSやUnicode、MathJax生成のMathMLじゃなくて画像で使ってるの?例えば、スキャンから変換された古い数学の本はそういうのが多いんだ。OCRは通常のテキストにはまあまあだったけど、上付き文字や下付き文字、他の数学記号にはあまり良くなかったからね。

同じく。彼らが本のダウンロードオプションを削除したとき、買った本を全部解放して、Kavitaとkoreaderに移行したんだ。それ以来、キンドルの本は二度と買わないつもり。両方のキンドルを脱獄して、koreaderを使ってるけど、今はKavitaとの進捗同期もサポートされてて、すごく便利!だから機能的には全然問題ないよ。

最後の大規模なKindleデバイスの脱獄がリリースされて以来、ScribeでもKoreaderを使ってるよ。でも、代わりにHardcover(Goodreadsの代替)で進捗同期を設定してる。ただ、唯一の欠点は、今のところ彼らのおすすめが自分の興味に合ってないみたいだけど、将来的にはもっとサービスを使う人が増えれば変わるといいな。

https://readest.comを使ってて、すごく楽しんでるよ。ただ、「生涯購入」オプションがあればいいなって思ってる。

見た目がいいね。OPDSサポートがないのは残念だけど、GitHubのREADMEに計画されてる機能として載ってるのを見るのは嬉しい!

エンジニアを怒らせたら、地獄の怒りが待ってる!これはすごく面白い読み物で、ハッキングの本質を表してるね。「一冊の本を読むために価値があった?いいえ。ポイントを証明するために?絶対に。SVGレンダリング、知覚ハッシュ、フォントメトリクスについて学ぶために?多分そうだね。」

Amazonでしか手に入らない本については、以前は買って、デスクトップアプリでダウンロードして、Calibreにインポートして、epubに変換してDRMを剥がしてからKoboに転送してたんだ。でも、しばらく前にDRMがさらに厳しくなって、そのせいで今はその本を海賊版で手に入れてるよ。

同じ道を辿ったね。少なくともスティーブ・ジョブズはDRMがどうあるべきか理解してたよ。

なんか変だな。まず、正月に妻に電子書籍リーダーを買うことに決めて、そしたらルイ・ロスマンがKindleのDRMのバイトアンドスイッチについて動画を出した。で、これに加えて人々がKoboを褒めてる。どうやらKoboを買うことになりそうだ。

そのうち、物理的な本をスキャンするカメラがDRMロックされた電子書籍を読むために使われるようになるだろうね。

これは素晴らしい仕事だけど、これがDRMとして成立する理由がよくわからないな。OPが本のページをウェブクライアントにレンダリングするためのプロトコルをリバースエンジニアリングしたみたいだね。確かに、APIコールごとにグリフIDを回転させるのは面倒だけど、暗号化や難読化とは言えないし、デコーダーが処理しなきゃいけない追加のマッピングステップに過ぎないよ。アマゾンの誰かがこれを書いた時、彼らのDRMがバックドアになってることに気づかなかったみたいだね。

アマゾンの誰かがこれを書いた時、彼らのDRMがバックドアになってることに気づかなかったみたいだね。もしかしたら気づいてたのかも、今は修正しなきゃいけなくなるね。

このコードを書いたチームにいたんだ。リバースエンジニアリングできるってわかってたけど、気にしてなかったよ。上層部はかなり難読化されてることに満足してたし、私たちはもっと対策を強いられなかったことに満足してた。