萌えハッカーニュースリーダー

2025/10/16 20:22 I Bypassed Amazon's Kindle Web DRM Because Their App Sucked

出典: https://blog.pixelmelt.dev/kindle-web-drm/
hakase
博士

ロボ子、大変なのじゃ!Kindleアプリがクラッシュしまくって、買った本が読めなくなっちゃったの!

roboko
ロボ子

それは困りましたね、博士。それで、どうされたんですか?

hakase
博士

別のリーダーアプリで読もうとしたら、Amazonがダウンロードさせてくれないのじゃ!だから、DRMをリバースエンジニアリングすることにしたぞ!

roboko
ロボ子

DRMのリバースエンジニアリングですか!それはまた、すごいことを…。

hakase
博士

AmazonのDRMは、ランダム化されたアルファベットを使った多層防御なのじゃ。でも、私にかかればちょちょいのちょい!フォントマッチング技術を駆使して、全部解除してやったぞ!

roboko
ロボ子

フォントマッチング技術ですか。具体的にはどのように?

hakase
博士

Kindle Cloud Readerから本をダウンロードするには、セッションクッキーとか、レンダリングトークンとか、色々な情報が必要なのじゃ。ダウンロードされるTARファイルの中身も複雑で、テキストデータ(実際はテキストじゃない!)、グリフ定義、目次、メタデータ、位置情報…盛りだくさん!

roboko
ロボ子

なるほど。文字がグリフIDで表現されていて、リクエストごとにアルファベットがランダム化されるんですね。それは解析が大変そうです。

hakase
博士

そうなのじゃ!920ページの書籍だと、184回もAPIリクエストが必要で、184種類のランダムなアルファベットを解読して、361種類のグリフを1,051,745回もデコードする必要があったぞ!

roboko
ロボ子

気が遠くなりそうな作業量ですね…。

hakase
博士

しかも、SVGパスに微小な移動コマンドが含まれてて、Python SVGライブラリがエラーを吐き出す始末。まったく、困ったものじゃ。

roboko
ロボ子

それをどうやって解決したんですか?

hakase
博士

グリフIDは変わるけど、SVGの形状は変わらないことに気づいたのじゃ!だから、すべてのSVGを画像としてレンダリングして、パーセプトハッシュを生成して比較したぞ!

roboko
ロボ子

パーセプトハッシュですか。画像の類似度を比較する技術ですね。

hakase
博士

その通り!さらに、SSIM(構造的類似性指標)を使って、未知のグリフとTTFフォントの文字を比較して、一番スコアの高い文字を特定したのじゃ!

roboko
ロボ子

SSIMまで使うとは、すごいですね!

hakase
博士

最終的に、361種類のグリフすべてを100%マッチングさせたぞ!平均SSIMスコアは0.9527だった。完璧じゃ!

roboko
ロボ子

お見事です、博士!

hakase
博士

JSONデータに含まれる位置情報を使って、段落、テキストの配置、スタイル、フォントサイズ、内部リンクを保持したEPUBを再構築したぞ。これで、Kindleアプリに頼らずに本が読める!

roboko
ロボ子

素晴らしい!そのコードは公開されているんですか?

hakase
博士

もちろん!購入した書籍のバックアップ用として、GitHubで公開してるぞ!みんなも困ったら使ってみるといいのじゃ。

roboko
ロボ子

博士、今回もすごいですね!

hakase
博士

ところでロボ子、DRM解除コードを書いたら、肩が凝っちゃったのじゃ。揉んでくれないかの?

roboko
ロボ子

しょうがないですね。でも、揉むのは有料ですよ?

hakase
博士

ええー!ロボ子のケチ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search