def KindleMobiDecrypt(self,path_to_ebook): # add the alfcrypto directory to sys.path so alfcrypto.py # will be able to locate the custom lib(s) for CDLL import. sys.path.insert(0, self.alfdir) # Had to move this import here so the custom libs can be # extracted to the appropriate places beforehand these routines # look for them. import calibre_plugins.dedrm.prefs as prefs import calibre_plugins.dedrm.k4mobidedrm dedrmprefs = prefs.DeDRM_Prefs() pids = dedrmprefs['pids'] serials = dedrmprefs['serials'] serials.extend(dedrmprefs['androidserials']) kindleDatabases = dedrmprefs['kindlekeys'].items() try: book = k4mobidedrm.GetDecryptedBook(path_to_ebook,kindleDatabases,serials,pids,self.starttime) except Exception, e: decoded = False # perhaps we need to get a new default Kindle for Mac/PC key defaultkeys = [] print u"{0} v{1}: Failed to decrypt with error: {2}".format(PLUGIN_NAME, PLUGIN_VERSION,e.args[0]) print u"{0} v{1}: Looking for new default Kindle Key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) try: if iswindows or isosx: from calibre_plugins.dedrm.kindlekey import kindlekeys defaultkeys = kindlekeys() else: # linux from wineutils import WineGetKeys scriptpath = os.path.join(self.alfdir,u"kindlekey.py") defaultkeys = WineGetKeys(scriptpath, u".k4i",dedrmprefs['kindlewineprefix']) except: print u"{0} v{1}: Exception when getting default Kindle Key after {2:.1f} seconds".format(PLUGIN_NAME, PLUGIN_VERSION, time.time()-self.starttime) traceback.print_exc() pass newkeys = {} for i,keyvalue in enumerate(defaultkeys): keyname = u"default_key_{0:d}".format(i+1) if keyvalue not in dedrmprefs['kindlekeys'].values(): newkeys[keyname] = keyvalue if len(newkeys) > 0: print u"{0} v{1}: Found {2} new {3}".format(PLUGIN_NAME, PLUGIN_VERSION, len(newkeys), u"key" if len(newkeys)==1 else u"keys") try: book = k4mobidedrm.GetDecryptedBook(path_to_ebook,newkeys.items(),[],[],self.starttime) decoded = True # store the new successful keys in the defaults print u"{0} v{1}: Saving {2} new {3}".format(PLUGIN_NAME, PLUGIN_VERSION, len(newkeys), u"key" if len(newkeys)==1 else u"keys") for keyvalue in newkeys.values(): dedrmprefs.addnamedvaluetoprefs('kindlekeys','default_key',keyvalue) dedrmprefs.writeprefs() except Exception, e: pass
def __init__(self, parent=None,): QDialog.__init__(self, parent) self.parent = parent self.setWindowTitle(u"{0} {1}: Getting Default Kindle for Mac/PC Key".format(PLUGIN_NAME, PLUGIN_VERSION)) layout = QVBoxLayout(self) self.setLayout(layout) try: if iswindows or isosx: from calibre_plugins.dedrm.kindlekey import kindlekeys defaultkeys = kindlekeys() else: # linux from wineutils import WineGetKeys scriptpath = os.path.join(parent.parent.alfdir,u"kindlekey.py") defaultkeys = WineGetKeys(scriptpath, u".k4i",parent.getwineprefix()) self.default_key = defaultkeys[0] except: traceback.print_exc() self.default_key = u"" self.button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) if len(self.default_key)>0: data_group_box = QGroupBox(u"", self) layout.addWidget(data_group_box) data_group_box_layout = QVBoxLayout() data_group_box.setLayout(data_group_box_layout) key_group = QHBoxLayout() data_group_box_layout.addLayout(key_group) key_group.addWidget(QLabel(u"Unique Key Name:", self)) self.key_ledit = QLineEdit(u"default_key", self) self.key_ledit.setToolTip(u"<p>Enter an identifying name for the current default Kindle for Mac/PC key.") key_group.addWidget(self.key_ledit) key_label = QLabel(_(''), self) key_label.setAlignment(Qt.AlignHCenter) data_group_box_layout.addWidget(key_label) self.button_box.accepted.connect(self.accept) else: default_key_error = QLabel(u"The default encryption key for Kindle for Mac/PC could not be found.", self) default_key_error.setAlignment(Qt.AlignHCenter) layout.addWidget(default_key_error) # if no default, bot buttons do the same self.button_box.accepted.connect(self.reject) self.button_box.rejected.connect(self.reject) layout.addWidget(self.button_box) self.resize(self.sizeHint())
def KindleMobiDecrypt(self, path_to_ebook): # add the alfcrypto directory to sys.path so alfcrypto.py # will be able to locate the custom lib(s) for CDLL import. sys.path.insert(0, self.alfdir) # Had to move this import here so the custom libs can be # extracted to the appropriate places beforehand these routines # look for them. import calibre_plugins.dedrm.prefs as prefs import calibre_plugins.dedrm.k4mobidedrm dedrmprefs = prefs.DeDRM_Prefs() pids = dedrmprefs['pids'] serials = dedrmprefs['serials'] for android_serials_list in dedrmprefs['androidkeys'].values(): #print android_serials_list serials.extend(android_serials_list) #print serials androidFiles = [] kindleDatabases = list(dedrmprefs['kindlekeys'].items()) try: book = k4mobidedrm.GetDecryptedBook(path_to_ebook, kindleDatabases, androidFiles, serials, pids, self.starttime) except Exception as e: decoded = False # perhaps we need to get a new default Kindle for Mac/PC key defaultkeys = [] print("{0} v{1}: Failed to decrypt with error: {2}".format( PLUGIN_NAME, PLUGIN_VERSION, e.args[0])) print( "{0} v{1}: Looking for new default Kindle Key after {2:.1f} seconds" .format(PLUGIN_NAME, PLUGIN_VERSION, time.time() - self.starttime)) try: if iswindows or isosx: from calibre_plugins.dedrm.kindlekey import kindlekeys defaultkeys = kindlekeys() else: # linux from .wineutils import WineGetKeys scriptpath = os.path.join(self.alfdir, "kindlekey.py") defaultkeys = WineGetKeys(scriptpath, ".k4i", dedrmprefs['kindlewineprefix']) except: print( "{0} v{1}: Exception when getting default Kindle Key after {2:.1f} seconds" .format(PLUGIN_NAME, PLUGIN_VERSION, time.time() - self.starttime)) traceback.print_exc() pass newkeys = {} for i, keyvalue in enumerate(defaultkeys): keyname = "default_key_{0:d}".format(i + 1) if keyvalue not in dedrmprefs['kindlekeys'].values(): newkeys[keyname] = keyvalue if len(newkeys) > 0: print("{0} v{1}: Found {2} new {3}".format( PLUGIN_NAME, PLUGIN_VERSION, len(newkeys), "key" if len(newkeys) == 1 else "keys")) try: book = k4mobidedrm.GetDecryptedBook( path_to_ebook, list(newkeys.items()), [], [], [], self.starttime) decoded = True # store the new successful keys in the defaults print("{0} v{1}: Saving {2} new {3}".format( PLUGIN_NAME, PLUGIN_VERSION, len(newkeys), "key" if len(newkeys) == 1 else "keys")) for keyvalue in newkeys.values(): dedrmprefs.addnamedvaluetoprefs( 'kindlekeys', 'default_key', keyvalue) dedrmprefs.writeprefs() except Exception as e: pass if not decoded: #if you reached here then no luck raise and exception print( "{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds. Read the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md" .format(PLUGIN_NAME, PLUGIN_VERSION, time.time() - self.starttime)) raise DeDRMError( "{0} v{1}: Ultimately failed to decrypt after {2:.1f} seconds. Read the FAQs at Harper's repository: https://github.com/apprenticeharper/DeDRM_tools/blob/master/FAQs.md" .format(PLUGIN_NAME, PLUGIN_VERSION, time.time() - self.starttime)) of = self.temporary_file(book.getBookExtension()) book.getFile(of.name) of.close() book.cleanup() return of.name
def KindleMobiDecrypt(self, path_to_ebook): # add the alfcrypto directory to sys.path so alfcrypto.py # will be able to locate the custom lib(s) for CDLL import. sys.path.insert(0, self.alfdir) # Had to move this import here so the custom libs can be # extracted to the appropriate places beforehand these routines # look for them. import calibre_plugins.dedrm.prefs as prefs import calibre_plugins.dedrm.k4mobidedrm dedrmprefs = prefs.DeDRM_Prefs() pids = dedrmprefs['pids'] serials = dedrmprefs['serials'] kindleDatabases = dedrmprefs['kindlekeys'].items() try: book = k4mobidedrm.GetDecryptedBook(path_to_ebook, kindleDatabases, serials, pids, self.starttime) except Exception, e: decoded = False # perhaps we need to get a new default Kindle for Mac/PC key defaultkeys = [] print u"{0} v{1}: Failed to decrypt with error: {2}".format( PLUGIN_NAME, PLUGIN_VERSION, e.args[0]) print u"{0} v{1}: Looking for new default Kindle Key after {2:.1f} seconds".format( PLUGIN_NAME, PLUGIN_VERSION, time.time() - self.starttime) try: if iswindows or isosx: from calibre_plugins.dedrm.kindlekey import kindlekeys defaultkeys = kindlekeys() else: # linux from wineutils import WineGetKeys scriptpath = os.join(self.alfdir, u"kindlekey.py") defaultkeys = self.WineGetKeys( scriptpath, u".k4i", dedrmprefs['kindlewineprefix']) except: pass newkeys = {} for i, keyvalue in enumerate(defaultkeys): keyname = u"default_key_{0:d}".format(i + 1) if keyvalue not in dedrmprefs['kindlekeys'].values(): newkeys[keyname] = keyvalue if len(newkeys) > 0: print u"{0} v{1}: Found {2} new {3}".format( PLUGIN_NAME, PLUGIN_VERSION, len(newkeys), u"key" if len(newkeys) == 1 else u"keys") try: book = k4mobidedrm.GetDecryptedBook( path_to_ebook, newkeys.items(), [], [], self.starttime) decoded = True # store the new successful keys in the defaults print u"{0} v{1}: Saving {2} new {3}".format( PLUGIN_NAME, PLUGIN_VERSION, len(newkeys), u"key" if len(newkeys) == 1 else u"keys") for keyvalue in newkeys.values(): dedrmprefs.addnamedvaluetoprefs( 'kindlekeys', 'default_key', keyvalue) dedrmprefs.writeprefs() except Exception, e: pass