From 8b632e309fe4901bf0f21f404d2d3091fe7851da Mon Sep 17 00:00:00 2001 From: Apprentice Alf Date: Wed, 2 Feb 2011 14:41:15 +0000 Subject: [PATCH] tools v3.3 --- .../K4MobiDeDRM_plugin/flatxml2html.py | 11 +- Calibre_Plugins/eReaderPDB2PML_plugin.zip | Bin 13225 -> 13165 bytes .../eReaderPDB2PML_plugin/erdr2pml.py | 114 ++- Calibre_Plugins/ignobleepub_plugin.zip | Bin 6544 -> 6658 bytes .../ignobleepub_plugin/ignobleepub_plugin.py | 2 +- Calibre_Plugins/ignobleepub_plugin/zipfix.py | 74 +- Calibre_Plugins/ineptepub_plugin.zip | Bin 10901 -> 11018 bytes .../ineptepub_plugin/ineptepub_plugin.py | 2 +- Calibre_Plugins/ineptepub_plugin/zipfix.py | 74 +- Calibre_Plugins/ineptpdf_plugin.zip | Bin 21834 -> 21834 bytes Calibre_Plugins/k4mobidedrm_plugin.zip | Bin 43885 -> 43982 bytes .../k4mobidedrm_plugin/k4mobidedrm_plugin.py | 6 +- .../k4mobidedrm_plugin/k4mutils.py | 2 +- DeDRM_Macintosh_Application/DeDRM.app.txt | Bin 102368 -> 106492 bytes .../DeDRM.app/Contents/Info.plist | 14 +- .../Contents/Resources/Scripts/main.scpt | Bin 220916 -> 230240 bytes .../Contents/Resources/cmbtc_v2.2.py | 900 ------------------ .../Resources/description.rtfd/TXT.rtf | 2 +- .../Contents/Resources/flatxml2html.py | 11 +- .../DeDRM.app/Contents/Resources/genxml.py | 145 --- .../{ignobleepub.pyw => ignobleepub.py} | 98 +- .../{ignoblekeygen.pyw => ignoblekeygen.py} | 38 +- .../Resources/{ineptepub.pyw => ineptepub.py} | 93 +- .../Resources/{ineptkey.pyw => ineptkey.py} | 18 +- .../Resources/{ineptpdf.pyw => ineptpdf.py} | 49 +- .../Contents/Resources/k4mobidedrm.py | 68 +- .../DeDRM.app/Contents/Resources/k4mutils.py | 2 +- .../DeDRM_WinApp/DeDRM_lib/DeDRM_app.pyw | 55 +- .../DeDRM_lib/lib/flatxml2html.py | 11 +- .../DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py | 6 +- .../DeDRM_WinApp/DeDRM_lib/lib/k4mutils.py | 2 +- .../ReadMe_DeDRM_WinApp.txt | 4 +- KindleBooks_Tools/KindleBooks/KindleBooks.pyw | 10 +- .../KindleBooks/lib/flatxml2html.py | 11 +- .../KindleBooks/lib/k4mobidedrm.py | 6 +- KindleBooks_Tools/KindleBooks/lib/k4mutils.py | 2 +- ePub_Fixer/README_ePub_Fixer.txt | 4 +- .../lib/eReaderPDB2PML_plugin.py | 2 +- 38 files changed, 462 insertions(+), 1374 deletions(-) delete mode 100644 DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/cmbtc_v2.2.py delete mode 100644 DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/genxml.py rename DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/{ignobleepub.pyw => ignobleepub.py} (98%) rename DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/{ignoblekeygen.pyw => ignoblekeygen.py} (98%) rename DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/{ineptepub.pyw => ineptepub.py} (98%) rename DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/{ineptkey.pyw => ineptkey.py} (99%) rename DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/{ineptpdf.pyw => ineptpdf.py} (99%) diff --git a/Calibre_Plugins/K4MobiDeDRM_plugin/flatxml2html.py b/Calibre_Plugins/K4MobiDeDRM_plugin/flatxml2html.py index 81d93bc8..ae2c8dd8 100644 --- a/Calibre_Plugins/K4MobiDeDRM_plugin/flatxml2html.py +++ b/Calibre_Plugins/K4MobiDeDRM_plugin/flatxml2html.py @@ -68,7 +68,7 @@ def extract(path, key): ys = [] gdefs = [] - # get path defintions, positions, dimensions for ecah glyph + # get path defintions, positions, dimensions for each glyph # that makes up the image, and find min x and min y to reposition origin minx = -1 miny = -1 @@ -305,6 +305,15 @@ def getParaDescription(self, start, end, regtype): lastGlyph = firstglyphList[last] else : lastGlyph = len(gidList) + + # handle case of white sapce paragraphs with no actual glyphs in them + # by reverting to text based paragraph + if firstGlyph >= lastGlyph: + # revert to standard text based paragraph + for wordnum in xrange(first, last): + result.append(('ocr', wordnum)) + return pclass, result + for glyphnum in xrange(firstGlyph, lastGlyph): glyphList.append(glyphnum) # include any extratokens if they exist diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin.zip b/Calibre_Plugins/eReaderPDB2PML_plugin.zip index 7174e7236a79c1f431c4e8dc6b86909039943800..c852068c1061b61563ad845de6619ac29dd76024 100644 GIT binary patch delta 6204 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 alfp7n0lJeGGgJY7lWQ|L2COjv0002DaM%w3 delta 6265 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 diff --git a/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py b/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py index ce6945d1..6df9e138 100644 --- a/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py +++ b/Calibre_Plugins/eReaderPDB2PML_plugin/erdr2pml.py @@ -57,8 +57,9 @@ # 0.16 - convert to use openssl DES (very very fast) or pure python DES if openssl's libcrypto is not available # 0.17 - added support for pycrypto's DES as well # 0.18 - on Windows try PyCrypto first and OpenSSL next +# 0.19 - Modify the interface to allow use of import -__version__='0.18' +__version__='0.19' class Unbuffered: def __init__(self, stream): @@ -111,12 +112,14 @@ def __getattr__(self, attr): # older Python release import sha sha1 = lambda s: sha.new(s) + import cgi import logging logging.basicConfig() #logging.basicConfig(level=logging.DEBUG) + class Sectionizer(object): def __init__(self, filename, ident): self.contents = file(filename, 'rb').read() @@ -364,7 +367,7 @@ def cleanPML(pml): def convertEreaderToPml(infile, name, cc, outdir): if not os.path.exists(outdir): os.makedirs(outdir) - + bookname = os.path.splitext(os.path.basename(infile))[0] print " Decoding File" sect = Sectionizer(infile, 'PNRdPPrs') er = EreaderProcessor(sect.loadSection, name, cc) @@ -390,6 +393,47 @@ def convertEreaderToPml(infile, name, cc, outdir): # file(os.path.join(outdir, 'bookinfo.txt'),'wb').write(bkinfo) + +def decryptBook(infile, outdir, name, cc, make_pmlz): + if make_pmlz : + # ignore specified outdir, use tempdir instead + outdir = tempfile.mkdtemp() + try: + print "Processing..." + convertEreaderToPml(infile, name, cc, outdir) + if make_pmlz : + import zipfile + import shutil + print " Creating PMLZ file" + zipname = infile[:-4] + '.pmlz' + myZipFile = zipfile.ZipFile(zipname,'w',zipfile.ZIP_STORED, False) + list = os.listdir(outdir) + for file in list: + localname = file + filePath = os.path.join(outdir,file) + if os.path.isfile(filePath): + myZipFile.write(filePath, localname) + elif os.path.isdir(filePath): + imageList = os.listdir(filePath) + localimgdir = os.path.basename(filePath) + for image in imageList: + localname = os.path.join(localimgdir,image) + imagePath = os.path.join(filePath,image) + if os.path.isfile(imagePath): + myZipFile.write(imagePath, localname) + myZipFile.close() + # remove temporary directory + shutil.rmtree(outdir, True) + print 'output is %s' % zipname + else : + print 'output in %s' % outdir + print "done" + except ValueError, e: + print "Error: %s" % e + return 1 + return 0 + + def usage(): print "Converts DRMed eReader books to PML Source" print "Usage:" @@ -404,8 +448,8 @@ def usage(): print " It's enough to enter the last 8 digits of the credit card number" return + def main(argv=None): - global bookname try: opts, args = getopt.getopt(sys.argv[1:], "h", ["make-pmlz"]) except getopt.GetoptError, err: @@ -413,75 +457,27 @@ def main(argv=None): usage() return 1 make_pmlz = False - zipname = None for o, a in opts: if o == "-h": usage() return 0 elif o == "--make-pmlz": make_pmlz = True - zipname = '' print "eRdr2Pml v%s. Copyright (c) 2009 The Dark Reverser" % __version__ if len(args)!=3 and len(args)!=4: usage() return 1 - else: - if len(args)==3: - infile, name, cc = args[0], args[1], args[2] - outdir = infile[:-4] + '_Source' - elif len(args)==4: - infile, outdir, name, cc = args[0], args[1], args[2], args[3] - if make_pmlz : - # ignore specified outdir, use tempdir instead - outdir = tempfile.mkdtemp() - - bookname = os.path.splitext(os.path.basename(infile))[0] - - try: - print "Processing..." - import time - start_time = time.time() - convertEreaderToPml(infile, name, cc, outdir) - - if make_pmlz : - import zipfile - import shutil - print " Creating PMLZ file" - zipname = infile[:-4] + '.pmlz' - myZipFile = zipfile.ZipFile(zipname,'w',zipfile.ZIP_STORED, False) - list = os.listdir(outdir) - for file in list: - localname = file - filePath = os.path.join(outdir,file) - if os.path.isfile(filePath): - myZipFile.write(filePath, localname) - elif os.path.isdir(filePath): - imageList = os.listdir(filePath) - localimgdir = os.path.basename(filePath) - for image in imageList: - localname = os.path.join(localimgdir,image) - imagePath = os.path.join(filePath,image) - if os.path.isfile(imagePath): - myZipFile.write(imagePath, localname) - myZipFile.close() - # remove temporary directory - shutil.rmtree(outdir, True) - - end_time = time.time() - search_time = end_time - start_time - print 'elapsed time: %.2f seconds' % (search_time, ) - if make_pmlz : - print 'output is %s' % zipname - else : - print 'output in %s' % outdir - print "done" - except ValueError, e: - print "Error: %s" % e - return 1 - return 0 + if len(args)==3: + infile, name, cc = args[0], args[1], args[2] + outdir = infile[:-4] + '_Source' + elif len(args)==4: + infile, outdir, name, cc = args[0], args[1], args[2], args[3] + + return decryptBook(infile, outdir, name, cc, make_pmlz) + if __name__ == "__main__": sys.exit(main()) diff --git a/Calibre_Plugins/ignobleepub_plugin.zip b/Calibre_Plugins/ignobleepub_plugin.zip index 5ef5c414857509329b3999fa3273073d77c92728..8eba53394f6ccefb0487f472a3eccf4f7f376708 100644 GIT binary patch delta 2881 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 b4Je8w{6+o0Kxg>H delta 2780 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 V1pos^!8lEma4H`L{3!qc007{5SJeOj delta 2690 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 diff --git a/Calibre_Plugins/ineptepub_plugin/ineptepub_plugin.py b/Calibre_Plugins/ineptepub_plugin/ineptepub_plugin.py index beb924e5..e155a3c8 100644 --- a/Calibre_Plugins/ineptepub_plugin/ineptepub_plugin.py +++ b/Calibre_Plugins/ineptepub_plugin/ineptepub_plugin.py @@ -371,7 +371,7 @@ class IneptDeDRM(FileTypePlugin): Credit given to I <3 Cabbages for the original stand-alone scripts.' supported_platforms = ['linux', 'osx', 'windows'] author = 'DiapDealer' - version = (0, 1, 4) + version = (0, 1, 5) minimum_calibre_version = (0, 6, 44) # Compiled python libraries cannot be imported in earlier versions. file_types = set(['epub']) on_import = True diff --git a/Calibre_Plugins/ineptepub_plugin/zipfix.py b/Calibre_Plugins/ineptepub_plugin/zipfix.py index 40c41d20..4c862a79 100644 --- a/Calibre_Plugins/ineptepub_plugin/zipfix.py +++ b/Calibre_Plugins/ineptepub_plugin/zipfix.py @@ -81,23 +81,44 @@ def fix(self): # get the zipinfo for each member of the input archive # and copy member over to output archive # if problems exist with local vs central filename, fix them - - for i, zinfo in enumerate(self.inzip.infolist()): - data = None - nzinfo = zinfo - - try: - data = self.inzip.read(zinfo) - except zipfile.BadZipfile or zipfile.error: - local_name = self.getlocalname(zinfo) - data = self.getfiledata(zinfo) - nzinfo.filename = local_name - - nzinfo.date_time = zinfo.date_time - nzinfo.compress_type = zinfo.compress_type - nzinfo.flag_bits = 0 - nzinfo.internal_attr = 0 - self.outzip.writestr(nzinfo,data) + # also fix bad epub compression + + # write mimetype file first, if present, and with no compression + for zinfo in self.inzip.infolist(): + if zinfo.filename == "mimetype": + nzinfo = zinfo + try: + data = self.inzip.read(zinfo.filename) + except zipfile.BadZipfile or zipfile.error: + local_name = self.getlocalname(zinfo) + data = self.getfiledata(zinfo) + nzinfo.filename = local_name + + nzinfo.date_time = zinfo.date_time + nzinfo.compress_type = zipfile.ZIP_STORED + nzinfo.flag_bits = 0 + nzinfo.internal_attr = 0 + nzinfo.extra = "" + self.outzip.writestr(nzinfo,data) + break + + # write the rest of the files + for zinfo in self.inzip.infolist(): + if zinfo.filename != "mimetype": + data = None + nzinfo = zinfo + try: + data = self.inzip.read(zinfo.filename) + except zipfile.BadZipfile or zipfile.error: + local_name = self.getlocalname(zinfo) + data = self.getfiledata(zinfo) + nzinfo.filename = local_name + + nzinfo.date_time = zinfo.date_time + nzinfo.compress_type = zinfo.compress_type + nzinfo.flag_bits = 0 + nzinfo.internal_attr = 0 + self.outzip.writestr(nzinfo,data) self.bzf.close() self.inzip.close() @@ -111,14 +132,7 @@ def usage(): """ -def main(argv=sys.argv): - if len(argv)!=3: - usage() - return 1 - infile = None - outfile = None - infile = argv[1] - outfile = argv[2] +def repairBook(infile, outfile): if not os.path.exists(infile): print "Error: Input Zip File does not exist" return 1 @@ -130,6 +144,16 @@ def main(argv=sys.argv): print "Error Occurred ", e return 2 + +def main(argv=sys.argv): + if len(argv)!=3: + usage() + return 1 + infile = argv[1] + outfile = argv[2] + return repairBook(infile, outfile) + + if __name__ == '__main__' : sys.exit(main()) diff --git a/Calibre_Plugins/ineptpdf_plugin.zip b/Calibre_Plugins/ineptpdf_plugin.zip index eccc1b868ce104a177592c078e2383d5046f78f4..d0b8f2aa656eaee865f581d1cd7c91ad0e7b7de2 100644 GIT binary patch delta 25 ecmX@Lit*Gc#tDYZD{DMAnwax}=*@Y2ciaGnl?n*} delta 25 hcmX@Lit*Gc#tDYZ4;QO!G%@F!tQac1xsLCQ8vu#(3GM&@ diff --git a/Calibre_Plugins/k4mobidedrm_plugin.zip b/Calibre_Plugins/k4mobidedrm_plugin.zip index 5ef572b264d3575d27fec5a87a42396f0322fa8e..1efffbbc1eb6b3bf84ed514b2d7f70d3d5964b20 100644 GIT binary patch delta 11458 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 VFnGO28>$)1S}O!kQT3mX{}1mn>SO=_ delta 11367 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 d1Pt&=h4R0b2+UWh4xs{$tK^66E&b0P{||+\+/]') substitute='_' @@ -89,6 +90,7 @@ def cleanup_name(name): # Mac and Unix don't like file names that begin with a full stop if len(one) > 0 and one[0] == '.': one = substitute+one[1:] + one = one.replace(' ','_') return one def decryptBook(infile, outdir, k4, kInfoFiles, serials, pids): @@ -248,7 +250,7 @@ class K4DeDRM(FileTypePlugin): 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, 1) # The version number of this plugin + version = (0, 2, 2) # 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 diff --git a/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py b/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py index 1b501ba4..5e57701c 100644 --- a/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py +++ b/Calibre_Plugins/k4mobidedrm_plugin/k4mutils.py @@ -189,6 +189,6 @@ def openKindleInfo(kInfoFile=None): raise DrmException('Error: .kindle-info file can not be found') return open(kinfopath,'r') else: - if not os.path.isfile(kinfoFile): + if not os.path.isfile(kInfoFile): raise DrmException('Error: kindle-info file can not be found') return open(kInfoFile, 'r') diff --git a/DeDRM_Macintosh_Application/DeDRM.app.txt b/DeDRM_Macintosh_Application/DeDRM.app.txt index 62ba3533a7b654eeee53ef57023eb4c1ba61edea..865591507355223e12bf1af9e757e82099e3650b 100644 GIT binary patch delta 1773 zcmbVMTWAwo6g^uzb&{GiY2LlDOvb9UCb3lurHB`;wW5u-RkR;I(rDTWeI#k*Ui+cF zVtY|klnp%!iuxyhNOXh&k!pYavMT;qwEE%eLli{uiF>B0kzx~+kep$km9^JdXZ9LD zm;dEveyUp7+Ri#z4~wu?S|$CtovmSe=qbt?shVUR%t)Ue)=m5WumtTTX)j3??Vs(e zEWP$pP226J+Cn_A#DgcQL~c$%P|$%GUuNT87Z`a<0_IyYROz-@`O<}VF6ME27ubCg z)A(A6F`4F+bTtz7?qO}r$OBzai7i{)l^LdtsEp)Y`cX8ZNx8Yj@q?tAFX;lm)}U|- zg;FIP7Vw>+2=5wGSY&eJnS#su`pII!V&fnVn?zHT#n@glHc0C}w3!#kkV(i+Z?|-KpDcyzhOe^oq-bNmah+7zXUQFFZf*eMwVwTWJWw7%)_wXiOZTS zxOU9049&ehD_aLX8iTo*`n(*+eO?U5oALTrJ3fj#b9KWV<$kRbH%CEIPWhdVY;BYa zF)REoHJ%w36{&X2kc}DtTj0RFP)9DkWaiG$V%-~}#lia3%KMPno|SrJAb_`ggP4lc zJ%;{M=lY?hN)-RV@0{2y`PL7~*zmX4YYG~8V@88vt^ z>6Ghk~dF!|yrufCT5H9fC>+<3hWFU5>l^3jXs5s3#S zaI5_usQxXt)T_m?*`SK0;Gf0m*Q+)!f^BYWcrN}(R1c1Q5HY;pjNu1n^>!`9^7)23 zaAyGgNIldz8uX~1672j*9qh&NRe9=)bx;BYdni{Y!J@fRy0ftF7t z9*NB-s7#sKst0v2ovt#DCOl~F7xDGOe7>RqL>#(j!6C1kdqYsF4zGu6rfJkPwSa9x wH;*@gM?KU6jlrqm%L|V|mHKTE9tiXT$^85daN^U`PJaI=teFZ{2|POEJG8*wnE(I) delta 516 zcmZ`#O=uHg6xc$5L5pY)MM^B9RS$)=hAIdftaaOpfhc7~ z5m8x$0Y8!Ycj`rh_#Hk`sEA&LoR;7z2N8M@ddjI3SM5O$Uf!E|^I(Qq|G-+$*z4iA z$Y{6YRK<(VPtp9*wGG!(^-bhlH87mKg|N%|efdaL@yd9=1x)S1b2p3Gp+lnBKSEeM zn}b)e-|YUX;$73i#8AlnN$NnknvDcAt}6*e$GN_=2#Z!P?(XS^H*fNdon#{zTl@Rj zhF_Zze(8#ir^hvvPr0a{%tbo`qokp9bU$zGAdNqcQBu@TYdv`6=6^*&v40#Z?m13x7M~!64=M=Q%0}XW1TAk0_UwS>=Mbxwm1i;8%2P?FD*sZTt#YJDrn*UZM40pr(3FKRo#L%gN=b8qJSL-pa|G{_#*dvL shqtq2VdEad^h*Zkn<>i<)jDOeLg)7`-+4%khf6fZBQzkVpU_h5Cu32(NB{r; diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist index 8d56e56e..dba28391 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist @@ -24,7 +24,7 @@ CFBundleExecutable droplet CFBundleGetInfoString - DeDRM 2.0, Copyright © 2010–2011 by Apprentice Alf. + DeDRM 2.1, Copyright © 2010–2011 by Apprentice Alf and others. CFBundleIconFile droplet CFBundleInfoDictionaryVersion @@ -34,7 +34,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.0 + 2.1 CFBundleSignature dplt LSMinimumSystemVersion @@ -43,14 +43,18 @@ WindowState + dividerCollapsed + + eventLogLevel + -1 name ScriptWindowState positionOfDivider - 709 + 0.0 savedFrame - 1617 62 862 788 1440 -150 1680 1050 + 1578 27 862 788 1440 -150 1680 1050 selectedTabView - result + event log diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt index 193f3821804402a44c6ffb9d38944abb16919ac9..16313fe16ec1c26549a7814006037555af799240 100644 GIT binary patch literal 230240 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
uGVQ>uh8HB>NoL=k{w$i$e-2c^2%mMf8yGMz&WF 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�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 literal 220916 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⋙t^CI5$KriWT=KYn!sy4- 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
%Tnx*PbL%w$={K>&XrJ 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 diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/cmbtc_v2.2.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/cmbtc_v2.2.py deleted file mode 100644 index 764e38d3..00000000 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/cmbtc_v2.2.py +++ /dev/null @@ -1,900 +0,0 @@ -#! /usr/bin/python - -""" - -Comprehensive Mazama Book DRM with Topaz Cryptography V2.2 - ------BEGIN PUBLIC KEY----- -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBHJ4CNc6DNFCw4MRCw4SWAK6 -M8hYfnNEI0yQmn5Ti+W8biT7EatpauE/5jgQMPBmdNrDr1hbHyHBSP7xeC2qlRWC -B62UCxeu/fpfnvNHDN/wPWWH4jynZ2M6cdcnE5LQ+FfeKqZn7gnG2No1U9h7oOHx -y2/pHuYme7U1TsgSjwIDAQAB ------END PUBLIC KEY----- - -""" - -from __future__ import with_statement - -import csv -import sys -import os -import getopt -import zlib -from struct import pack -from struct import unpack -from ctypes import windll, c_char_p, c_wchar_p, c_uint, POINTER, byref, \ - create_unicode_buffer, create_string_buffer, CFUNCTYPE, addressof, \ - string_at, Structure, c_void_p, cast -import _winreg as winreg -import Tkinter -import Tkconstants -import tkMessageBox -import traceback -import hashlib - -MAX_PATH = 255 - -kernel32 = windll.kernel32 -advapi32 = windll.advapi32 -crypt32 = windll.crypt32 - -global kindleDatabase -global bookFile -global bookPayloadOffset -global bookHeaderRecords -global bookMetadata -global bookKey -global command - -# -# Various character maps used to decrypt books. Probably supposed to act as obfuscation -# - -charMap1 = "n5Pr6St7Uv8Wx9YzAb0Cd1Ef2Gh3Jk4M" -charMap2 = "AaZzB0bYyCc1XxDdW2wEeVv3FfUuG4g-TtHh5SsIiR6rJjQq7KkPpL8lOoMm9Nn_" -charMap3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" -charMap4 = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" - -# -# Exceptions for all the problems that might happen during the script -# - -class CMBDTCError(Exception): - pass - -class CMBDTCFatal(Exception): - pass - -# -# Stolen stuff -# - -class DataBlob(Structure): - _fields_ = [('cbData', c_uint), - ('pbData', c_void_p)] -DataBlob_p = POINTER(DataBlob) - -def GetSystemDirectory(): - GetSystemDirectoryW = kernel32.GetSystemDirectoryW - GetSystemDirectoryW.argtypes = [c_wchar_p, c_uint] - GetSystemDirectoryW.restype = c_uint - def GetSystemDirectory(): - buffer = create_unicode_buffer(MAX_PATH + 1) - GetSystemDirectoryW(buffer, len(buffer)) - return buffer.value - return GetSystemDirectory -GetSystemDirectory = GetSystemDirectory() - - -def GetVolumeSerialNumber(): - GetVolumeInformationW = kernel32.GetVolumeInformationW - GetVolumeInformationW.argtypes = [c_wchar_p, c_wchar_p, c_uint, - POINTER(c_uint), POINTER(c_uint), - POINTER(c_uint), c_wchar_p, c_uint] - GetVolumeInformationW.restype = c_uint - def GetVolumeSerialNumber(path): - vsn = c_uint(0) - GetVolumeInformationW(path, None, 0, byref(vsn), None, None, None, 0) - return vsn.value - return GetVolumeSerialNumber -GetVolumeSerialNumber = GetVolumeSerialNumber() - - -def GetUserName(): - GetUserNameW = advapi32.GetUserNameW - GetUserNameW.argtypes = [c_wchar_p, POINTER(c_uint)] - GetUserNameW.restype = c_uint - def GetUserName(): - buffer = create_unicode_buffer(32) - size = c_uint(len(buffer)) - while not GetUserNameW(buffer, byref(size)): - buffer = create_unicode_buffer(len(buffer) * 2) - size.value = len(buffer) - return buffer.value.encode('utf-16-le')[::2] - return GetUserName -GetUserName = GetUserName() - - -def CryptUnprotectData(): - _CryptUnprotectData = crypt32.CryptUnprotectData - _CryptUnprotectData.argtypes = [DataBlob_p, c_wchar_p, DataBlob_p, - c_void_p, c_void_p, c_uint, DataBlob_p] - _CryptUnprotectData.restype = c_uint - def CryptUnprotectData(indata, entropy): - indatab = create_string_buffer(indata) - indata = DataBlob(len(indata), cast(indatab, c_void_p)) - entropyb = create_string_buffer(entropy) - entropy = DataBlob(len(entropy), cast(entropyb, c_void_p)) - outdata = DataBlob() - if not _CryptUnprotectData(byref(indata), None, byref(entropy), - None, None, 0, byref(outdata)): - raise CMBDTCFatal("Failed to Unprotect Data") - return string_at(outdata.pbData, outdata.cbData) - return CryptUnprotectData -CryptUnprotectData = CryptUnprotectData() - -# -# Returns the MD5 digest of "message" -# - -def MD5(message): - ctx = hashlib.md5() - ctx.update(message) - return ctx.digest() - -# -# Returns the MD5 digest of "message" -# - -def SHA1(message): - ctx = hashlib.sha1() - ctx.update(message) - return ctx.digest() - -# -# Open the book file at path -# - -def openBook(path): - try: - return open(path,'rb') - except: - raise CMBDTCFatal("Could not open book file: " + path) -# -# Encode the bytes in data with the characters in map -# - -def encode(data, map): - result = "" - for char in data: - value = ord(char) - Q = (value ^ 0x80) // len(map) - R = value % len(map) - result += map[Q] - result += map[R] - return result - -# -# Hash the bytes in data and then encode the digest with the characters in map -# - -def encodeHash(data,map): - return encode(MD5(data),map) - -# -# Decode the string in data with the characters in map. Returns the decoded bytes -# - -def decode(data,map): - result = "" - for i in range (0,len(data),2): - high = map.find(data[i]) - low = map.find(data[i+1]) - value = (((high * 0x40) ^ 0x80) & 0xFF) + low - result += pack("B",value) - return result - -# -# Locate and open the Kindle.info file (Hopefully in the way it is done in the Kindle application) -# - -def openKindleInfo(): - regkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\") - path = winreg.QueryValueEx(regkey, 'Local AppData')[0] - return open(path+'\\Amazon\\Kindle For PC\\{AMAwzsaPaaZAzmZzZQzgZCAkZ3AjA_AY}\\kindle.info','r') - -# -# Parse the Kindle.info file and return the records as a list of key-values -# - -def parseKindleInfo(): - DB = {} - infoReader = openKindleInfo() - infoReader.read(1) - data = infoReader.read() - items = data.split('{') - - for item in items: - splito = item.split(':') - DB[splito[0]] =splito[1] - return DB - -# -# Find if the original string for a hashed/encoded string is known. If so return the original string othwise return an empty string. (Totally not optimal) -# - -def findNameForHash(hash): - names = ["kindle.account.tokens","kindle.cookie.item","eulaVersionAccepted","login_date","kindle.token.item","login","kindle.key.item","kindle.name.info","kindle.device.info", "MazamaRandomNumber"] - result = "" - for name in names: - if hash == encodeHash(name, charMap2): - result = name - break - return name - -# -# Print all the records from the kindle.info file (option -i) -# - -def printKindleInfo(): - for record in kindleDatabase: - name = findNameForHash(record) - if name != "" : - print (name) - print ("--------------------------\n") - else : - print ("Unknown Record") - print getKindleInfoValueForHash(record) - print "\n" -# -# Get a record from the Kindle.info file for the key "hashedKey" (already hashed and encoded). Return the decoded and decrypted record -# - -def getKindleInfoValueForHash(hashedKey): - global kindleDatabase - encryptedValue = decode(kindleDatabase[hashedKey],charMap2) - return CryptUnprotectData(encryptedValue,"") - -# -# Get a record from the Kindle.info file for the string in "key" (plaintext). Return the decoded and decrypted record -# - -def getKindleInfoValueForKey(key): - return getKindleInfoValueForHash(encodeHash(key,charMap2)) - -# -# Get a 7 bit encoded number from the book file -# - -def bookReadEncodedNumber(): - flag = False - data = ord(bookFile.read(1)) - - if data == 0xFF: - flag = True - data = ord(bookFile.read(1)) - - if data >= 0x80: - datax = (data & 0x7F) - while data >= 0x80 : - data = ord(bookFile.read(1)) - datax = (datax <<7) + (data & 0x7F) - data = datax - - if flag: - data = -data - return data - -# -# Encode a number in 7 bit format -# - -def encodeNumber(number): - result = "" - negative = False - flag = 0 - - if number < 0 : - number = -number + 1 - negative = True - - while True: - byte = number & 0x7F - number = number >> 7 - byte += flag - result += chr(byte) - flag = 0x80 - if number == 0 : - if (byte == 0xFF and negative == False) : - result += chr(0x80) - break - - if negative: - result += chr(0xFF) - - return result[::-1] - -# -# Get a length prefixed string from the file -# - -def bookReadString(): - stringLength = bookReadEncodedNumber() - return unpack(str(stringLength)+"s",bookFile.read(stringLength))[0] - -# -# Returns a length prefixed string -# - -def lengthPrefixString(data): - return encodeNumber(len(data))+data - - -# -# Read and return the data of one header record at the current book file position [[offset,compressedLength,decompressedLength],...] -# - -def bookReadHeaderRecordData(): - nbValues = bookReadEncodedNumber() - values = [] - for i in range (0,nbValues): - values.append([bookReadEncodedNumber(),bookReadEncodedNumber(),bookReadEncodedNumber()]) - return values - -# -# Read and parse one header record at the current book file position and return the associated data [[offset,compressedLength,decompressedLength],...] -# - -def parseTopazHeaderRecord(): - if ord(bookFile.read(1)) != 0x63: - raise CMBDTCFatal("Parse Error : Invalid Header") - - tag = bookReadString() - record = bookReadHeaderRecordData() - return [tag,record] - -# -# Parse the header of a Topaz file, get all the header records and the offset for the payload -# - -def parseTopazHeader(): - global bookHeaderRecords - global bookPayloadOffset - magic = unpack("4s",bookFile.read(4))[0] - - if magic != 'TPZ0': - raise CMBDTCFatal("Parse Error : Invalid Header, not a Topaz file") - - nbRecords = bookReadEncodedNumber() - bookHeaderRecords = {} - - for i in range (0,nbRecords): - result = parseTopazHeaderRecord() - bookHeaderRecords[result[0]] = result[1] - - if ord(bookFile.read(1)) != 0x64 : - raise CMBDTCFatal("Parse Error : Invalid Header") - - bookPayloadOffset = bookFile.tell() - -# -# Get a record in the book payload, given its name and index. If necessary the record is decrypted. The record is not decompressed -# - -def getBookPayloadRecord(name, index): - encrypted = False - - try: - recordOffset = bookHeaderRecords[name][index][0] - except: - raise CMBDTCFatal("Parse Error : Invalid Record, record not found") - - bookFile.seek(bookPayloadOffset + recordOffset) - - tag = bookReadString() - if tag != name : - raise CMBDTCFatal("Parse Error : Invalid Record, record name doesn't match") - - recordIndex = bookReadEncodedNumber() - - if recordIndex < 0 : - encrypted = True - recordIndex = -recordIndex -1 - - if recordIndex != index : - raise CMBDTCFatal("Parse Error : Invalid Record, index doesn't match") - - if bookHeaderRecords[name][index][2] != 0 : - record = bookFile.read(bookHeaderRecords[name][index][2]) - else: - record = bookFile.read(bookHeaderRecords[name][index][1]) - - if encrypted: - ctx = topazCryptoInit(bookKey) - record = topazCryptoDecrypt(record,ctx) - - return record - -# -# Extract, decrypt and decompress a book record indicated by name and index and print it or save it in "filename" -# - -def extractBookPayloadRecord(name, index, filename): - compressed = False - - try: - compressed = bookHeaderRecords[name][index][2] != 0 - record = getBookPayloadRecord(name,index) - except: - print("Could not find record") - - if compressed: - try: - record = zlib.decompress(record) - except: - raise CMBDTCFatal("Could not decompress record") - - if filename != "": - try: - file = open(filename,"wb") - file.write(record) - file.close() - except: - raise CMBDTCFatal("Could not write to destination file") - else: - print(record) - -# -# return next record [key,value] from the book metadata from the current book position -# - -def readMetadataRecord(): - return [bookReadString(),bookReadString()] - -# -# Parse the metadata record from the book payload and return a list of [key,values] -# - -def parseMetadata(): - global bookHeaderRecords - global bookPayloadAddress - global bookMetadata - bookMetadata = {} - bookFile.seek(bookPayloadOffset + bookHeaderRecords["metadata"][0][0]) - tag = bookReadString() - if tag != "metadata" : - raise CMBDTCFatal("Parse Error : Record Names Don't Match") - - flags = ord(bookFile.read(1)) - nbRecords = ord(bookFile.read(1)) - - for i in range (0,nbRecords) : - record =readMetadataRecord() - bookMetadata[record[0]] = record[1] - -# -# Returns two bit at offset from a bit field -# - -def getTwoBitsFromBitField(bitField,offset): - byteNumber = offset // 4 - bitPosition = 6 - 2*(offset % 4) - - return ord(bitField[byteNumber]) >> bitPosition & 3 - -# -# Returns the six bits at offset from a bit field -# - -def getSixBitsFromBitField(bitField,offset): - offset *= 3 - value = (getTwoBitsFromBitField(bitField,offset) <<4) + (getTwoBitsFromBitField(bitField,offset+1) << 2) +getTwoBitsFromBitField(bitField,offset+2) - return value - -# -# 8 bits to six bits encoding from hash to generate PID string -# - -def encodePID(hash): - global charMap3 - PID = "" - for position in range (0,8): - PID += charMap3[getSixBitsFromBitField(hash,position)] - return PID - -# -# Context initialisation for the Topaz Crypto -# - -def topazCryptoInit(key): - ctx1 = 0x0CAFFE19E - - for keyChar in key: - keyByte = ord(keyChar) - ctx2 = ctx1 - ctx1 = ((((ctx1 >>2) * (ctx1 >>7))&0xFFFFFFFF) ^ (keyByte * keyByte * 0x0F902007)& 0xFFFFFFFF ) - return [ctx1,ctx2] - -# -# decrypt data with the context prepared by topazCryptoInit() -# - -def topazCryptoDecrypt(data, ctx): - ctx1 = ctx[0] - ctx2 = ctx[1] - - plainText = "" - - for dataChar in data: - dataByte = ord(dataChar) - m = (dataByte ^ ((ctx1 >> 3) &0xFF) ^ ((ctx2<<3) & 0xFF)) &0xFF - ctx2 = ctx1 - ctx1 = (((ctx1 >> 2) * (ctx1 >> 7)) &0xFFFFFFFF) ^((m * m * 0x0F902007) &0xFFFFFFFF) - plainText += chr(m) - - return plainText - -# -# Decrypt a payload record with the PID -# - -def decryptRecord(data,PID): - ctx = topazCryptoInit(PID) - return topazCryptoDecrypt(data, ctx) - -# -# Try to decrypt a dkey record (contains the book PID) -# - -def decryptDkeyRecord(data,PID): - record = decryptRecord(data,PID) - fields = unpack("3sB8sB8s3s",record) - - if fields[0] != "PID" or fields[5] != "pid" : - raise CMBDTCError("Didn't find PID magic numbers in record") - elif fields[1] != 8 or fields[3] != 8 : - raise CMBDTCError("Record didn't contain correct length fields") - elif fields[2] != PID : - raise CMBDTCError("Record didn't contain PID") - - return fields[4] - -# -# Decrypt all the book's dkey records (contain the book PID) -# - -def decryptDkeyRecords(data,PID): - nbKeyRecords = ord(data[0]) - records = [] - data = data[1:] - for i in range (0,nbKeyRecords): - length = ord(data[0]) - try: - key = decryptDkeyRecord(data[1:length+1],PID) - records.append(key) - except CMBDTCError: - pass - data = data[1+length:] - - return records - -# -# Encryption table used to generate the device PID -# - -def generatePidEncryptionTable() : - table = [] - for counter1 in range (0,0x100): - value = counter1 - for counter2 in range (0,8): - if (value & 1 == 0) : - value = value >> 1 - else : - value = value >> 1 - value = value ^ 0xEDB88320 - table.append(value) - return table - -# -# Seed value used to generate the device PID -# - -def generatePidSeed(table,dsn) : - value = 0 - for counter in range (0,4) : - index = (ord(dsn[counter]) ^ value) &0xFF - value = (value >> 8) ^ table[index] - return value - -# -# Generate the device PID -# - -def generateDevicePID(table,dsn,nbRoll): - seed = generatePidSeed(table,dsn) - pidAscii = "" - pid = [(seed >>24) &0xFF,(seed >> 16) &0xff,(seed >> 8) &0xFF,(seed) & 0xFF,(seed>>24) & 0xFF,(seed >> 16) &0xff,(seed >> 8) &0xFF,(seed) & 0xFF] - index = 0 - - for counter in range (0,nbRoll): - pid[index] = pid[index] ^ ord(dsn[counter]) - index = (index+1) %8 - - for counter in range (0,8): - index = ((((pid[counter] >>5) & 3) ^ pid[counter]) & 0x1f) + (pid[counter] >> 7) - pidAscii += charMap4[index] - return pidAscii - -# -# Create decrypted book payload -# - -def createDecryptedPayload(payload): - - # store data to be able to create the header later - headerData= [] - currentOffset = 0 - - # Add social DRM to decrypted files - - try: - data = getKindleInfoValueForKey("kindle.name.info")+":"+ getKindleInfoValueForKey("login") - if payload!= None: - payload.write(lengthPrefixString("sdrm")) - payload.write(encodeNumber(0)) - payload.write(data) - else: - currentOffset += len(lengthPrefixString("sdrm")) - currentOffset += len(encodeNumber(0)) - currentOffset += len(data) - except: - pass - - for headerRecord in bookHeaderRecords: - name = headerRecord - newRecord = [] - - if name != "dkey" : - - for index in range (0,len(bookHeaderRecords[name])) : - offset = currentOffset - - if payload != None: - # write tag - payload.write(lengthPrefixString(name)) - # write data - payload.write(encodeNumber(index)) - payload.write(getBookPayloadRecord(name, index)) - - else : - currentOffset += len(lengthPrefixString(name)) - currentOffset += len(encodeNumber(index)) - currentOffset += len(getBookPayloadRecord(name, index)) - newRecord.append([offset,bookHeaderRecords[name][index][1],bookHeaderRecords[name][index][2]]) - - headerData.append([name,newRecord]) - - - - return headerData - -# -# Create decrypted book -# - -def createDecryptedBook(outputFile): - outputFile = open(outputFile,"wb") - # Write the payload in a temporary file - headerData = createDecryptedPayload(None) - outputFile.write("TPZ0") - outputFile.write(encodeNumber(len(headerData))) - - for header in headerData : - outputFile.write(chr(0x63)) - outputFile.write(lengthPrefixString(header[0])) - outputFile.write(encodeNumber(len(header[1]))) - for numbers in header[1] : - outputFile.write(encodeNumber(numbers[0])) - outputFile.write(encodeNumber(numbers[1])) - outputFile.write(encodeNumber(numbers[2])) - - outputFile.write(chr(0x64)) - createDecryptedPayload(outputFile) - outputFile.close() - -# -# Set the command to execute by the programm according to cmdLine parameters -# - -def setCommand(name) : - global command - if command != "" : - raise CMBDTCFatal("Invalid command line parameters") - else : - command = name - -# -# Program usage -# - -def usage(): - print("\nUsage:") - print("\nCMBDTC.py [options] bookFileName\n") - print("-p Adds a PID to the list of PIDs that are tried to decrypt the book key (can be used several times)") - print("-d Saves a decrypted copy of the book") - print("-r Prints or writes to disk a record indicated in the form name:index (e.g \"img:0\")") - print("-o Output file name to write records and decrypted books") - print("-v Verbose (can be used several times)") - print("-i Prints kindle.info database") - -# -# Main -# - -def main(argv=sys.argv): - global kindleDatabase - global bookMetadata - global bookKey - global bookFile - global command - - progname = os.path.basename(argv[0]) - - verbose = 0 - recordName = "" - recordIndex = 0 - outputFile = "" - PIDs = [] - kindleDatabase = None - command = "" - - - try: - opts, args = getopt.getopt(sys.argv[1:], "vdir:o:p:") - except getopt.GetoptError, err: - # print help information and exit: - print str(err) # will print something like "option -a not recognized" - usage() - sys.exit(2) - - if len(opts) == 0 and len(args) == 0 : - usage() - sys.exit(2) - - for o, a in opts: - if o == "-v": - verbose+=1 - if o == "-i": - setCommand("printInfo") - if o =="-o": - if a == None : - raise CMBDTCFatal("Invalid parameter for -o") - outputFile = a - if o =="-r": - setCommand("printRecord") - try: - recordName,recordIndex = a.split(':') - except: - raise CMBDTCFatal("Invalid parameter for -r") - if o =="-p": - PIDs.append(a) - if o =="-d": - setCommand("doit") - - if command == "" : - raise CMBDTCFatal("No action supplied on command line") - - # - # Read the encrypted database - # - - try: - kindleDatabase = parseKindleInfo() - except Exception, message: - if verbose>0: - print(message) - - if kindleDatabase != None : - if command == "printInfo" : - printKindleInfo() - - # - # Compute the DSN - # - - # Get the Mazama Random number - MazamaRandomNumber = getKindleInfoValueForKey("MazamaRandomNumber") - - # Get the HDD serial - encodedSystemVolumeSerialNumber = encodeHash(str(GetVolumeSerialNumber(GetSystemDirectory().split('\\')[0] + '\\')),charMap1) - - # Get the current user name - encodedUsername = encodeHash(GetUserName(),charMap1) - - # concat, hash and encode - DSN = encode(SHA1(MazamaRandomNumber+encodedSystemVolumeSerialNumber+encodedUsername),charMap1) - - if verbose >1: - print("DSN: " + DSN) - - # - # Compute the device PID - # - - table = generatePidEncryptionTable() - devicePID = generateDevicePID(table,DSN,4) - PIDs.append(devicePID) - - if verbose > 0: - print("Device PID: " + devicePID) - - # - # Open book and parse metadata - # - - if len(args) == 1: - - bookFile = openBook(args[0]) - parseTopazHeader() - parseMetadata() - - # - # Compute book PID - # - - # Get the account token - - if kindleDatabase != None: - kindleAccountToken = getKindleInfoValueForKey("kindle.account.tokens") - - if verbose >1: - print("Account Token: " + kindleAccountToken) - - keysRecord = bookMetadata["keys"] - keysRecordRecord = bookMetadata[keysRecord] - - pidHash = SHA1(DSN+kindleAccountToken+keysRecord+keysRecordRecord) - - bookPID = encodePID(pidHash) - PIDs.append(bookPID) - - if verbose > 0: - print ("Book PID: " + bookPID ) - - # - # Decrypt book key - # - - dkey = getBookPayloadRecord('dkey', 0) - - bookKeys = [] - for PID in PIDs : - bookKeys+=decryptDkeyRecords(dkey,PID) - - if len(bookKeys) == 0 : - if verbose > 0 : - print ("Book key could not be found. Maybe this book is not registered with this device.") - else : - bookKey = bookKeys[0] - if verbose > 0: - print("Book key: " + bookKey.encode('hex')) - - - - if command == "printRecord" : - extractBookPayloadRecord(recordName,int(recordIndex),outputFile) - if outputFile != "" and verbose>0 : - print("Wrote record to file: "+outputFile) - elif command == "doit" : - if outputFile!="" : - createDecryptedBook(outputFile) - if verbose >0 : - print ("Decrypted book saved. Don't pirate!") - elif verbose > 0: - print("Output file name was not supplied.") - - return 0 - -if __name__ == '__main__': - sys.exit(main()) - diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/description.rtfd/TXT.rtf b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/description.rtfd/TXT.rtf index 0f8be61c..33192eae 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/description.rtfd/TXT.rtf +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/description.rtfd/TXT.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 +{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 {\fonttbl} {\colortbl;\red255\green255\blue255;} } \ No newline at end of file diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/flatxml2html.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/flatxml2html.py index 81d93bc8..ae2c8dd8 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/flatxml2html.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/flatxml2html.py @@ -68,7 +68,7 @@ def extract(path, key): ys = [] gdefs = [] - # get path defintions, positions, dimensions for ecah glyph + # get path defintions, positions, dimensions for each glyph # that makes up the image, and find min x and min y to reposition origin minx = -1 miny = -1 @@ -305,6 +305,15 @@ def getParaDescription(self, start, end, regtype): lastGlyph = firstglyphList[last] else : lastGlyph = len(gidList) + + # handle case of white sapce paragraphs with no actual glyphs in them + # by reverting to text based paragraph + if firstGlyph >= lastGlyph: + # revert to standard text based paragraph + for wordnum in xrange(first, last): + result.append(('ocr', wordnum)) + return pclass, result + for glyphnum in xrange(firstGlyph, lastGlyph): glyphList.append(glyphnum) # include any extratokens if they exist diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/genxml.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/genxml.py deleted file mode 100644 index be542f08..00000000 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/genxml.py +++ /dev/null @@ -1,145 +0,0 @@ -#! /usr/bin/python -# vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab -# For use with Topaz Scripts Version 2.6 - -class Unbuffered: - def __init__(self, stream): - self.stream = stream - def write(self, data): - self.stream.write(data) - self.stream.flush() - def __getattr__(self, attr): - return getattr(self.stream, attr) - -import sys -sys.stdout=Unbuffered(sys.stdout) - - -import os, getopt - -# local routines -import convert2xml -import flatxml2html -import decode_meta - - -def usage(): - print 'Usage: ' - print ' ' - print ' genxml.py dict0000.dat unencryptedBookDir' - print ' ' - - - -def main(argv): - bookDir = '' - - if len(argv) == 0: - argv = sys.argv - - try: - opts, args = getopt.getopt(argv[1:], "h:") - - except getopt.GetoptError, err: - print str(err) - usage() - sys.exit(1) - - if len(opts) == 0 and len(args) == 0 : - usage() - sys.exit(1) - - for o, a in opts: - if o =="-h": - usage() - sys.exit(0) - - bookDir = args[0] - - if not os.path.exists(bookDir) : - print "Can not find directory with unencrypted book" - sys.exit(1) - - dictFile = os.path.join(bookDir,'dict0000.dat') - if not os.path.exists(dictFile) : - print "Can not find dict0000.dat file" - sys.exit(1) - - pageDir = os.path.join(bookDir,'page') - if not os.path.exists(pageDir) : - print "Can not find page directory in unencrypted book" - sys.exit(1) - - glyphsDir = os.path.join(bookDir,'glyphs') - if not os.path.exists(glyphsDir) : - print "Can not find glyphs directory in unencrypted book" - sys.exit(1) - - otherFile = os.path.join(bookDir,'other0000.dat') - if not os.path.exists(otherFile) : - print "Can not find other0000.dat in unencrypted book" - sys.exit(1) - - metaFile = os.path.join(bookDir,'metadata0000.dat') - if not os.path.exists(metaFile) : - print "Can not find metadata0000.dat in unencrypted book" - sys.exit(1) - - xmlDir = os.path.join(bookDir,'xml') - if not os.path.exists(xmlDir): - os.makedirs(xmlDir) - - - print 'Processing ... ' - - print ' ', 'metadata0000.dat' - fname = os.path.join(bookDir,'metadata0000.dat') - xname = os.path.join(xmlDir, 'metadata.txt') - metastr = decode_meta.getMetaData(fname) - file(xname, 'wb').write(metastr) - - print ' ', 'other0000.dat' - fname = os.path.join(bookDir,'other0000.dat') - xname = os.path.join(xmlDir, 'stylesheet.xml') - pargv=[] - pargv.append('convert2xml.py') - pargv.append(dictFile) - pargv.append(fname) - xmlstr = convert2xml.main(pargv) - file(xname, 'wb').write(xmlstr) - - filenames = os.listdir(pageDir) - filenames = sorted(filenames) - - for filename in filenames: - print ' ', filename - fname = os.path.join(pageDir,filename) - xname = os.path.join(xmlDir, filename.replace('.dat','.xml')) - pargv=[] - pargv.append('convert2xml.py') - pargv.append(dictFile) - pargv.append(fname) - xmlstr = convert2xml.main(pargv) - file(xname, 'wb').write(xmlstr) - - filenames = os.listdir(glyphsDir) - filenames = sorted(filenames) - - for filename in filenames: - print ' ', filename - fname = os.path.join(glyphsDir,filename) - xname = os.path.join(xmlDir, filename.replace('.dat','.xml')) - pargv=[] - pargv.append('convert2xml.py') - pargv.append(dictFile) - pargv.append(fname) - xmlstr = convert2xml.main(pargv) - file(xname, 'wb').write(xmlstr) - - - print 'Processing Complete' - - return 0 - -if __name__ == '__main__': - sys.exit(main('')) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignobleepub.pyw b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignobleepub.py similarity index 98% rename from DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignobleepub.pyw rename to DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignobleepub.py index 0afc2bc5..a7c48c96 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignobleepub.pyw +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignobleepub.py @@ -1,6 +1,8 @@ #! /usr/bin/python -# ignobleepub.pyw, version 3.3 +from __future__ import with_statement + +# ignobleepub.pyw, version 3.4 # To run this program install Python 2.6 from # and OpenSSL or PyCrypto from http://www.voidspace.org.uk/python/modules.shtml#pycrypto @@ -14,10 +16,9 @@ # 3.1 - Allow Windows versions of libcrypto to be found # 3.2 - add support for encoding to 'utf-8' when building up list of files to cecrypt from encryption.xml # 3.3 - On Windows try PyCrypto first and OpenSSL next +# 3.4 - Modify interace to allow use with import -from __future__ import with_statement - __license__ = 'GPL v3' import sys @@ -170,49 +171,6 @@ def decrypt(self, path, data): return data - -def cli_main(argv=sys.argv): - progname = os.path.basename(argv[0]) - if AES is None: - print "%s: This script requires OpenSSL or PyCrypto, which must be installed " \ - "separately. Read the top-of-script comment for details." % \ - (progname,) - return 1 - if len(argv) != 4: - print "usage: %s KEYFILE INBOOK OUTBOOK" % (progname,) - return 1 - keypath, inpath, outpath = argv[1:] - with open(keypath, 'rb') as f: - keyb64 = f.read() - key = keyb64.decode('base64')[:16] - # aes = AES.new(key, AES.MODE_CBC) - aes = AES(key) - - with closing(ZipFile(open(inpath, 'rb'))) as inf: - namelist = set(inf.namelist()) - if 'META-INF/rights.xml' not in namelist or \ - 'META-INF/encryption.xml' not in namelist: - raise IGNOBLEError('%s: not an B&N ADEPT EPUB' % (inpath,)) - for name in META_NAMES: - namelist.remove(name) - rights = etree.fromstring(inf.read('META-INF/rights.xml')) - adept = lambda tag: '{%s}%s' % (NSMAP['adept'], tag) - expr = './/%s' % (adept('encryptedKey'),) - bookkey = ''.join(rights.findtext(expr)) - bookkey = aes.decrypt(bookkey.decode('base64')) - bookkey = bookkey[:-ord(bookkey[-1])] - encryption = inf.read('META-INF/encryption.xml') - decryptor = Decryptor(bookkey[-16:], encryption) - kwds = dict(compression=ZIP_DEFLATED, allowZip64=False) - with closing(ZipFile(open(outpath, 'wb'), 'w', **kwds)) as outf: - zi = ZipInfo('mimetype', compress_type=ZIP_STORED) - outf.writestr(zi, inf.read('mimetype')) - for path in namelist: - data = inf.read(path) - outf.writestr(path, decryptor.decrypt(path, data)) - return 0 - - class DecryptionDialog(Tkinter.Frame): def __init__(self, root): Tkinter.Frame.__init__(self, root, border=5) @@ -308,6 +266,53 @@ def decrypt(self): return self.status['text'] = 'File successfully decrypted' + +def decryptBook(keypath, inpath, outpath): + with open(keypath, 'rb') as f: + keyb64 = f.read() + key = keyb64.decode('base64')[:16] + # aes = AES.new(key, AES.MODE_CBC) + aes = AES(key) + + with closing(ZipFile(open(inpath, 'rb'))) as inf: + namelist = set(inf.namelist()) + if 'META-INF/rights.xml' not in namelist or \ + 'META-INF/encryption.xml' not in namelist: + raise IGNOBLEError('%s: not an B&N ADEPT EPUB' % (inpath,)) + for name in META_NAMES: + namelist.remove(name) + rights = etree.fromstring(inf.read('META-INF/rights.xml')) + adept = lambda tag: '{%s}%s' % (NSMAP['adept'], tag) + expr = './/%s' % (adept('encryptedKey'),) + bookkey = ''.join(rights.findtext(expr)) + bookkey = aes.decrypt(bookkey.decode('base64')) + bookkey = bookkey[:-ord(bookkey[-1])] + encryption = inf.read('META-INF/encryption.xml') + decryptor = Decryptor(bookkey[-16:], encryption) + kwds = dict(compression=ZIP_DEFLATED, allowZip64=False) + with closing(ZipFile(open(outpath, 'wb'), 'w', **kwds)) as outf: + zi = ZipInfo('mimetype', compress_type=ZIP_STORED) + outf.writestr(zi, inf.read('mimetype')) + for path in namelist: + data = inf.read(path) + outf.writestr(path, decryptor.decrypt(path, data)) + return 0 + + +def cli_main(argv=sys.argv): + progname = os.path.basename(argv[0]) + if AES is None: + print "%s: This script requires OpenSSL or PyCrypto, which must be installed " \ + "separately. Read the top-of-script comment for details." % \ + (progname,) + return 1 + if len(argv) != 4: + print "usage: %s KEYFILE INBOOK OUTBOOK" % (progname,) + return 1 + keypath, inpath, outpath = argv[1:] + return decryptBook(keypath, inpath, outpath) + + def gui_main(): root = Tkinter.Tk() if AES is None: @@ -324,6 +329,7 @@ def gui_main(): root.mainloop() return 0 + if __name__ == '__main__': if len(sys.argv) > 1: sys.exit(cli_main()) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignoblekeygen.pyw b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignoblekeygen.py similarity index 98% rename from DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignoblekeygen.pyw rename to DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignoblekeygen.py index b2607ea5..cdedc48b 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignoblekeygen.pyw +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ignoblekeygen.py @@ -1,6 +1,8 @@ #! /usr/bin/python -# ignoblekeygen.pyw, version 2.2 +from __future__ import with_statement + +# ignoblekeygen.pyw, version 2.3 # To run this program install Python 2.6 from # and OpenSSL or PyCrypto from http://www.voidspace.org.uk/python/modules.shtml#pycrypto @@ -12,12 +14,12 @@ # 2 - Add OS X support by using OpenSSL when available (taken/modified from ineptepub v5) # 2.1 - Allow Windows versions of libcrypto to be found # 2.2 - On Windows try PyCrypto first and then OpenSSL next +# 2.3 - Modify interface to allow use of import + """ Generate Barnes & Noble EPUB user key from name and credit card number. """ -from __future__ import with_statement - __license__ = 'GPL v3' import sys @@ -120,6 +122,7 @@ def _load_crypto(): def normalize_name(name): return ''.join(x for x in name.lower() if x != ' ') + def generate_keyfile(name, ccn, outpath): name = normalize_name(name) + '\x00' ccn = ccn + '\x00' @@ -133,19 +136,6 @@ def generate_keyfile(name, ccn, outpath): f.write(userkey.encode('base64')) return userkey -def cli_main(argv=sys.argv): - progname = os.path.basename(argv[0]) - if AES is None: - print "%s: This script requires OpenSSL or PyCrypto, which must be installed " \ - "separately. Read the top-of-script comment for details." % \ - (progname,) - return 1 - if len(argv) != 4: - print "usage: %s NAME CC# OUTFILE" % (progname,) - return 1 - name, ccn, outpath = argv[1:] - generate_keyfile(name, ccn, outpath) - return 0 class DecryptionDialog(Tkinter.Frame): def __init__(self, root): @@ -211,6 +201,22 @@ def generate(self): return self.status['text'] = 'Keyfile successfully generated' + +def cli_main(argv=sys.argv): + progname = os.path.basename(argv[0]) + if AES is None: + print "%s: This script requires OpenSSL or PyCrypto, which must be installed " \ + "separately. Read the top-of-script comment for details." % \ + (progname,) + return 1 + if len(argv) != 4: + print "usage: %s NAME CC# OUTFILE" % (progname,) + return 1 + name, ccn, outpath = argv[1:] + generate_keyfile(name, ccn, outpath) + return 0 + + def gui_main(): root = Tkinter.Tk() if AES is None: diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.pyw b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py similarity index 98% rename from DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.pyw rename to DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py index 9d95720c..48a75f99 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.pyw +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptepub.py @@ -1,7 +1,9 @@ #! /usr/bin/python # -*- coding: utf-8 -*- -# ineptepub.pyw, version 5.5 +from __future__ import with_statement + +# ineptepub.pyw, version 5.6 # Copyright © 2009-2010 i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 or @@ -27,13 +29,11 @@ # 5.3 - add support for OpenSSL on Windows, fix bug with some versions of libcrypto 0.9.8 prior to path level o # 5.4 - add support for encoding to 'utf-8' when building up list of files to decrypt from encryption.xml # 5.5 - On Windows try PyCrypto first, OpenSSL next - +# 5.6 - Modify interface to allow use with import """ Decrypt Adobe ADEPT-encrypted EPUB books. """ -from __future__ import with_statement - __license__ = 'GPL v3' import sys @@ -312,45 +312,6 @@ def decrypt(self, path, data): data = self.decompress(data) return data -def cli_main(argv=sys.argv): - progname = os.path.basename(argv[0]) - if AES is None: - print "%s: This script requires OpenSSL or PyCrypto, which must be" \ - " installed separately. Read the top-of-script comment for" \ - " details." % (progname,) - return 1 - if len(argv) != 4: - print "usage: %s KEYFILE INBOOK OUTBOOK" % (progname,) - return 1 - keypath, inpath, outpath = argv[1:] - with open(keypath, 'rb') as f: - keyder = f.read() - rsa = RSA(keyder) - with closing(ZipFile(open(inpath, 'rb'))) as inf: - namelist = set(inf.namelist()) - if 'META-INF/rights.xml' not in namelist or \ - 'META-INF/encryption.xml' not in namelist: - raise ADEPTError('%s: not an ADEPT EPUB' % (inpath,)) - for name in META_NAMES: - namelist.remove(name) - rights = etree.fromstring(inf.read('META-INF/rights.xml')) - adept = lambda tag: '{%s}%s' % (NSMAP['adept'], tag) - expr = './/%s' % (adept('encryptedKey'),) - bookkey = ''.join(rights.findtext(expr)) - bookkey = rsa.decrypt(bookkey.decode('base64')) - # Padded as per RSAES-PKCS1-v1_5 - if bookkey[-17] != '\x00': - raise ADEPTError('problem decrypting session key') - encryption = inf.read('META-INF/encryption.xml') - decryptor = Decryptor(bookkey[-16:], encryption) - kwds = dict(compression=ZIP_DEFLATED, allowZip64=False) - with closing(ZipFile(open(outpath, 'wb'), 'w', **kwds)) as outf: - zi = ZipInfo('mimetype', compress_type=ZIP_STORED) - outf.writestr(zi, inf.read('mimetype')) - for path in namelist: - data = inf.read(path) - outf.writestr(path, decryptor.decrypt(path, data)) - return 0 class DecryptionDialog(Tkinter.Frame): def __init__(self, root): @@ -446,6 +407,52 @@ def decrypt(self): return self.status['text'] = 'File successfully decrypted' + +def decryptBook(keypath, inpath, outpath): + with open(keypath, 'rb') as f: + keyder = f.read() + rsa = RSA(keyder) + with closing(ZipFile(open(inpath, 'rb'))) as inf: + namelist = set(inf.namelist()) + if 'META-INF/rights.xml' not in namelist or \ + 'META-INF/encryption.xml' not in namelist: + raise ADEPTError('%s: not an ADEPT EPUB' % (inpath,)) + for name in META_NAMES: + namelist.remove(name) + rights = etree.fromstring(inf.read('META-INF/rights.xml')) + adept = lambda tag: '{%s}%s' % (NSMAP['adept'], tag) + expr = './/%s' % (adept('encryptedKey'),) + bookkey = ''.join(rights.findtext(expr)) + bookkey = rsa.decrypt(bookkey.decode('base64')) + # Padded as per RSAES-PKCS1-v1_5 + if bookkey[-17] != '\x00': + raise ADEPTError('problem decrypting session key') + encryption = inf.read('META-INF/encryption.xml') + decryptor = Decryptor(bookkey[-16:], encryption) + kwds = dict(compression=ZIP_DEFLATED, allowZip64=False) + with closing(ZipFile(open(outpath, 'wb'), 'w', **kwds)) as outf: + zi = ZipInfo('mimetype', compress_type=ZIP_STORED) + outf.writestr(zi, inf.read('mimetype')) + for path in namelist: + data = inf.read(path) + outf.writestr(path, decryptor.decrypt(path, data)) + return 0 + + +def cli_main(argv=sys.argv): + progname = os.path.basename(argv[0]) + if AES is None: + print "%s: This script requires OpenSSL or PyCrypto, which must be" \ + " installed separately. Read the top-of-script comment for" \ + " details." % (progname,) + return 1 + if len(argv) != 4: + print "usage: %s KEYFILE INBOOK OUTBOOK" % (progname,) + return 1 + keypath, inpath, outpath = argv[1:] + return decryptBook(keypath, inpath, outpath) + + def gui_main(): root = Tkinter.Tk() if AES is None: diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptkey.pyw b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptkey.py similarity index 99% rename from DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptkey.pyw rename to DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptkey.py index fd90508f..8eab14fb 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptkey.pyw +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptkey.py @@ -1,7 +1,9 @@ #! /usr/bin/python # -*- coding: utf-8 -*- -# ineptkey.pyw, version 5.3 +from __future__ import with_statement + +# ineptkey.pyw, version 5.4 # Copyright © 2009-2010 i♥cabbages # Released under the terms of the GNU General Public Licence, version 3 or @@ -33,13 +35,12 @@ # 5.1 - add support for using OpenSSL on Windows in place of PyCrypto # 5.2 - added support for output of key to a particular file # 5.3 - On Windows try PyCrypto first, OpenSSL next +# 5.4 - Modify interface to allow use of import """ Retrieve Adobe ADEPT user key. """ -from __future__ import with_statement - __license__ = 'GPL v3' import sys @@ -415,10 +416,11 @@ def __init__(self, root, text): label.pack(fill=Tkconstants.X, expand=0) self.text = Tkinter.Text(self) self.text.pack(fill=Tkconstants.BOTH, expand=1) + self.text.insert(Tkconstants.END, text) -def cli_main(argv=sys.argv): - keypath = argv[1] + +def extractKeyfile(keypath): try: success = retrieve_key(keypath) except ADEPTError, e: @@ -431,6 +433,12 @@ def cli_main(argv=sys.argv): return 1 return 0 + +def cli_main(argv=sys.argv): + keypath = argv[1] + return extractKeyfile(keypath) + + def main(argv=sys.argv): root = Tkinter.Tk() root.withdraw() diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.pyw b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py similarity index 99% rename from DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.pyw rename to DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py index d73e069f..ccdd9e4f 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.pyw +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/ineptpdf.py @@ -1,6 +1,8 @@ #! /usr/bin/env python # ineptpdf.pyw, version 7.7 +from __future__ import with_statement + # To run this program install Python 2.6 from http://www.python.org/download/ # and OpenSSL (already installed on Mac OS X and Linux) OR # PyCrypto from http://www.voidspace.org.uk/python/modules.shtml#pycrypto @@ -30,13 +32,12 @@ # fixed minor typos # 7.6 - backported AES and other fixes from version 8.4.48 # 7.7 - On Windows try PyCrypto first and OpenSSL next +# 7.8 - Modify interface to allow use of import """ Decrypts Adobe ADEPT-encrypted PDF files. """ -from __future__ import with_statement - __license__ = 'GPL v3' import sys @@ -2076,25 +2077,6 @@ def serialize_indirect(self, objid, obj): self.write('\n') self.write('endobj\n') -def cli_main(argv=sys.argv): - progname = os.path.basename(argv[0]) - if RSA is None: - print "%s: This script requires OpenSSL or PyCrypto, which must be installed " \ - "separately. Read the top-of-script comment for details." % \ - (progname,) - return 1 - if len(argv) != 4: - print "usage: %s KEYFILE INBOOK OUTBOOK" % (progname,) - return 1 - keypath, inpath, outpath = argv[1:] - with open(inpath, 'rb') as inf: - serializer = PDFSerializer(inf, keypath) - # 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 - serializer.dump(outf) - return 0 - class DecryptionDialog(Tkinter.Frame): def __init__(self, root): @@ -2198,6 +2180,31 @@ def decrypt(self): 'Close this window or decrypt another pdf file.' return + +def decryptBook(keypath, inpath, outpath): + with open(inpath, 'rb') as inf: + serializer = PDFSerializer(inf, keypath) + # 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 + serializer.dump(outf) + return 0 + + +def cli_main(argv=sys.argv): + progname = os.path.basename(argv[0]) + if RSA is None: + print "%s: This script requires OpenSSL or PyCrypto, which must be installed " \ + "separately. Read the top-of-script comment for details." % \ + (progname,) + return 1 + if len(argv) != 4: + print "usage: %s KEYFILE INBOOK OUTBOOK" % (progname,) + return 1 + keypath, inpath, outpath = argv[1:] + return decryptBook(keypath, inpath, outpath) + + def gui_main(): root = Tkinter.Tk() if RSA is None: diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mobidedrm.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mobidedrm.py index 7088c062..776ca6e2 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mobidedrm.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mobidedrm.py @@ -29,7 +29,7 @@ # and import that ZIP into Calibre using its plugin configuration GUI. -__version__ = '2.1' +__version__ = '2.2' class Unbuffered: def __init__(self, stream): @@ -75,21 +75,23 @@ def zipUpDir(myzip, tempdir,localname): # borrowed from calibre from calibre/src/calibre/__init__.py # added in removal of non-printing chars # and removal of . at start +# convert spaces to underscores def cleanup_name(name): - _filename_sanitize = re.compile(r'[\xae\0\\|\?\*<":>\+/]') - substitute='_' - one = ''.join(char for char in name if char in string.printable) - one = _filename_sanitize.sub(substitute, one) - one = re.sub(r'\s', ' ', one).strip() - one = re.sub(r'^\.+$', '_', one) - one = one.replace('..', substitute) - # Windows doesn't like path components that end with a period - if one.endswith('.'): - one = one[:-1]+substitute - # Mac and Unix don't like file names that begin with a full stop - if len(one) > 0 and one[0] == '.': - one = substitute+one[1:] - return one + _filename_sanitize = re.compile(r'[\xae\0\\|\?\*<":>\+/]') + substitute='_' + one = ''.join(char for char in name if char in string.printable) + one = _filename_sanitize.sub(substitute, one) + one = re.sub(r'\s', ' ', one).strip() + one = re.sub(r'^\.+$', '_', one) + one = one.replace('..', substitute) + # Windows doesn't like path components that end with a period + if one.endswith('.'): + one = one[:-1]+substitute + # Mac and Unix don't like file names that begin with a full stop + if len(one) > 0 and one[0] == '.': + one = substitute+one[1:] + one = one.replace(' ','_') + return one def decryptBook(infile, outdir, k4, kInfoFiles, serials, pids): import mobidedrm @@ -119,7 +121,7 @@ def decryptBook(infile, outdir, k4, kInfoFiles, serials, pids): filenametitle = cleanup_name(title) outfilename = bookname if len(bookname)>4 and len(filenametitle)>4 and bookname[:4] != filenametitle[:4]: - outfilename = outfilename + "_"+filenametitle + outfilename = outfilename + "_" + filenametitle # build pid list md1, md2 = mb.getPIDMetaInfo() @@ -134,15 +136,17 @@ def decryptBook(infile, outdir, k4, kInfoFiles, serials, pids): except mobidedrm.DrmException, e: print "Error: " + str(e) + "\nDRM Removal Failed.\n" return 1 - except topazextract.TpzDRMError, e: - print str(e) - print " Creating DeBug Full Zip Archive of Book" - zipname = os.path.join(outdir, bookname + '_debug' + '.zip') - myzip = zipfile.ZipFile(zipname,'w',zipfile.ZIP_DEFLATED, False) - zipUpDir(myzip, tempdir, '') - myzip.close() - shutil.rmtree(tempdir, True) - return 1 + except Exception, e: + if not mobi: + print "Error: " + str(e) + "\nDRM Removal Failed.\n" + print " Creating DeBug Full Zip Archive of Book" + zipname = os.path.join(outdir, bookname + '_debug' + '.zip') + myzip = zipfile.ZipFile(zipname,'w',zipfile.ZIP_DEFLATED, False) + zipUpDir(myzip, tempdir, '') + myzip.close() + shutil.rmtree(tempdir, True) + return 1 + pass if mobi: outfile = os.path.join(outdir,outfilename + '_nodrm' + '.mobi') @@ -198,7 +202,7 @@ def main(argv=sys.argv): pids = [] print ('K4MobiDeDrm v%(__version__)s ' - 'provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc .' % globals()) + 'provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc .' % globals()) print ' ' try: @@ -246,7 +250,7 @@ class K4DeDRM(FileTypePlugin): 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, 1) # The version number of this plugin + version = (0, 2, 2) # 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 @@ -272,15 +276,15 @@ def run(self, path_to_ebook): for customvalue in customvalues: customvalue = str(customvalue) customvalue = customvalue.strip() - if len(customvalue) == 10 or len(customvalue) == 8: + if len(customvalue) == 10 or len(customvalue) == 8: pids.append(customvalue) - else : + else : if len(customvalue) == 16 and customvalue[0] == 'B': serials.append(customvalue) else: print "%s is not a valid Kindle serial number or PID." % str(customvalue) - - # Load any kindle info files (*.info) included Calibre's config directory. + + # Load any kindle info files (*.info) included Calibre's config directory. try: # Find Calibre's configuration directory. confpath = os.path.split(os.path.split(self.plugin_path)[0])[0] @@ -288,7 +292,7 @@ def run(self, path_to_ebook): files = os.listdir(confpath) filefilter = re.compile("\.info$", re.IGNORECASE) files = filter(filefilter.search, files) - + if files: for filename in files: fpath = os.path.join(confpath, filename) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mutils.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mutils.py index 1b501ba4..5e57701c 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mutils.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/k4mutils.py @@ -189,6 +189,6 @@ def openKindleInfo(kInfoFile=None): raise DrmException('Error: .kindle-info file can not be found') return open(kinfopath,'r') else: - if not os.path.isfile(kinfoFile): + if not os.path.isfile(kInfoFile): raise DrmException('Error: kindle-info file can not be found') return open(kInfoFile, 'r') diff --git a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/DeDRM_app.pyw b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/DeDRM_app.pyw index d3d6bdaf..a3196311 100644 --- a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/DeDRM_app.pyw +++ b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/DeDRM_app.pyw @@ -2,8 +2,8 @@ # vim:ts=4:sw=4:softtabstop=4:smarttab:expandtab import sys -sys.path.append('lib') import os, os.path +sys.path.append(sys.path[0]+os.sep+'lib') import shutil import Tkinter from Tkinter import * @@ -22,10 +22,11 @@ class DrmException(Exception): pass class MainApp(Tk): - def __init__(self, dnd=False, filenames=[]): + def __init__(self, apphome, dnd=False, filenames=[]): Tk.__init__(self) self.withdraw() self.dnd = dnd + self.apphome = apphome # preference settings # [dictionary key, file in preferences directory where info is stored] description = [ ['pids' , 'pidlist.txt' ], @@ -312,6 +313,7 @@ class ConvDialog(Toplevel): self.protocol("WM_DELETE_WINDOW", self.withdraw) self.title("DeDRM Processing") self.master = master + self.apphome = self.master.apphome self.prefs_array = prefs_array self.filenames = filenames self.interval = 50 @@ -328,11 +330,11 @@ class ConvDialog(Toplevel): body.grid_columnconfigure(1, weight=2) Tkinter.Label(body, text='Activity Bar').grid(row=0, sticky=Tkconstants.E) - self.bar = ActivityBar(body, length=50, height=15, barwidth=5) + self.bar = ActivityBar(body, length=80, height=15, barwidth=5) self.bar.grid(row=0, column=1, sticky=sticky) msg1 = '' - self.stext = ScrolledText(body, bd=5, relief=Tkconstants.RIDGE, height=4, width=50, wrap=Tkconstants.WORD) + self.stext = ScrolledText(body, bd=5, relief=Tkconstants.RIDGE, height=4, width=80, wrap=Tkconstants.WORD) self.stext.grid(row=2, column=0, columnspan=2,sticky=sticky) self.stext.insert(Tkconstants.END,msg1) @@ -435,7 +437,6 @@ class ConvDialog(Toplevel): if poll != 0: msg = 'Failed\n' text = self.p2.read() - text = self.p2.read() text += self.p2.readerr() msg += text msg += '\n' @@ -451,42 +452,43 @@ class ConvDialog(Toplevel): return def decrypt_ebook(self, infile, outdir, rscpath): + apphome = self.apphome rv = 1 name, ext = os.path.splitext(os.path.basename(infile)) ext = ext.lower() if ext == '.epub': outfile = os.path.join(outdir, name + '_nodrm.epub') - self.p2 = processEPUB(infile, outfile, rscpath) + self.p2 = processEPUB(apphome, infile, outfile, rscpath) return 0 if ext == '.pdb': - self.p2 = processPDB(infile, outdir, rscpath) + self.p2 = processPDB(apphome, infile, outdir, rscpath) return 0 if ext in ['.azw', '.azw1', '.prc', '.mobi', '.tpz']: - self.p2 = processK4MOBI(infile, outdir, rscpath) + self.p2 = processK4MOBI(apphome, infile, outdir, rscpath) return 0 if ext == '.pdf': outfile = os.path.join(outdir, name + '_nodrm.pdf') - self.p2 = processPDF(infile, outfile, rscpath) + self.p2 = processPDF(apphome, infile, outfile, rscpath) return 0 return rv # run as a subprocess via pipes and collect stdout, stderr, and return value -def runit(ncmd, nparms): - cmdline = 'python ' + ncmd +def runit(apphome, ncmd, nparms): + cmdline = 'python ' + '"' + os.path.join(apphome, ncmd) + '" ' if sys.platform.startswith('win'): search_path = os.environ['PATH'] search_path = search_path.lower() if search_path.find('python') < 0: # if no python hope that win registry finds what is associated with py extension - cmdline = ncmd + cmdline = '"' + os.path.join(apphome, ncmd) + '" ' cmdline += nparms cmdline = cmdline.encode(sys.getfilesystemencoding()) p2 = subasyncio.Process(cmdline, shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=False) return p2 -def processK4MOBI(infile, outdir, rscpath): - cmd = '"' + os.path.join('lib','k4mobidedrm.py') + '" ' +def processK4MOBI(apphome, infile, outdir, rscpath): + cmd = os.path.join('lib','k4mobidedrm.py') parms = '' pidnums = '' pidspath = os.path.join(rscpath,'pidlist.txt') @@ -511,30 +513,33 @@ def processK4MOBI(infile, outdir, rscpath): dpath = os.path.join(rscpath,filename) parms += '-k "' + dpath + '" ' parms += '"' + infile +'" "' + outdir + '"' - p2 = runit(cmd, parms) + p2 = runit(apphome, cmd, parms) return p2 -def processPDF(infile, outfile, rscpath): - cmd = '"' + os.path.join('lib','decryptpdf.py') + '" ' +def processPDF(apphome, infile, outfile, rscpath): + cmd = os.path.join('lib','decryptpdf.py') parms = '"' + infile + '" "' + outfile + '" "' + rscpath + '"' - p2 = runit(cmd, parms) + p2 = runit(apphome, cmd, parms) return p2 -def processEPUB(infile, outfile, rscpath): +def processEPUB(apphome, infile, outfile, rscpath): # invoke routine to check both Adept and Barnes and Noble - cmd = '"' + os.path.join('lib','decryptepub.py') + '" ' + cmd = os.path.join('lib','decryptepub.py') parms = '"' + infile + '" "' + outfile + '" "' + rscpath + '"' - p2 = runit(cmd, parms) + p2 = runit(apphome, cmd, parms) return p2 -def processPDB(infile, outdir, rscpath): - cmd = '"' + os.path.join('lib','decryptpdb.py') + '" ' +def processPDB(apphome, infile, outdir, rscpath): + cmd = os.path.join('lib','decryptpdb.py') parms = '"' + infile + '" "' + outdir + '" "' + rscpath + '"' - p2 = runit(cmd, parms) + p2 = runit(apphome, cmd, parms) return p2 def main(argv=sys.argv): + apphome = os.path.dirname(sys.argv[0]) + apphome = os.path.abspath(apphome) + # windows may pass a spurious quoted null string as argv[1] from bat file # simply work around this until we can figure out a better way to handle things if len(argv) == 2: @@ -571,7 +576,7 @@ def main(argv=sys.argv): filenames.append(infile) # start up gui app - app = MainApp(dnd, filenames) + app = MainApp(apphome, dnd, filenames) app.mainloop() return 0 diff --git a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/flatxml2html.py b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/flatxml2html.py index 81d93bc8..ae2c8dd8 100644 --- a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/flatxml2html.py +++ b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/flatxml2html.py @@ -68,7 +68,7 @@ def extract(path, key): ys = [] gdefs = [] - # get path defintions, positions, dimensions for ecah glyph + # get path defintions, positions, dimensions for each glyph # that makes up the image, and find min x and min y to reposition origin minx = -1 miny = -1 @@ -305,6 +305,15 @@ def getParaDescription(self, start, end, regtype): lastGlyph = firstglyphList[last] else : lastGlyph = len(gidList) + + # handle case of white sapce paragraphs with no actual glyphs in them + # by reverting to text based paragraph + if firstGlyph >= lastGlyph: + # revert to standard text based paragraph + for wordnum in xrange(first, last): + result.append(('ocr', wordnum)) + return pclass, result + for glyphnum in xrange(firstGlyph, lastGlyph): glyphList.append(glyphnum) # include any extratokens if they exist diff --git a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py index 880690f2..776ca6e2 100644 --- a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py +++ b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py @@ -29,7 +29,7 @@ # and import that ZIP into Calibre using its plugin configuration GUI. -__version__ = '2.1' +__version__ = '2.2' class Unbuffered: def __init__(self, stream): @@ -75,6 +75,7 @@ def zipUpDir(myzip, tempdir,localname): # borrowed from calibre from calibre/src/calibre/__init__.py # added in removal of non-printing chars # and removal of . at start +# convert spaces to underscores def cleanup_name(name): _filename_sanitize = re.compile(r'[\xae\0\\|\?\*<":>\+/]') substitute='_' @@ -89,6 +90,7 @@ def cleanup_name(name): # Mac and Unix don't like file names that begin with a full stop if len(one) > 0 and one[0] == '.': one = substitute+one[1:] + one = one.replace(' ','_') return one def decryptBook(infile, outdir, k4, kInfoFiles, serials, pids): @@ -248,7 +250,7 @@ class K4DeDRM(FileTypePlugin): 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, 1) # The version number of this plugin + version = (0, 2, 2) # 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 diff --git a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mutils.py b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mutils.py index 1b501ba4..5e57701c 100644 --- a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mutils.py +++ b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mutils.py @@ -189,6 +189,6 @@ def openKindleInfo(kInfoFile=None): raise DrmException('Error: .kindle-info file can not be found') return open(kinfopath,'r') else: - if not os.path.isfile(kinfoFile): + if not os.path.isfile(kInfoFile): raise DrmException('Error: kindle-info file can not be found') return open(kInfoFile, 'r') diff --git a/DeDRM_Windows_Application/ReadMe_DeDRM_WinApp.txt b/DeDRM_Windows_Application/ReadMe_DeDRM_WinApp.txt index 8e1cfea5..73c13b0f 100644 --- a/DeDRM_Windows_Application/ReadMe_DeDRM_WinApp.txt +++ b/DeDRM_Windows_Application/ReadMe_DeDRM_WinApp.txt @@ -1,5 +1,5 @@ -ReadMe_DeDRM_WinApp_v1.2 ------------------------ +ReadMe_DeDRM_WinApp_v1.3 +------------------------ DeDRM_WinApp is a pure python drag and drop application that allows users to drag and drop ebooks or folders of ebooks onto theDeDRM_Drop_Target to have the DRM removed. It repackages the"tools" python software in one easy to use program. diff --git a/KindleBooks_Tools/KindleBooks/KindleBooks.pyw b/KindleBooks_Tools/KindleBooks/KindleBooks.pyw index d4f37fb4..63ef77d7 100644 --- a/KindleBooks_Tools/KindleBooks/KindleBooks.pyw +++ b/KindleBooks_Tools/KindleBooks/KindleBooks.pyw @@ -207,11 +207,11 @@ class MainDialog(Tkinter.Frame): tpz = False # Identify any Topaz Files - with open(mobipath, 'rb') as f: - raw = f.read(3) - if raw.startswith('TPZ'): - tpz = True - f.close() + f = file(mobipath, 'rb') + raw = f.read(3) + if raw.startswith('TPZ'): + tpz = True + f.close() if not outpath: self.status['text'] = 'No output directory specified' self.sbotton.configure(state='normal') diff --git a/KindleBooks_Tools/KindleBooks/lib/flatxml2html.py b/KindleBooks_Tools/KindleBooks/lib/flatxml2html.py index 81d93bc8..ae2c8dd8 100644 --- a/KindleBooks_Tools/KindleBooks/lib/flatxml2html.py +++ b/KindleBooks_Tools/KindleBooks/lib/flatxml2html.py @@ -68,7 +68,7 @@ def extract(path, key): ys = [] gdefs = [] - # get path defintions, positions, dimensions for ecah glyph + # get path defintions, positions, dimensions for each glyph # that makes up the image, and find min x and min y to reposition origin minx = -1 miny = -1 @@ -305,6 +305,15 @@ def getParaDescription(self, start, end, regtype): lastGlyph = firstglyphList[last] else : lastGlyph = len(gidList) + + # handle case of white sapce paragraphs with no actual glyphs in them + # by reverting to text based paragraph + if firstGlyph >= lastGlyph: + # revert to standard text based paragraph + for wordnum in xrange(first, last): + result.append(('ocr', wordnum)) + return pclass, result + for glyphnum in xrange(firstGlyph, lastGlyph): glyphList.append(glyphnum) # include any extratokens if they exist diff --git a/KindleBooks_Tools/KindleBooks/lib/k4mobidedrm.py b/KindleBooks_Tools/KindleBooks/lib/k4mobidedrm.py index 880690f2..776ca6e2 100644 --- a/KindleBooks_Tools/KindleBooks/lib/k4mobidedrm.py +++ b/KindleBooks_Tools/KindleBooks/lib/k4mobidedrm.py @@ -29,7 +29,7 @@ # and import that ZIP into Calibre using its plugin configuration GUI. -__version__ = '2.1' +__version__ = '2.2' class Unbuffered: def __init__(self, stream): @@ -75,6 +75,7 @@ def zipUpDir(myzip, tempdir,localname): # borrowed from calibre from calibre/src/calibre/__init__.py # added in removal of non-printing chars # and removal of . at start +# convert spaces to underscores def cleanup_name(name): _filename_sanitize = re.compile(r'[\xae\0\\|\?\*<":>\+/]') substitute='_' @@ -89,6 +90,7 @@ def cleanup_name(name): # Mac and Unix don't like file names that begin with a full stop if len(one) > 0 and one[0] == '.': one = substitute+one[1:] + one = one.replace(' ','_') return one def decryptBook(infile, outdir, k4, kInfoFiles, serials, pids): @@ -248,7 +250,7 @@ class K4DeDRM(FileTypePlugin): 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, 1) # The version number of this plugin + version = (0, 2, 2) # 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 diff --git a/KindleBooks_Tools/KindleBooks/lib/k4mutils.py b/KindleBooks_Tools/KindleBooks/lib/k4mutils.py index 1b501ba4..5e57701c 100644 --- a/KindleBooks_Tools/KindleBooks/lib/k4mutils.py +++ b/KindleBooks_Tools/KindleBooks/lib/k4mutils.py @@ -189,6 +189,6 @@ def openKindleInfo(kInfoFile=None): raise DrmException('Error: .kindle-info file can not be found') return open(kinfopath,'r') else: - if not os.path.isfile(kinfoFile): + if not os.path.isfile(kInfoFile): raise DrmException('Error: kindle-info file can not be found') return open(kInfoFile, 'r') diff --git a/ePub_Fixer/README_ePub_Fixer.txt b/ePub_Fixer/README_ePub_Fixer.txt index b864d074..fb71e9da 100644 --- a/ePub_Fixer/README_ePub_Fixer.txt +++ b/ePub_Fixer/README_ePub_Fixer.txt @@ -1,8 +1,8 @@ ePub_Fixer -ePubs are specially crafted zip archives. Unfortunately, many of the DRM encoded Adobe Adept and Barnes & Noble ePubs are not "proper" zip archives in that the names of some files in the zip central directory do NOT match the local name given in archive itself. This type of zip archive is technically incorrect/corrupted and can not be read by many other programs. +ePubs are specially crafted zip archives whose first file is an uncompresssed "mimetype" file. Unfortunately, many of the DRM encoded Adobe Adept and Barnes & Noble ePubs are not "proper" zip archives in that the names of some files in the zip central directory do NOT match the local name given in archive itself, or they do not have an uncompressed mimetype file as the first file in the archive. These types of epubs are technically incorrect/corrupted and can not be read by many other programs. -ePub_Fixer was designed to fix improperly created zip archives of this type. +ePub_Fixer was designed to fix improperly created zip archives of these types. 1. Simply double-click to launch ePub_Fixer.pyw. diff --git a/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py b/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py index ad172a32..5585cf5d 100644 --- a/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py +++ b/eReader_PDB_Tools/lib/eReaderPDB2PML_plugin.py @@ -42,7 +42,7 @@ class eRdrDeDRM(FileTypePlugin): Credit given to The Dark Reverser for the original standalone script.' supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on author = 'DiapDealer' # The author of this plugin - version = (0, 0, 3) # The version number of this plugin + version = (0, 0, 4) # The version number of this plugin file_types = set(['pdb']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import