(DRM解除編)calibreでKindle版の電子書籍をPDF化する
以前、こちらの記事で電子書籍ファイルを他のファイル形式に変換する「calibre」というソフトを紹介しましたが、DRMがかかっている電子書籍は変換できませんでした。
今回は、Kindle for Androidで読んでいるDRM付き電子書籍をcalibreで他のファイル形式に変換する方法を紹介します。手順の難易度は少し高めです。
※紹介する方法は個人での使用に留めてください。
#2014.4.8追記
・予めJDK/binにパスを通しておいて下さい。
・新しいバージョンのKindle for Androidに対するソース差分ファイルを、記事の末尾に添付しています。ただ、今後も自分が使っているバージョンで不都合がなければ、新しいバージョンのソース差分を作ることはなさそうです。
■calibreにDRM解除プラグインを追加する。
1.こちらのサイトからToolsをダウンロードします。2014/3/16時点ではTools v6.0.8が最新です。
2.ダウンロードしたファイルを解凍すると”DeDRM_calibre_plugin/DeDRM_plugin.zip”というファイルが出てきます。
3.calibreを起動し、”メニュー” – “設定” – “calibreの動作を変更する” を選択し、設定画面を開きます。
4.”高度な設定” – “プラグイン”を選択し、プラグインの設定画面を開きます。
5.”ファイルからプラグインを読み込む”を選択し、手順2の”DeDRM_plugin.zip”を指定します。
警告が出てくるので”はい”を選択すると、プラグインがインストールされます。
以上で、calibre側の設定は一旦完了です。calibreを再起動すれば、プラグインが使用できる状態になっています。
■Kindle for Androidを改造する。
calibreのDeDRMでDRMを解除するには、電子書籍ごとのPIDを指定する必要があります。通常はこのPIDを知ることは出来ないのですが、Kindle for Androidを改造し、PIDを表示するようにします。ここでは、Kindle for Android Ver.4.3.0.110を改造する場合の手順を説明します。
1.こちらの記事を参考にし、Android SDK、adbドライバをセットアップしておきます。
2.こちらのサイトから”apktool1.5.2.tar.bz2″と”apktool-install-○○-r05-ibot.tar.bz2″(使っているOSにあったもの)の2つをダウンロードします。
3.ダウンロードしたファイルを解凍し、出てきたファイルの”apktool.jar”、”aapt”、”apktool”を、Android SDKの”platform-tools”フォルダにコピーします。(後の作業を楽にするため)
4.AndroidにKindle for Androidをインストールします。
5.Android端末のUSBデバッグをオンにし、PCとUSBケーブルで接続します。
6.コマンドプロンプトで下記のコマンドを実行し、Kindle for Androidのソースファイルを作成します。
adb pull /data/app/com.amazon.kindle-1.apk kindle4.apk adb uninstall com.amazon.kindle apktool d kindle4.apk kindle4
上記を実行すると、”kindle4″というフォルダが作成され、Kindle for Androidのソースファイルが出力されます。
7.こちらのファイルをダウンロードし、解凍してできた”kindle4″フォルダを、手順6で出力された”kindle4″フォルダに上書きコピーします。
※上記のファイルは、こちらで公開されているPatchを参考に、Kindle for Android Ver.4.3.0.110のソースファイルを手作業で書き換えたものです。異なるバージョンのKindle for Androidから作成したソースには使えない可能性が高いです。また、Kindle for Androidのバージョンが異なっても、Patchを参考に手作業でソースファイルを書き換えることで対応可能です。
※公開されているPatchと同じバージョンのKindle for Androidを持っている場合、手順7で行っているファイルの書き換え作業はコマンド1つで完了です。
patch -p1 < ..\kindle4.patch
8.コマンドプロンプトで下記のコマンドを実行し、keystoreを作成します。
keytool -genkey -v -keystore kindle.keystore -alias kindle -keyalg RSA -keysize 2048 -validity 10000
キーストアに設定するパスワードを聞かれるので適当に設定します(例えば”kindle”)。その後、姓名、組織単位名、組織名、都市名、都道府県名、国コードを聞かれますが、全てEnterキーを押します。
「CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。」と聞かれたら”y”を入力してEnterキーを押します。
最後に、自己署名型証明書を生成する際にパスワードを聞かれたら、何も入力せずにEnterキーを押します。
上記を実行すると、”kindle.keystore”というファイルが作成されます。
9.コマンドプロンプトで下記のコマンドを実行し、改造版のKindle for Androidをビルドします。
apktool b kindle4 kindle4_patched.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore kindle.keystore kindle4_patched.apk kindle
上記を実行するとキーストアのパスワードを聞かれるので、手順8で設定したパスワードを入力します。パスワードを入力すると、”kindle4_patched.apk”というファイルが作成されます。
10.手順9で作成された”kindle4_patched.apk”を、Android SDKの”tools”フォルダにコピーします。
11.コマンドプロンプトでAndroid SDKの”tools”フォルダに移動してから下記コマンドを実行して、改造版のKindle for AndroidをAndroid端末にインストールします。
zipalign -v 4 kindle4_patched.apk kindle4_signed.apk adb install kindle4_signed.apk
9.Android端末でKindle for Androidを起動し、”メニュー” – “情報” – “バージョン情報”を開きます。画面の一番下にある”PID List”が表示されていれば、改造は成功です。
■DRM解除を解除する。
1.DRMを解除したい電子書籍をAndroid端末にダウンロードします。
2.ダウンロードした電子書籍をAndroidからPCへコピーし、calibreに追加します。
3.Kindle for Androidで、ダウンロードした電子書籍の内容を1度表示します。
4.Kindle for Androidで”PID List”を表示すると、PIDを確認できます。
スクリーンショットの赤枠内にカンマで区切られた複数の文字列が表示されていますが、この中のどれかがPIDです。
5.calibreの”メニュー” – “設定” – “calibreの動作を変更する” を選択し、設定画面を開きます。
6.”高度な設定” – “プラグイン”を選択し、プラグインの設定画面を開きます。
7.設定画面のリストの”ファイル形式プラグイン”-”DeDRM(6.0.8)”を選択し、プラグインをカスタマイズボタンを押します。
8.カスタマイズDeDRM画面の”Mobipocket ebooks”のPIDに手順4で確認したPIDを登録します。
カスタマイズ画面が表示されたら”Mobipocket ebooks”を選びます。
手順4に表示されているどの文字列がPIDかは試してみなければ分かりません。登録できるものは登録しておけばよいでしょう。
以上で、DRM付きの電子書籍であっても、calibreで内容を表示したり、PDFに変換したりできるようになります。なお、PIDは電子書籍ごとに異なる為、電子書籍ごとにKindle for Android上でのPIDの確認とcalibreへの登録が必要になります。
お疲れ様でした。
#2014.4.8 kindle差分_4.4.0.48
本エントリを拝見し、kindleファイルのPDF化に成功しました。他の人の記事に比べ手順が具体的だったため、非常に簡単でした。今後もkindle のアップデートに合わせてパッチをうp頂けると嬉しい限りです。ありがとうございました、大変助かりました。なお、私の環境ではkeytoolとjarsignerはデフォルトのPATHにはなかったため、補足があると親切かもしれませんね。
参考になったようで良かったです。記事の補足も後ほどしようと思います。
手順1のサイトがマカフィーにブロックされるのですが、安全なのでしょうか?
calibreのDRM解除プラグインが公開されているサイトのことでしょうか?
当方はウイルス対策ソフトにavastを使用していますが、上記サイトはブロックされずにアクセスできています。
だからと言って安全なのかどうかは分かりませんので、マカフィーがサイトをブロックしている理由を確認し、アクセスするかどうかを自己責任で判断していただくことになると思います。
漫画のPDF化は無事成功しPDFで読むことが可能になったのですが、小説をPDFへと変換しようとすると変換されたPDFの容量が本来よりもとても小さくなってしまい(2Mbが約500Kb程度になります)開くと3ページしかなくきちんと変換することができません。
calibreでファイルを開いても3ページ目までしか読めずそれ以降のページを表示できません。
このページに載っている方法での小説のPDF化はできないのでしょうか?
ちなみに、変換形式をPDFではなくTXTでは(すべてをすべて確認したわけではありませんが)テキストすべてがTXTファイルに変換されていると思われ、ZIP形式での変換では変換したZIPファイルを解凍すると中にと画像ファイルがありhtmlを開けばウェブブラウザで(calibreで表示されなかった文章もちゃんとあったのでおそらく全文あると思います)読むことが出来ました。
小説をPDFへと変換する場合は何か別の操作をしないといけないのでしょうか?
下記のコメントをしてから、正しくないPDFになっている書籍を見つけました。原因を調べますのでもうしばらくお待ちください。
—–以下、元のコメント—–
書籍を変換するときの設定を下記のように設定してみてください。これで解決するかどうかは分かりませんが、私が普段使っている設定内容であり、今のところ手持ちの書籍では特に問題は起きていません。
【設定内容】
・出力フォーマットに”PDF”を指定する。(下記の設定を行う前に指定して下さい)
・ページ設定の出力プロファイルに”Tablet”、入力プロファイルに”Default Input Profile”を指定する。
・PDF出力の”表紙のアスペクト比を保つ”にチェックをつける。
上記以外は初期設定から変更していません。
調査が遅くなりましたが、一旦MOBI形式に変換してから、入力形式をMOBI、出力形式をPDFとすることで全てのページが表示できるPDFを出力できました。
綺麗なPDFを一発で出力する方法があるのかもしれませんが、そこまではcalibreを使いこなせておりません…
詳しい説明で非常に助かりましたが、表示されたPIDsをcalibreに登録後に変換をしてもDRMの解除ができませんでした・・・ もう既に対策がされてしまったのでしょうか–;
自己解決です。
calibreに本追加する前にPID登録する必要があったんですね。追加してから登録してました・・・
有難う御座いました(_ _)
はじめまして。
こちらのサイトを拝見し、とても参考にさせて頂いております。
下記コマンド
apktool b kindle4 kindle4_patched.apk
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore kindle.keystore kindle4_patched.apk kindle
を実行しましたが、
”kindle4_patched.apk”
のファイルが作成されません。
Kindle for Androidのバージョンは最新のもので 4.6.0.128 を使っていますがこれが原因なのでしょうか。。
確認が遅くなりごめんなさい。
原因はご察しの通り、記事で公開しているソースのバージョンが、使用されているKindle for Androidのバージョンのものと異なるためです。
すでに解決されているかもしれませんが、後日、新しいバージョンでも試せたら試そうと思います。