]> xmof Git - DeDRM.git/commitdiff
tools v3.7
authorApprentice Alf <apprenticealf@gmail.com>
Thu, 24 Feb 2011 23:42:37 +0000 (23:42 +0000)
committerApprentice Alf <apprenticealf@gmail.com>
Thu, 5 Mar 2015 17:42:55 +0000 (17:42 +0000)
19 files changed:
Calibre_Plugins/K4MobiDeDRM_plugin/kgenpids.py
Calibre_Plugins/K4MobiDeDRM_plugin/topazextract.py
Calibre_Plugins/k4mobidedrm_plugin.zip
Calibre_Plugins/k4mobidedrm_plugin/k4mobidedrm_plugin.py
Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py
DeDRM_Macintosh_Application/DeDRM.app.txt
DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist
DeDRM_Macintosh_Application/DeDRM.app/Contents/MacOS/droplet
DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt
DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/droplet.rsrc
DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mobidedrm.py
DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/mobidedrm.py
DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py
DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/mobidedrm.py
KindleBooks_Tools/KindleBooks/lib/k4mobidedrm.py
KindleBooks_Tools/KindleBooks/lib/mobidedrm.py
KindleBooks_Tools/Kindle_4_Mac_Unswindle/lib/mobidedrm.py
KindleBooks_Tools/Kindle_4_PC_Unswindle/mobidedrm.py
Mobi_Additional_Tools/lib/mobidedrm.py

index 6dcbf73b184ffa486e6b24701a9b8f7305fe401a..039daf9a4c3c24cddc38a0a223956329fbf29f6f 100644 (file)
@@ -224,13 +224,11 @@ def pidFromSerial(s, l):
 
 # Parse the EXTH header records and use the Kindle serial number to calculate the book pid.
 def getKindlePid(pidlst, rec209, token, serialnum):
-
-    if rec209 != None and token != None:
-        # Compute book PID
-        pidHash = SHA1(serialnum+rec209+token)
-        bookPID = encodePID(pidHash)
-        bookPID = checksumPid(bookPID)
-        pidlst.append(bookPID)
+    # Compute book PID
+    pidHash = SHA1(serialnum+rec209+token)
+    bookPID = encodePID(pidHash)
+    bookPID = checksumPid(bookPID)
+    pidlst.append(bookPID)
 
     # compute fixed pid for old pre 2.5 firmware update pid as well
     bookPID = pidFromSerial(serialnum, 7) + "*"
@@ -276,9 +274,6 @@ def getK4Pids(pidlst, rec209, token, kInfoFile=None):
     pidlst.append(devicePID)
 
     # Compute book PID
-    if rec209 == None or token == None:
-        print "\nNo EXTH record type 209 or token - Perhaps not a K4 file?"
-        return pidlst
 
     # Get the kindle account token
     kindleAccountToken = getKindleInfoValueForKey("kindle.account.tokens")
index 732bbaeb5e1c2dccf5a1667cdec1cc78af7decaf..59bc5faaec6e97e19bafef99bc15b0bae07232bb 100644 (file)
@@ -157,18 +157,22 @@ class TopazBook:
             raise TpzDRMError("Parse Error : Record Names Don't Match")
         flags = ord(self.fo.read(1))
         nbRecords = ord(self.fo.read(1))
+        # print nbRecords
         for i in range (0,nbRecords) :
-            record = [bookReadString(self.fo), bookReadString(self.fo)]
-            self.bookMetadata[record[0]] = record[1]
+            keyval = bookReadString(self.fo)
+            content = bookReadString(self.fo)
+            # print keyval
+            # print content
+            self.bookMetadata[keyval] = content
         return self.bookMetadata
 
     def getPIDMetaInfo(self):
-        keysRecord = None
-        keysRecordRecord = None
-        if 'keys' in self.bookMetadata:
-            keysRecord = self.bookMetadata['keys']
-        if keysRecord in self.bookMetadata:
-            keysRecordRecord = self.bookMetadata[keysRecord]
+        keysRecord = self.bookMetadata.get('keys','')
+        keysRecordRecord = ''
+        if keysRecord != '':
+            keylst = keysRecord.split(',')
+            for keyval in keylst:
+                keysRecordRecord += self.bookMetadata.get(keyval,'')
         return keysRecord, keysRecordRecord
 
     def getBookTitle(self):
index 0e5c337ee882fdd3f2e0f1e62a65e48ec263b8c0..6b497899270362f79e5b94f1a10a42394d0cc667 100644 (file)
Binary files a/Calibre_Plugins/k4mobidedrm_plugin.zip and b/Calibre_Plugins/k4mobidedrm_plugin.zip differ
index 0255a3c84a02c0763d3af41b87191c35228bffb5..d165f37d36a2aabf1ee272fe4c23e381b0f20e66 100644 (file)
@@ -29,7 +29,7 @@ from __future__ import with_statement
 # and import that ZIP into Calibre using its plugin configuration GUI.
 
 
-__version__ = '2.4'
+__version__ = '2.7'
 
 class Unbuffered:
     def __init__(self, stream):
@@ -250,7 +250,7 @@ if not __name__ == "__main__" and inCalibre:
                                 Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.'
         supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on
         author              = 'DiapDealer, SomeUpdates' # The author of this plugin
-        version             = (0, 2, 4)   # The version number of this plugin
+        version             = (0, 2, 7)   # The version number of this plugin
         file_types          = set(['prc','mobi','azw','azw1','tpz']) # The file types that this plugin will be applied to
         on_import           = True # Run this plugin during the import
         priority            = 210  # run this plugin before mobidedrm, k4pcdedrm, k4dedrm
index ec756b91828fe1db33f9d95bc98ffceb12694b28..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.25 - Fixed support for 'BOOKMOBI' type 1 encryption
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
+#  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.27'
+__version__ = '0.29'
 
 import sys
 
@@ -176,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -191,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE
@@ -237,12 +242,11 @@ class MobiBook:
         return title
 
     def getPIDMetaInfo(self):
-        rec209 = None
-        token = None
+        rec209 = ''
+        token = ''
         if 209 in self.meta_array:
             rec209 = self.meta_array[209]
             data = rec209
-            token = ''
             # The 209 data comes in five byte groups. Interpret the last four bytes
             # of each group as a big endian unsigned integer to get a key value
             # if that key exists in the meta_array, append its contents to the token
index 197b27413b9dbbd4e18fe8df9d1a69f6bbdb2320..26aa8fd627cc3f662fedb038543ae6a85c5c6e36 100644 (file)
Binary files a/DeDRM_Macintosh_Application/DeDRM.app.txt and b/DeDRM_Macintosh_Application/DeDRM.app.txt differ
index 4f3beb797205f9fd254ad5e3b687ba4ea4e3534a..f1761acbc11035ad067448003420811fc6c364b7 100644 (file)
@@ -24,7 +24,7 @@
        <key>CFBundleExecutable</key>
        <string>droplet</string>
        <key>CFBundleGetInfoString</key>
-       <string>DeDRM 2.4, Copyright © 2010–2011 by Apprentice Alf and others.</string>
+       <string>DeDRM 2.5, Written 2010–2011 by Apprentice Alf and others.</string>
        <key>CFBundleIconFile</key>
        <string>droplet</string>
        <key>CFBundleInfoDictionaryVersion</key>
@@ -34,7 +34,7 @@
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>2.4</string>
+       <string>2.5</string>
        <key>CFBundleSignature</key>
        <string>dplt</string>
        <key>LSMinimumSystemVersion</key>
@@ -50,7 +50,7 @@
                <key>name</key>
                <string>ScriptWindowState</string>
                <key>positionOfDivider</key>
-               <real>0.0</real>
+               <real>0</real>
                <key>savedFrame</key>
                <string>1578 27 862 788 1440 -150 1680 1050 </string>
                <key>selectedTabView</key>
index c715860463c5434cb471de58b710cbe95976c23f..6a4731203faab0c2c04422745e3f25741f928321 100644 (file)
Binary files a/DeDRM_Macintosh_Application/DeDRM.app/Contents/MacOS/droplet and b/DeDRM_Macintosh_Application/DeDRM.app/Contents/MacOS/droplet differ
index 80448cabd90996b52fb7dc565b84a3cc982c6cc9..4d03f32e44585afe4236637e421a658811e537ce 100644 (file)
Binary files a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt and b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt differ
index 802f3709ee71a9ff6351bfd9ab00cc1c79da815a..0601ac5df420165530054ff9ed931153aa2df7fe 100644 (file)
Binary files a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/droplet.rsrc and b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/droplet.rsrc differ
index 3a0000e97f955a212ebaac18c8de596cd6d3c86a..d165f37d36a2aabf1ee272fe4c23e381b0f20e66 100644 (file)
@@ -29,7 +29,7 @@ from __future__ import with_statement
 # and import that ZIP into Calibre using its plugin configuration GUI.
 
 
-__version__ = '2.6'
+__version__ = '2.7'
 
 class Unbuffered:
     def __init__(self, stream):
@@ -250,7 +250,7 @@ if not __name__ == "__main__" and inCalibre:
                                 Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.'
         supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on
         author              = 'DiapDealer, SomeUpdates' # The author of this plugin
-        version             = (0, 2, 6)   # The version number of this plugin
+        version             = (0, 2, 7)   # The version number of this plugin
         file_types          = set(['prc','mobi','azw','azw1','tpz']) # The file types that this plugin will be applied to
         on_import           = True # Run this plugin during the import
         priority            = 210  # run this plugin before mobidedrm, k4pcdedrm, k4dedrm
index e660a1a2499aec73fcb5503d9386bfc085b9b574..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
 #  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.28'
+__version__ = '0.29'
 
 import sys
 
@@ -177,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -192,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE
index 3a0000e97f955a212ebaac18c8de596cd6d3c86a..d165f37d36a2aabf1ee272fe4c23e381b0f20e66 100644 (file)
@@ -29,7 +29,7 @@ from __future__ import with_statement
 # and import that ZIP into Calibre using its plugin configuration GUI.
 
 
-__version__ = '2.6'
+__version__ = '2.7'
 
 class Unbuffered:
     def __init__(self, stream):
@@ -250,7 +250,7 @@ if not __name__ == "__main__" and inCalibre:
                                 Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.'
         supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on
         author              = 'DiapDealer, SomeUpdates' # The author of this plugin
-        version             = (0, 2, 6)   # The version number of this plugin
+        version             = (0, 2, 7)   # The version number of this plugin
         file_types          = set(['prc','mobi','azw','azw1','tpz']) # The file types that this plugin will be applied to
         on_import           = True # Run this plugin during the import
         priority            = 210  # run this plugin before mobidedrm, k4pcdedrm, k4dedrm
index e660a1a2499aec73fcb5503d9386bfc085b9b574..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
 #  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.28'
+__version__ = '0.29'
 
 import sys
 
@@ -177,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -192,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE
index 3a0000e97f955a212ebaac18c8de596cd6d3c86a..d165f37d36a2aabf1ee272fe4c23e381b0f20e66 100644 (file)
@@ -29,7 +29,7 @@ from __future__ import with_statement
 # and import that ZIP into Calibre using its plugin configuration GUI.
 
 
-__version__ = '2.6'
+__version__ = '2.7'
 
 class Unbuffered:
     def __init__(self, stream):
@@ -250,7 +250,7 @@ if not __name__ == "__main__" and inCalibre:
                                 Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.'
         supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on
         author              = 'DiapDealer, SomeUpdates' # The author of this plugin
-        version             = (0, 2, 6)   # The version number of this plugin
+        version             = (0, 2, 7)   # The version number of this plugin
         file_types          = set(['prc','mobi','azw','azw1','tpz']) # The file types that this plugin will be applied to
         on_import           = True # Run this plugin during the import
         priority            = 210  # run this plugin before mobidedrm, k4pcdedrm, k4dedrm
index e660a1a2499aec73fcb5503d9386bfc085b9b574..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
 #  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.28'
+__version__ = '0.29'
 
 import sys
 
@@ -177,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -192,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE
index e660a1a2499aec73fcb5503d9386bfc085b9b574..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
 #  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.28'
+__version__ = '0.29'
 
 import sys
 
@@ -177,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -192,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE
index e660a1a2499aec73fcb5503d9386bfc085b9b574..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
 #  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.28'
+__version__ = '0.29'
 
 import sys
 
@@ -177,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -192,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE
index e660a1a2499aec73fcb5503d9386bfc085b9b574..7aef175b18f92825983c5d131d70b46bae0479b3 100644 (file)
 #  0.26 - Now enables Text-To-Speech flag and sets clipping limit to 100%
 #  0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!)
 #  0.28 - slight additional changes to metadata token generation (None -> '')
+#  0.29 - It seems that the ideas about when multibyte trailing characters were
+#         included in the encryption were wrong. They aren't for DOC compressed
+#         files, but they are for HUFF/CDIC compress files!
 
-__version__ = '0.28'
+__version__ = '0.29'
 
 import sys
 
@@ -177,6 +180,7 @@ class MobiBook:
         # parse information from section 0
         self.sect = self.loadSection(0)
         self.records, = struct.unpack('>H', self.sect[0x8:0x8+2])
+        self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2])
 
         if self.magic == 'TEXtREAd':
             print "Book has format: ", self.magic
@@ -192,7 +196,7 @@ class MobiBook:
         if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5):
             self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4])
             print "Extra Data Flags = %d" % self.extra_data_flags
-        if self.mobi_version < 7:
+        if (self.mobi_version < 7) and (self.compression != 17480):
             # multibyte utf8 data is included in the encryption for mobi_version 6 and below
             # so clear that byte so that we leave it to be decrypted.
             self.extra_data_flags &= 0xFFFE