diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/adobekey.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/adobekey.py index bfa542b..7fbd516 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/adobekey.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/adobekey.py @@ -3,13 +3,13 @@ from __future__ import with_statement -# adobekey.pyw, version 5.7 +# adobekey.pyw, version 6.0 # Copyright © 2009-2010 i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 # -# Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf +# Modified 2010–2016 by several people # Windows users: Before running this program, you must first install Python. # We recommend ActiveState Python 2.7.X for Windows (x86) from diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py index 0e25d29..6de8671 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py @@ -57,6 +57,7 @@ from __future__ import with_statement # 8.0.2 - Add additional check on DER file sanity # 8.0.3 - Remove erroneous check on DER file sanity # 8.0.4 - Completely remove erroneous check on DER file sanity +# 8.0.5 - Do not process DRM-free documents """ @@ -64,7 +65,7 @@ Decrypts Adobe ADEPT-encrypted PDF files. """ __license__ = 'GPL v3' -__version__ = "8.0.4" +__version__ = "8.0.5" import sys import os @@ -1468,6 +1469,7 @@ class PDFDocument(object): if not self.encryption: self.is_printable = self.is_modifiable = self.is_extractable = True self.ready = True + raise PDFEncryptionError('Document is not encrypted.') return (docid, param) = self.encryption type = literal_name(param['Filter']) @@ -2180,11 +2182,11 @@ def decryptBook(userkey, inpath, outpath): if RSA is None: raise ADEPTError(u"PyCrypto or OpenSSL must be installed.") with open(inpath, 'rb') as inf: - try: - serializer = PDFSerializer(inf, userkey) - except: - print u"Error serializing pdf {0}. Probably wrong key.".format(os.path.basename(inpath)) - return 2 + #try: + serializer = PDFSerializer(inf, userkey) + #except: + # print u"Error serializing pdf {0}. Probably wrong key.".format(os.path.basename(inpath)) + # return 2 # hope this will fix the 'bad file descriptor' problem with open(outpath, 'wb') as outf: # help construct to make sure the method runs to the end diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/adobekey.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/adobekey.py index bfa542b..7fbd516 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/adobekey.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/adobekey.py @@ -3,13 +3,13 @@ from __future__ import with_statement -# adobekey.pyw, version 5.7 +# adobekey.pyw, version 6.0 # Copyright © 2009-2010 i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 # -# Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf +# Modified 2010–2016 by several people # Windows users: Before running this program, you must first install Python. # We recommend ActiveState Python 2.7.X for Windows (x86) from diff --git a/DeDRM_calibre_plugin/DeDRM_plugin.zip b/DeDRM_calibre_plugin/DeDRM_plugin.zip index e6a9298..9dcade7 100644 Binary files a/DeDRM_calibre_plugin/DeDRM_plugin.zip and b/DeDRM_calibre_plugin/DeDRM_plugin.zip differ diff --git a/DeDRM_calibre_plugin/DeDRM_plugin/adobekey.py b/DeDRM_calibre_plugin/DeDRM_plugin/adobekey.py index bfa542b..7fbd516 100644 --- a/DeDRM_calibre_plugin/DeDRM_plugin/adobekey.py +++ b/DeDRM_calibre_plugin/DeDRM_plugin/adobekey.py @@ -3,13 +3,13 @@ from __future__ import with_statement -# adobekey.pyw, version 5.7 +# adobekey.pyw, version 6.0 # Copyright © 2009-2010 i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 # -# Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf +# Modified 2010–2016 by several people # Windows users: Before running this program, you must first install Python. # We recommend ActiveState Python 2.7.X for Windows (x86) from diff --git a/Other_Tools/DRM_Key_Scripts/Adobe_Digital_Editions/adobekey.pyw b/Other_Tools/DRM_Key_Scripts/Adobe_Digital_Editions/adobekey.pyw index bfa542b..7fbd516 100644 --- a/Other_Tools/DRM_Key_Scripts/Adobe_Digital_Editions/adobekey.pyw +++ b/Other_Tools/DRM_Key_Scripts/Adobe_Digital_Editions/adobekey.pyw @@ -3,13 +3,13 @@ from __future__ import with_statement -# adobekey.pyw, version 5.7 +# adobekey.pyw, version 6.0 # Copyright © 2009-2010 i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 # -# Modified 2010–2013 by some_updates, DiapDealer and Apprentice Alf +# Modified 2010–2016 by several people # Windows users: Before running this program, you must first install Python. # We recommend ActiveState Python 2.7.X for Windows (x86) from diff --git a/Other_Tools/Kobo/obok.py b/Other_Tools/Kobo/obok.py index 9720dcf..e744c2b 100644 --- a/Other_Tools/Kobo/obok.py +++ b/Other_Tools/Kobo/obok.py @@ -1,6 +1,12 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# Version 3.2.2 October 2016 +# Change to the way the new database version is handled. +# +# Version 3.2.1 September 2016 +# Update for v4.0 of Windows Desktop app. +# # Version 3.2.0 January 2016 # Update for latest version of Windows Desktop app. # Support Kobo devices in the command line version. @@ -136,8 +142,8 @@ # """Manage all Kobo books, either encrypted or DRM-free.""" -__version__ = '3.1.9' -__about__ = u"Obok v{0}\nCopyright © 2012-2015 Physisticated et al.".format(__version__) +__version__ = '3.2.2' +__about__ = u"Obok v{0}\nCopyright © 2012-2016 Physisticated et al.".format(__version__) import sys import os @@ -152,6 +158,7 @@ import xml.etree.ElementTree as ET import string import shutil import argparse +import tempfile can_parse_xml = True try: @@ -162,7 +169,7 @@ except ImportError: # print u"Cannot find xml.etree, disabling extraction of serial numbers" # List of all known hash keys -KOBO_HASH_KEYS = ['88b3a2e13', 'XzUhGYdFp', 'NoCanLook'] +KOBO_HASH_KEYS = ['88b3a2e13', 'XzUhGYdFp', 'NoCanLook','QJhwzAtXL'] class ENCRYPTIONError(Exception): pass @@ -355,7 +362,18 @@ class KoboLibrary(object): if (self.kobodir != u""): self.bookdir = os.path.join(self.kobodir, u"kepub") - self.__sqlite = sqlite3.connect(kobodb) + # make a copy of the database in a temporary file + # so we can ensure it's not using WAL logging which sqlite3 can't do. + self.newdb = tempfile.NamedTemporaryFile(mode='wb', delete=False) + print self.newdb.name + olddb = open(kobodb, 'rb') + self.newdb.write(olddb.read(18)) + self.newdb.write('\x01\x01') + olddb.read(2) + self.newdb.write(olddb.read()) + olddb.close() + self.newdb.close() + self.__sqlite = sqlite3.connect(self.newdb.name) self.__cursor = self.__sqlite.cursor() self._userkeys = [] self._books = [] @@ -366,6 +384,8 @@ class KoboLibrary(object): """Closes the database used by the library.""" self.__cursor.close() self.__sqlite.close() + # delete the temporary copy of the database + os.remove(self.newdb.name) @property def userkeys (self): @@ -558,12 +578,19 @@ class KoboFile(object): Returns True if the content was checked, False if it was not checked.""" if self.mimetype == 'application/xhtml+xml': - if contents[:5]=="