diff options
author | Apprentice Alf <[email protected]> | 2013-02-04 14:25:25 +0000 |
---|---|---|
committer | Apprentice Alf <[email protected]> | 2015-03-07 14:25:39 +0000 |
commit | 490ee4e5d8f568b3eb84858b22912b07617fc6ee (patch) | |
tree | 07ec03740725a783dfe125d5d8a085bd9ac99526 /DeDRM_Windows_Application | |
parent | c23b9034209b8c9448dc298bdc3807fa6933779b (diff) |
tools v5.6.1
Diffstat (limited to 'DeDRM_Windows_Application')
5 files changed, 62 insertions, 62 deletions
diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_Drop_Target.bat b/DeDRM_Windows_Application/DeDRM_App/DeDRM_Drop_Target.bat index 9e33348..fa1cb9b 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_Drop_Target.bat +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_Drop_Target.bat @@ -1,4 +1,4 @@ echo off set PWD=%~dp0 -cd /d %PWD%\DeDRM_lib && start /min python DeDRM_app.pyw %* -exit +cd /d %PWD%DeDRM_lib && start /min python DeDRM_app.pyw %* +exit
\ No newline at end of file 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 8e9290e..03268c8 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# DeDRM.pyw, version 5.6 +# DeDRM.pyw, version 5.6.1 # By some_updates and Apprentice Alf import sys @@ -34,23 +34,19 @@ from scriptinterface import decryptepub, decryptpdb, decryptpdf, decryptk4mobi # Wrap a stream so that output gets flushed immediately # and appended to shared queue -class QueuedStream: +class QueuedUTF8Stream: def __init__(self, stream, q): self.stream = stream - self.encoding = stream.encoding + self.encoding = 'utf-8' self.q = q - if self.encoding == None: - self.encoding = "utf-8" def write(self, data): if isinstance(data,unicode): - data = data.encode(self.encoding,"replace") + data = data.encode('utf-8',"replace") self.q.put(data) - # self.stream.write(data) - # self.stream.flush() def __getattr__(self, attr): return getattr(self.stream, attr) -__version__ = '5.6' +__version__ = '5.6.1' class DrmException(Exception): pass @@ -280,7 +276,7 @@ class PrefsDialog(Toplevel): def get_altinfopath(self): cpath = self.altinfopath.get() altinfopath = tkFileDialog.askopenfilename(parent=None, title='Select Alternative kindle.info or .kinf File', - defaultextension='.info', filetypes=[('Kindle Info', '.info'),('Kindle KInf','.kinf')('All Files', '.*')], + defaultextension='.info', filetypes=[('Kindle Info', '.info'),('Kindle KInf','.kinf'),('All Files', '.*')], initialdir=cpath) if altinfopath: altinfopath = os.path.normpath(altinfopath) @@ -291,17 +287,17 @@ class PrefsDialog(Toplevel): def get_bookpath(self): cpath = self.bookpath.get() bookpath = tkFileDialog.askopenfilename(parent=None, title='Select eBook for DRM Removal', - filetypes=[('ePub Files','.epub'), - ('Kindle','.azw'), - ('Kindle','.azw1'), - ('Kindle','.azw3'), - ('Kindle','.azw4'), - ('Kindle','.tpz'), - ('Kindle','.mobi'), - ('Kindle','.prc'), - ('eReader','.pdb'), - ('PDF','.pdf'), - ('All Files', '.*')], + filetypes=[('All Files', '.*'), + ('ePub Files','.epub'), + ('Kindle','.azw'), + ('Kindle','.azw1'), + ('Kindle','.azw3'), + ('Kindle','.azw4'), + ('Kindle','.tpz'), + ('Kindle','.mobi'), + ('Kindle','.prc'), + ('eReader','.pdb'), + ('PDF','.pdf')], initialdir=cpath) if bookpath: bookpath = os.path.normpath(bookpath) @@ -412,8 +408,9 @@ class ConvDialog(Toplevel): self.showCmdOutput(msg) if self.numbad == 0: self.after(2000,self.conversion_done()) - logfile = os.path.join(rscpath,'dedrm.log') - file(logfile,'wb').write(self.log) + logfile = os.path.join(os.path.expanduser('~'),'DeDRM.log') + file(logfile,'w').write(self.log) + self.log='' return infile = filename bname = os.path.basename(infile) @@ -537,8 +534,8 @@ class ConvDialog(Toplevel): def processK4MOBI(q, infile, outdir, rscpath): add_cp65001_codec() set_utf8_default_encoding() - sys.stdout = QueuedStream(sys.stdout, q) - sys.stderr = QueuedStream(sys.stderr, q) + sys.stdout = QueuedUTF8Stream(sys.stdout, q) + sys.stderr = QueuedUTF8Stream(sys.stderr, q) rv = decryptk4mobi(infile, outdir, rscpath) sys.exit(rv) @@ -546,8 +543,8 @@ def processK4MOBI(q, infile, outdir, rscpath): def processPDF(q, infile, outdir, rscpath): add_cp65001_codec() set_utf8_default_encoding() - sys.stdout = QueuedStream(sys.stdout, q) - sys.stderr = QueuedStream(sys.stderr, q) + sys.stdout = QueuedUTF8Stream(sys.stdout, q) + sys.stderr = QueuedUTF8Stream(sys.stderr, q) rv = decryptpdf(infile, outdir, rscpath) sys.exit(rv) @@ -555,8 +552,8 @@ def processPDF(q, infile, outdir, rscpath): def processEPUB(q, infile, outdir, rscpath): add_cp65001_codec() set_utf8_default_encoding() - sys.stdout = QueuedStream(sys.stdout, q) - sys.stderr = QueuedStream(sys.stderr, q) + sys.stdout = QueuedUTF8Stream(sys.stdout, q) + sys.stderr = QueuedUTF8Stream(sys.stderr, q) rv = decryptepub(infile, outdir, rscpath) sys.exit(rv) @@ -564,8 +561,8 @@ def processEPUB(q, infile, outdir, rscpath): def processPDB(q, infile, outdir, rscpath): add_cp65001_codec() set_utf8_default_encoding() - sys.stdout = QueuedStream(sys.stdout, q) - sys.stderr = QueuedStream(sys.stderr, q) + sys.stdout = QueuedUTF8Stream(sys.stdout, q) + sys.stderr = QueuedUTF8Stream(sys.stderr, q) rv = decryptpdb(infile, outdir, rscpath) sys.exit(rv) diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/k4pcutils.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/k4pcutils.py index 476844c..bb9289e 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/k4pcutils.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/k4pcutils.py @@ -208,7 +208,7 @@ CryptUnprotectData = CryptUnprotectData() def getKindleInfoFiles(): kInfoFiles = [] # some 64 bit machines do not have the proper registry key for some reason - # or the pythonn interface to the 32 vs 64 bit registry is broken + # or the python interface to the 32 vs 64 bit registry is broken path = "" if 'LOCALAPPDATA' in os.environ.keys(): path = os.environ['LOCALAPPDATA'] @@ -217,17 +217,17 @@ def getKindleInfoFiles(): try: regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\") path = winreg.QueryValueEx(regkey, 'Local AppData')[0] + except WindowsError: + pass + if not os.path.isdir(path): + path = "" + try: + regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") + path = winreg.QueryValueEx(regkey, 'Local AppData')[0] + except WindowsError: + pass if not os.path.isdir(path): path = "" - try: - regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") - path = winreg.QueryValueEx(regkey, 'Local AppData')[0] - if not os.path.isdir(path): - path = "" - except RegError: - pass - except RegError: - pass found = False if path == "": diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/kindlepid.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/kindlepid.py index 38c5e4e..d16c017 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/kindlepid.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/kindlepid.py @@ -8,6 +8,7 @@ # 0.2 Added support for generating PID for iPhone (thanks to mbp) # 0.3 changed to autoflush stdout, fixed return code usage # 0.3 updated for unicode +# 0.4 Added support for serial numbers starting with '9', fixed unicode bugs. import sys import binascii @@ -63,7 +64,7 @@ def unicode_argv(): xrange(start, argc.value)] # if we don't have any arguments at all, just pass back script name # this should never happen - return [u"mobidedrm.py"] + return [u"kindlepid.py"] else: argvencoding = sys.stdin.encoding if argvencoding == None: @@ -92,7 +93,6 @@ def checksumPid(s): return res - def pidFromSerial(s, l): crc = crc32(s) @@ -113,27 +113,27 @@ def pidFromSerial(s, l): def cli_main(argv=unicode_argv()): print u"Mobipocket PID calculator for Amazon Kindle. Copyright © 2007, 2009 Igor Skochinsky" - if len(sys.argv)==2: - serial = sys.argv[1] + if len(argv)==2: + serial = argv[1] else: print u"Usage: kindlepid.py <Kindle Serial Number>/<iPhone/iPod Touch UDID>" return 1 if len(serial)==16: - if serial.startswith("B"): + if serial.startswith("B") or serial.startswith("9"): print u"Kindle serial number detected" else: print u"Warning: unrecognized serial number. Please recheck input." return 1 pid = pidFromSerial(serial.encode("utf-8"),7)+'*' - print u"Mobipocket PID for Kindle serial#{0} is {1} ".format(serial,checksumPid(pid)) + print u"Mobipocket PID for Kindle serial#{0} is {1}".format(serial,checksumPid(pid)) return 0 elif len(serial)==40: print u"iPhone serial number (UDID) detected" pid = pidFromSerial(serial.encode("utf-8"),8) - print u"Mobipocket PID for iPhone serial#{0} is {1} ".format(serial,checksumPid(pid)) + print u"Mobipocket PID for iPhone serial#{0} is {1}".format(serial,checksumPid(pid)) return 0 print u"Warning: unrecognized serial number. Please recheck input." - return 1 + return 1 if __name__ == "__main__": diff --git a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/mobidedrm.py b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/mobidedrm.py index 113f57a..264c175 100644 --- a/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/mobidedrm.py +++ b/DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/mobidedrm.py @@ -66,9 +66,10 @@ # 0.36 - fixed problem with TEXtREAd and getBookTitle interface # 0.37 - Fixed double announcement for stand-alone operation # 0.38 - Unicode used wherever possible, cope with absent alfcrypto +# 0.39 - Fixed problem with TEXtREAd and getBookType interface -__version__ = u"0.38" +__version__ = u"0.39" import sys import os @@ -268,19 +269,22 @@ class MobiBook: self.records, = struct.unpack('>H', self.sect[0x8:0x8+2]) self.compression, = struct.unpack('>H', self.sect[0x0:0x0+2]) + # det default values before PalmDoc test + self.print_replica = False + self.extra_data_flags = 0 + self.meta_array = {} + self.mobi_length = 0 + self.mobi_codepage = 1252 + self.mobi_version = -1 + if self.magic == 'TEXtREAd': print u"PalmDoc format book detected." - self.extra_data_flags = 0 - self.mobi_length = 0 - self.mobi_codepage = 1252 - self.mobi_version = -1 - self.meta_array = {} return + self.mobi_length, = struct.unpack('>L',self.sect[0x14:0x18]) self.mobi_codepage, = struct.unpack('>L',self.sect[0x1c:0x20]) self.mobi_version, = struct.unpack('>L',self.sect[0x68:0x6C]) print u"MOBI header version {0:d}, header length {1:d}".format(self.mobi_version, self.mobi_length) - self.extra_data_flags = 0 if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5): self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4]) print u"Extra Data Flags: {0:d}".format(self.extra_data_flags) @@ -290,7 +294,6 @@ class MobiBook: self.extra_data_flags &= 0xFFFE # if exth region exists parse it for metadata array - self.meta_array = {} try: exth_flag, = struct.unpack('>L', self.sect[0x80:0x84]) exth = '' @@ -313,9 +316,7 @@ class MobiBook: # print type, size, content, content.encode('hex') pos += size except: - self.meta_array = {} pass - self.print_replica = False def getBookTitle(self): codec_map = { @@ -406,7 +407,9 @@ class MobiBook: return u"Print Replica" if self.mobi_version >= 8: return u"Kindle Format 8" - return u"Mobipocket" + if self.mobi_version >= 0: + return u"Mobipocket {0:d}".format(self.mobi_version) + return u"PalmDoc" def getBookExtension(self): if self.print_replica: |