summaryrefslogtreecommitdiffstats
path: root/DeDRM_Windows_Application
diff options
context:
space:
mode:
authorApprentice Alf <[email protected]>2013-02-04 14:25:25 +0000
committerApprentice Alf <[email protected]>2015-03-07 14:25:39 +0000
commit490ee4e5d8f568b3eb84858b22912b07617fc6ee (patch)
tree07ec03740725a783dfe125d5d8a085bd9ac99526 /DeDRM_Windows_Application
parentc23b9034209b8c9448dc298bdc3807fa6933779b (diff)
tools v5.6.1
Diffstat (limited to 'DeDRM_Windows_Application')
-rw-r--r--DeDRM_Windows_Application/DeDRM_App/DeDRM_Drop_Target.bat4
-rw-r--r--DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/DeDRM_app.pyw59
-rw-r--r--DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/k4pcutils.py20
-rw-r--r--DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/kindlepid.py16
-rw-r--r--DeDRM_Windows_Application/DeDRM_App/DeDRM_lib/lib/mobidedrm.py25
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: