]> xmof Git - DeDRM.git/commitdiff
Making sure files and versions are consistent
authorApprentice Harper <apprenticeharper@gmail.com>
Fri, 7 Oct 2016 16:32:13 +0000 (17:32 +0100)
committerApprentice Harper <apprenticeharper@gmail.com>
Fri, 7 Oct 2016 16:32:13 +0000 (17:32 +0100)
DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/adobekey.py
DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py
DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/adobekey.py
DeDRM_calibre_plugin/DeDRM_plugin.zip
DeDRM_calibre_plugin/DeDRM_plugin/adobekey.py
Other_Tools/DRM_Key_Scripts/Adobe_Digital_Editions/adobekey.pyw
Other_Tools/Kobo/obok.py

index bfa542bab7816d1d14e1585ba6b926c162262092..7fbd51685d5438775424a6af4cdc21246860b919 100644 (file)
@@ -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
 # <http://www.gnu.org/licenses/>
 
-# 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
index 0e25d2975c9902470aff55b8d5fad7a79d2f0ed6..6de86719cd576227461f56d5f24ec914edf97114 100644 (file)
@@ -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
index bfa542bab7816d1d14e1585ba6b926c162262092..7fbd51685d5438775424a6af4cdc21246860b919 100644 (file)
@@ -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
 # <http://www.gnu.org/licenses/>
 
-# 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
index e6a9298b2b40d3e072174541528cd34a5b96284d..9dcade7fc8bd304923fff2757f8d6bd02108b8d8 100644 (file)
Binary files a/DeDRM_calibre_plugin/DeDRM_plugin.zip and b/DeDRM_calibre_plugin/DeDRM_plugin.zip differ
index bfa542bab7816d1d14e1585ba6b926c162262092..7fbd51685d5438775424a6af4cdc21246860b919 100644 (file)
@@ -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
 # <http://www.gnu.org/licenses/>
 
-# 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
index bfa542bab7816d1d14e1585ba6b926c162262092..7fbd51685d5438775424a6af4cdc21246860b919 100644 (file)
@@ -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
 # <http://www.gnu.org/licenses/>
 
-# 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
index 9720dcfadea15d945e4d9ddcd75019f75980a09e..e744c2b65fb2ebdc0f07ff6e676f7dcb392bcc54 100644 (file)
@@ -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.
 #
 """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]=="<?xml":
+            if contents[:5]=="<?xml" or contents[:8]=="\xef\xbb\xbf<?xml":
+                # utf-8
+                return True
+            elif contents[:14]=="\xfe\xff\x00<\x00?\x00x\x00m\x00l":
+                # utf-16BE
+                return True
+            elif contents[:14]=="\xff\xfe<\x00?\x00x\x00m\x00l\x00":
+                # utf-16LE
                 return True
             else:
-                print u"Bad XML: {0}".format(contents[:5])
+                print u"Bad XML: {0}".format(contents[:8])
                 raise ValueError
-        if self.mimetype == 'image/jpeg':
+        elif self.mimetype == 'image/jpeg':
             if contents[:3] == '\xff\xd8\xff':
                 return True
             else: