From 3317dc733053e0baddcb9d36a88bde047d2ad3a0 Mon Sep 17 00:00:00 2001 From: apprenticeharper Date: Tue, 4 Aug 2015 07:18:33 +0100 Subject: [PATCH] Fixed plugin help file and updated readmes --- .../DeDRM.app/Contents/Info.plist | 4 +- .../DeDRM_Kindle for Android Key_Help.htm | 61 ++++++++++++++++++ .../DeDRM_Kindle for Android_Help.htm | 52 --------------- .../DeDRM.app/Contents/Resources/__init__.py | 3 +- .../DeDRM.app/Contents/Resources/config.py | 2 +- .../DeDRM_App/DeDRM_lib/DeDRM_app.pyw | 3 +- .../lib/DeDRM_Kindle for Android Key_Help.htm | 61 ++++++++++++++++++ .../lib/DeDRM_Kindle for Android_Help.htm | 52 --------------- .../DeDRM_App/DeDRM_lib/lib/__init__.py | 3 +- .../DeDRM_App/DeDRM_lib/lib/config.py | 2 +- .../DeDRM_App_ReadMe.txt | 14 +++- DeDRM_calibre_plugin/DeDRM_plugin.zip | Bin 352978 -> 353282 bytes .../DeDRM_Kindle for Android Key_Help.htm | 61 ++++++++++++++++++ .../DeDRM_Kindle for Android_Help.htm | 52 --------------- DeDRM_calibre_plugin/DeDRM_plugin/__init__.py | 3 +- DeDRM_calibre_plugin/DeDRM_plugin/config.py | 2 +- 16 files changed, 209 insertions(+), 166 deletions(-) create mode 100644 DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android Key_Help.htm delete mode 100644 DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android_Help.htm create mode 100644 DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android Key_Help.htm delete mode 100644 DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android_Help.htm create mode 100644 DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Kindle for Android Key_Help.htm delete mode 100644 DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Kindle for Android_Help.htm diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist index 1d01a8a..f68ae98 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist @@ -24,7 +24,7 @@ CFBundleExecutable droplet CFBundleGetInfoString - DeDRM AppleScript 6.3.1 Written 2010–2015 by Apprentice Alf et al. + DeDRM AppleScript 6.3.2 Written 2010–2015 by Apprentice Alf et al. CFBundleIconFile DeDRM CFBundleIdentifier @@ -36,7 +36,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 6.3.1 + 6.3.2 CFBundleSignature dplt LSRequiresCarbon diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android Key_Help.htm b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android Key_Help.htm new file mode 100644 index 0000000..65b11b4 --- /dev/null +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android Key_Help.htm @@ -0,0 +1,61 @@ + + + + + + +Managing Kindle for Android Keys + + + + + +

Managing Kindle for Android Keys

+ +

Amazon's Kindle for Android application uses an internal key equivalent to an eInk Kindle's serial number. Extracting that key is a little tricky, but worth it, as it then allows the DRM to be removed from any Kindle ebooks that have been downloaded to that Android device.

+ +

Please note that it is not currently known whether the same applies to the Kindle application on the Kindle Fire and Fire HD.

+ +

Getting the Kindle for Android backup file

+ +

Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this help file, but there are plenty of on-line guides.

+

Enable developer mode on your Android device. Again, look for an on-line guide for your device.

+

Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. + +

Adding a Kindle for Android Key

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a green plus sign (+). Clicking this button will open a new dialog with two main controls. +

+ +

Click the OK button to store the Kindle for Android key for the current list of Kindle for Android keys. Or click Cancel if you don’t want to store the key.

+

New keys are checked against the current list of keys before being added, and duplicates are discarded.

+ +

Deleting Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a red "X". Clicking this button will delete the highlighted key in the list. You will be prompted once to be sure that’s what you truly mean to do. Once gone, it’s permanently gone.

+ +

Renaming Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a sheet of paper. Clicking this button will prompt you to enter a new name for the highlighted key in the list. Enter the new name for the key and click the OK button to use the new name, or Cancel to revert to the old name.

+ +

Exporting Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a computer’s hard-drive. Use this button to export the highlighted key to a file (with a ‘.k4a' file name extension). Used for backup purposes or to migrate key data to other computers/calibre installations. The dialog will prompt you for a place to save the file.

+ +

Importing Existing Keyfiles:

+ +

At the bottom-left of the plugin’s customization dialog, you will see a button labeled "Import Existing Keyfiles". Use this button to import any ‘.k4a’ file you obtained by using the androidkindlekey.py script manually, or by exporting from another copy of calibre.

+ + + + diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android_Help.htm b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android_Help.htm deleted file mode 100644 index 7bdba64..0000000 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/DeDRM_Kindle for Android_Help.htm +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -Managing Kindle for Android serial numbers - - - - - -

Managing Kindle for Android serial numbers

- -

Amazon's Kindle for Android application uses an internal serial number that's 72 character long. Extracting that serial number is a little tricky, but worth it, as it then allows the DRM to be removed from any Kindle ebooks that have been downloaded to that Android device.

- -

Please note that it is not currently known whether the same applies to the Kindle application on the Kindle Fire and Fire HD.

- -

Getting the Kindle for Android backup file

- -

Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this help file, but there are plenty of on-line guides.

-

Enable developer mode on your Android device. Again, look for an on-line guide for your device.

-

Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. - -

Adding the Kindle for Android serial number

- -

At the bottom-left of the plugin’s customization dialog, you will see a button labeled "Import Existing Keyfiles". Use this button to import the ‘backup.ab’ file you obtained by using the adb command. The backup file will be processed to extract any serial numbers in it, and the numbers will be added to the list.

- -

Adding the Kindle for Android serial number manually

-

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a green plus sign (+). Clicking this button will open a new dialog for entering a new Kindle for Android serial number.

- - -

Click the OK button to save the serial number. Or Cancel if you didn’t want to enter a serial number.

- -

Deleting Kindle for Android serial numbers:

- -

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a red "X". Clicking this button will delete the highlighted Kindle serial number from the list. You will be prompted once to be sure that’s what you truly mean to do. Once gone, it’s permanently gone.

- -

Once done creating/deleting serial numbers, click Close to exit the customization dialogue. Your changes wil only be saved permanently when you click OK in the main configuration dialog.

- - - - diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py index 6992561..bec18ed 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py @@ -43,6 +43,7 @@ __docformat__ = 'restructuredtext en' # 6.2.2 - Added URL method for B&N/nook books # 6.3.0 - Added in Kindle for Android serial number solution # 6.3.1 - Version number bump for clarity +# 6.3.2 - Fixed Kindle for Android help file """ @@ -50,7 +51,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 1) +PLUGIN_VERSION_TUPLE = (6, 3, 2) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/config.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/config.py index b3a21a1..79b17f2 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/config.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/config.py @@ -124,7 +124,7 @@ class ConfigWidget(QWidget): d.exec_() def kindle_android(self): - d = ManageKeysDialog(self,u"Kindle for Android Keys File",self.tempdedrmprefs['androidkeys'], AddAndroidDialog, 'k4a') + d = ManageKeysDialog(self,u"Kindle for Android Key",self.tempdedrmprefs['androidkeys'], AddAndroidDialog, 'k4a') d.exec_() def kindle_keys(self): diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw index 9c2fb58..57f88c2 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw @@ -16,8 +16,9 @@ # 6.2.2 - Added URL method for B&N/nook books # 6.3.0 - Add in Android support # 6.3.1 - Version bump for clarity +# 6.3.2 - Version bump to match plugin -__version__ = '6.3.1' +__version__ = '6.3.2' import sys import os, os.path diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android Key_Help.htm b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android Key_Help.htm new file mode 100644 index 0000000..65b11b4 --- /dev/null +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android Key_Help.htm @@ -0,0 +1,61 @@ + + + + + + +Managing Kindle for Android Keys + + + + + +

Managing Kindle for Android Keys

+ +

Amazon's Kindle for Android application uses an internal key equivalent to an eInk Kindle's serial number. Extracting that key is a little tricky, but worth it, as it then allows the DRM to be removed from any Kindle ebooks that have been downloaded to that Android device.

+ +

Please note that it is not currently known whether the same applies to the Kindle application on the Kindle Fire and Fire HD.

+ +

Getting the Kindle for Android backup file

+ +

Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this help file, but there are plenty of on-line guides.

+

Enable developer mode on your Android device. Again, look for an on-line guide for your device.

+

Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. + +

Adding a Kindle for Android Key

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a green plus sign (+). Clicking this button will open a new dialog with two main controls. +

+ +

Click the OK button to store the Kindle for Android key for the current list of Kindle for Android keys. Or click Cancel if you don’t want to store the key.

+

New keys are checked against the current list of keys before being added, and duplicates are discarded.

+ +

Deleting Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a red "X". Clicking this button will delete the highlighted key in the list. You will be prompted once to be sure that’s what you truly mean to do. Once gone, it’s permanently gone.

+ +

Renaming Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a sheet of paper. Clicking this button will prompt you to enter a new name for the highlighted key in the list. Enter the new name for the key and click the OK button to use the new name, or Cancel to revert to the old name.

+ +

Exporting Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a computer’s hard-drive. Use this button to export the highlighted key to a file (with a ‘.k4a' file name extension). Used for backup purposes or to migrate key data to other computers/calibre installations. The dialog will prompt you for a place to save the file.

+ +

Importing Existing Keyfiles:

+ +

At the bottom-left of the plugin’s customization dialog, you will see a button labeled "Import Existing Keyfiles". Use this button to import any ‘.k4a’ file you obtained by using the androidkindlekey.py script manually, or by exporting from another copy of calibre.

+ + + + diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android_Help.htm b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android_Help.htm deleted file mode 100644 index 7bdba64..0000000 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/DeDRM_Kindle for Android_Help.htm +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -Managing Kindle for Android serial numbers - - - - - -

Managing Kindle for Android serial numbers

- -

Amazon's Kindle for Android application uses an internal serial number that's 72 character long. Extracting that serial number is a little tricky, but worth it, as it then allows the DRM to be removed from any Kindle ebooks that have been downloaded to that Android device.

- -

Please note that it is not currently known whether the same applies to the Kindle application on the Kindle Fire and Fire HD.

- -

Getting the Kindle for Android backup file

- -

Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this help file, but there are plenty of on-line guides.

-

Enable developer mode on your Android device. Again, look for an on-line guide for your device.

-

Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. - -

Adding the Kindle for Android serial number

- -

At the bottom-left of the plugin’s customization dialog, you will see a button labeled "Import Existing Keyfiles". Use this button to import the ‘backup.ab’ file you obtained by using the adb command. The backup file will be processed to extract any serial numbers in it, and the numbers will be added to the list.

- -

Adding the Kindle for Android serial number manually

-

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a green plus sign (+). Clicking this button will open a new dialog for entering a new Kindle for Android serial number.

- - -

Click the OK button to save the serial number. Or Cancel if you didn’t want to enter a serial number.

- -

Deleting Kindle for Android serial numbers:

- -

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a red "X". Clicking this button will delete the highlighted Kindle serial number from the list. You will be prompted once to be sure that’s what you truly mean to do. Once gone, it’s permanently gone.

- -

Once done creating/deleting serial numbers, click Close to exit the customization dialogue. Your changes wil only be saved permanently when you click OK in the main configuration dialog.

- - - - diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py index 6992561..bec18ed 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/__init__.py @@ -43,6 +43,7 @@ __docformat__ = 'restructuredtext en' # 6.2.2 - Added URL method for B&N/nook books # 6.3.0 - Added in Kindle for Android serial number solution # 6.3.1 - Version number bump for clarity +# 6.3.2 - Fixed Kindle for Android help file """ @@ -50,7 +51,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 1) +PLUGIN_VERSION_TUPLE = (6, 3, 2) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/config.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/config.py index b3a21a1..79b17f2 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/config.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/config.py @@ -124,7 +124,7 @@ class ConfigWidget(QWidget): d.exec_() def kindle_android(self): - d = ManageKeysDialog(self,u"Kindle for Android Keys File",self.tempdedrmprefs['androidkeys'], AddAndroidDialog, 'k4a') + d = ManageKeysDialog(self,u"Kindle for Android Key",self.tempdedrmprefs['androidkeys'], AddAndroidDialog, 'k4a') d.exec_() def kindle_keys(self): diff --git a/DeDRM_Windows_Application/DeDRM_App_ReadMe.txt b/DeDRM_Windows_Application/DeDRM_App_ReadMe.txt index 17eaef8..bf3b647 100644 --- a/DeDRM_Windows_Application/DeDRM_App_ReadMe.txt +++ b/DeDRM_Windows_Application/DeDRM_App_ReadMe.txt @@ -5,9 +5,10 @@ DeDRM_App.pyw is a python drag and drop application that allows users to drag an It will work without manual configuration for Kindle for PC ebooks, Adobe Digital Edition epub and pdf ebooks and Barnes & Noble NOOK Study ePubs when Kindle for PC, Adobe Digital Editions and NOOK Study are installed on the same computer and user account. -To remove the DRM from eInk Kindle ebooks, Mobipocket ebooks and Fictionwise eReader ebooks requires the user to double-click the DeDRM_Drop_Target.bat file and set some additional Preferences including: +To remove the DRM from eInk Kindle ebooks, Kindle for Android ebooks, Mobipocket ebooks and Fictionwise eReader ebooks requires the user to double-click the DeDRM_Drop_Target.bat file and set some additional Preferences including: eInk Kindle: 16 digit Serial Number +Kindle for Android: backup.ab file, details below. eReader Social DRM: Name:Last 8 digits of CC number MobiPocket: 10 digit PID @@ -27,6 +28,17 @@ Installation 3. To set the preferences simply double-click on the short-cut you've just created. +Kindle for Android +------------------ +The backup.ab file needs to be obtained using Android-specific tools. + +Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this readme file, but there are plenty of on-line guides. + +Enable developer mode on your Android device. Again, look for an on-line guide for your device. + +Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. + + Credits ------- The original inept and ignoble scripts were by i♥cabbages diff --git a/DeDRM_calibre_plugin/DeDRM_plugin.zip b/DeDRM_calibre_plugin/DeDRM_plugin.zip index e6a686784aab52398e0da4778cc26a34ef849bd9..046a5dae0b5f9d63fe14f84902a6386d5cae868f 100644 GIT binary patch delta 13946 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 delta 13632 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 + + + + + +Managing Kindle for Android Keys + + + + + +

Managing Kindle for Android Keys

+ +

Amazon's Kindle for Android application uses an internal key equivalent to an eInk Kindle's serial number. Extracting that key is a little tricky, but worth it, as it then allows the DRM to be removed from any Kindle ebooks that have been downloaded to that Android device.

+ +

Please note that it is not currently known whether the same applies to the Kindle application on the Kindle Fire and Fire HD.

+ +

Getting the Kindle for Android backup file

+ +

Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this help file, but there are plenty of on-line guides.

+

Enable developer mode on your Android device. Again, look for an on-line guide for your device.

+

Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. + +

Adding a Kindle for Android Key

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a green plus sign (+). Clicking this button will open a new dialog with two main controls. +

    +
  • Choose backup file: click this button and you will be prompted to find the backup.ab file you created earlier. Once selected the file will be processed to extract the decryption key, and if successful the file name will be displayed to the right of the button.
  • +
  • Unique Key Name: this is a unique name you choose to help you identify the key. This name will show in the list of Kindle for Android keys. Enter a name that will help you remember which device this key came from.
  • +
+ +

Click the OK button to store the Kindle for Android key for the current list of Kindle for Android keys. Or click Cancel if you don’t want to store the key.

+

New keys are checked against the current list of keys before being added, and duplicates are discarded.

+ +

Deleting Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a red "X". Clicking this button will delete the highlighted key in the list. You will be prompted once to be sure that’s what you truly mean to do. Once gone, it’s permanently gone.

+ +

Renaming Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a sheet of paper. Clicking this button will prompt you to enter a new name for the highlighted key in the list. Enter the new name for the key and click the OK button to use the new name, or Cancel to revert to the old name.

+ +

Exporting Keys:

+ +

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a computer’s hard-drive. Use this button to export the highlighted key to a file (with a ‘.k4a' file name extension). Used for backup purposes or to migrate key data to other computers/calibre installations. The dialog will prompt you for a place to save the file.

+ +

Importing Existing Keyfiles:

+ +

At the bottom-left of the plugin’s customization dialog, you will see a button labeled "Import Existing Keyfiles". Use this button to import any ‘.k4a’ file you obtained by using the androidkindlekey.py script manually, or by exporting from another copy of calibre.

+ + + + diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Kindle for Android_Help.htm b/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Kindle for Android_Help.htm deleted file mode 100644 index 7bdba64..0000000 --- a/DeDRM_calibre_plugin/DeDRM_plugin/DeDRM_Kindle for Android_Help.htm +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -Managing Kindle for Android serial numbers - - - - - -

Managing Kindle for Android serial numbers

- -

Amazon's Kindle for Android application uses an internal serial number that's 72 character long. Extracting that serial number is a little tricky, but worth it, as it then allows the DRM to be removed from any Kindle ebooks that have been downloaded to that Android device.

- -

Please note that it is not currently known whether the same applies to the Kindle application on the Kindle Fire and Fire HD.

- -

Getting the Kindle for Android backup file

- -

Obtain and install adb (Android Debug Bridge) on your computer. Details of how to do this are beyond the scope of this help file, but there are plenty of on-line guides.

-

Enable developer mode on your Android device. Again, look for an on-line guide for your device.

-

Once you have adb installed and your device in developer mode, connect your device to your computer with a USB cable and then open up a command line (Terminal on Mac OS X and cmd.exe on Windows) and enter "adb backup com.amazon.kindle" (without the quotation marks!) and press return. A file "backup.ab" should be created in your home directory. - -

Adding the Kindle for Android serial number

- -

At the bottom-left of the plugin’s customization dialog, you will see a button labeled "Import Existing Keyfiles". Use this button to import the ‘backup.ab’ file you obtained by using the adb command. The backup file will be processed to extract any serial numbers in it, and the numbers will be added to the list.

- -

Adding the Kindle for Android serial number manually

-

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a green plus sign (+). Clicking this button will open a new dialog for entering a new Kindle for Android serial number.

-
    -
  • Kindle for Android Serial Number: this is the unique serial number of your device. You may have obtained this through using the old android.py script.
  • -
- -

Click the OK button to save the serial number. Or Cancel if you didn’t want to enter a serial number.

- -

Deleting Kindle for Android serial numbers:

- -

On the right-hand side of the plugin’s customization dialog, you will see a button with an icon that looks like a red "X". Clicking this button will delete the highlighted Kindle serial number from the list. You will be prompted once to be sure that’s what you truly mean to do. Once gone, it’s permanently gone.

- -

Once done creating/deleting serial numbers, click Close to exit the customization dialogue. Your changes wil only be saved permanently when you click OK in the main configuration dialog.

- - - - diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py index 6992561..bec18ed 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/__init__.py @@ -43,6 +43,7 @@ __docformat__ = 'restructuredtext en' # 6.2.2 - Added URL method for B&N/nook books # 6.3.0 - Added in Kindle for Android serial number solution # 6.3.1 - Version number bump for clarity +# 6.3.2 - Fixed Kindle for Android help file """ @@ -50,7 +51,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 1) +PLUGIN_VERSION_TUPLE = (6, 3, 2) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/config.py b/DeDRM_calibre_plugin/DeDRM_plugin/config.py index b3a21a1..79b17f2 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/config.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/config.py @@ -124,7 +124,7 @@ class ConfigWidget(QWidget): d.exec_() def kindle_android(self): - d = ManageKeysDialog(self,u"Kindle for Android Keys File",self.tempdedrmprefs['androidkeys'], AddAndroidDialog, 'k4a') + d = ManageKeysDialog(self,u"Kindle for Android Key",self.tempdedrmprefs['androidkeys'], AddAndroidDialog, 'k4a') d.exec_() def kindle_keys(self):