概要
- 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回避の限界と責任 :自己所有物の正当なバックアップのみ推奨
参考リンク
- GitHub - PixelMelt/amazon_book_downloader
- Amazon web readerから書籍をダウンロードするツール
- 技術的詳細・実装例が記載
- 利用は自己責任