diff options
Diffstat (limited to 'DeDRM_Macintosh_Application')
4 files changed, 54 insertions, 14 deletions
diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist index c36a4c0..94ad26c 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist @@ -24,7 +24,7 @@ <key>CFBundleExecutable</key> <string>droplet</string> <key>CFBundleGetInfoString</key> - <string>DeDRM AppleScript 6.3.6 Written 2010–2016 by Apprentice Alf et al.</string> + <string>DeDRM AppleScript 6.4.0 Written 2010–2016 by Apprentice Alf et al.</string> <key>CFBundleIconFile</key> <string>DeDRM</string> <key>CFBundleIdentifier</key> @@ -36,13 +36,13 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>6.3.6</string> + <string>6.4.0</string> <key>CFBundleSignature</key> <string>dplt</string> <key>LSRequiresCarbon</key> <true/> <key>NSHumanReadableCopyright</key> - <string>Copyright © 2010–2015 Apprentice Alf and Apprentice Harper</string> + <string>Copyright © 2010–2016 Apprentice Alf and Apprentice Harper</string> <key>WindowState</key> <dict> <key>bundleDividerCollapsed</key> diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py index ceef266..880d9fe 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/__init__.py @@ -48,6 +48,7 @@ __docformat__ = 'restructuredtext en' # 6.3.4 - Fixes for Kindle for Android, Linux, and Kobo 3.17 # 6.3.5 - Fixes for Linux, and Kobo 3.19 and more logging # 6.3.6 - Fixes for ADE ePub and PDF introduced in 6.3.5 +# 6.4.0 - Updated for new Kindle for PC encryption """ @@ -55,7 +56,7 @@ Decrypt DRMed ebooks. """ PLUGIN_NAME = u"DeDRM" -PLUGIN_VERSION_TUPLE = (6, 3, 6) +PLUGIN_VERSION_TUPLE = (6, 4, 0) PLUGIN_VERSION = u".".join([unicode(str(x)) for x in PLUGIN_VERSION_TUPLE]) # Include an html helpfile in the plugin's zipfile with the following name. RESOURCE_NAME = PLUGIN_NAME + '_Help.htm' diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kgenpids.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kgenpids.py index faa51d1..e99857a 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kgenpids.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kgenpids.py @@ -199,9 +199,6 @@ def getK4Pids(rec209, token, kindleDatabase): # Get the Mazama Random number MazamaRandomNumber = (kindleDatabase[1])['MazamaRandomNumber'].decode('hex') - # Get the kindle account token - kindleAccountToken = (kindleDatabase[1])['kindle.account.tokens'].decode('hex') - # Get the IDString used to decode the Kindle Info file IDString = (kindleDatabase[1])['IDString'].decode('hex') @@ -212,6 +209,14 @@ def getK4Pids(rec209, token, kindleDatabase): print u"Keys not found in the database {0}.".format(kindleDatabase[0]) return pids + try: + # Get the kindle account token, if present + kindleAccountToken = (kindleDatabase[1])['kindle.account.tokens'].decode('hex') + + except KeyError: + kindleAccountToken="" + pass + # Get the ID string used encodedIDString = encodeHash(IDString,charMap1) diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kindlekey.py b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kindlekey.py index a597a26..c5159cc 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kindlekey.py +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/kindlekey.py @@ -993,7 +993,22 @@ if iswindows: # determine type of kindle info provided and return a # database of keynames and values def getDBfromFile(kInfoFile): - names = ['kindle.account.tokens','kindle.cookie.item','eulaVersionAccepted','login_date','kindle.token.item','login','kindle.key.item','kindle.name.info','kindle.device.info', 'MazamaRandomNumber', 'max_date', 'SIGVERIF'] + names = [\ + 'kindle.account.tokens',\ + 'kindle.cookie.item',\ + 'eulaVersionAccepted',\ + 'login_date',\ + 'kindle.token.item',\ + 'login',\ + 'kindle.key.item',\ + 'kindle.name.info',\ + 'kindle.device.info',\ + 'MazamaRandomNumber',\ + 'max_date',\ + 'SIGVERIF',\ + 'build_version',\ + ] + DB = {} with open(kInfoFile, 'rb') as infoReader: hdr = infoReader.read(1) @@ -1134,6 +1149,8 @@ if iswindows: if encodeHash(name,testMap8) == keyhash: keyname = name break + if keyname == "unknown": + keyname = keyhash # the testMap8 encoded contents data has had a length # of chars (always odd) cut off of the front and moved @@ -1158,14 +1175,17 @@ if iswindows: # decode using new testMap8 to get the original CryptProtect Data encryptedValue = decode(encdata,testMap8) cleartext = CryptUnprotectData(encryptedValue, entropy, 1) - DB[keyname] = cleartext + if len(cleartext)>0: + DB[keyname] = cleartext + #print keyname, cleartext - if 'kindle.account.tokens' in DB: + if len(DB)>4: # store values used in decryption DB['IDString'] = GetIDString() DB['UserName'] = GetUserName() print u"Decrypted key file using IDString '{0:s}' and UserName '{1:s}'".format(GetIDString(), GetUserName().encode('hex')) else: + print u"Couldn't decrypt file." DB = {} return DB elif isosx: @@ -1577,7 +1597,21 @@ elif isosx: # determine type of kindle info provided and return a # database of keynames and values def getDBfromFile(kInfoFile): - names = ['kindle.account.tokens','kindle.cookie.item','eulaVersionAccepted','login_date','kindle.token.item','login','kindle.key.item','kindle.name.info','kindle.device.info', 'MazamaRandomNumber', 'max_date', 'SIGVERIF'] + names = [\ + 'kindle.account.tokens',\ + 'kindle.cookie.item',\ + 'eulaVersionAccepted',\ + 'login_date',\ + 'kindle.token.item',\ + 'login',\ + 'kindle.key.item',\ + 'kindle.name.info',\ + 'kindle.device.info',\ + 'MazamaRandomNumber',\ + 'max_date',\ + 'SIGVERIF',\ + 'build_version',\ + ] with open(kInfoFile, 'rb') as infoReader: filehdr = infoReader.read(1) filedata = infoReader.read() @@ -1683,7 +1717,7 @@ elif isosx: if len(cleartext) > 0: DB[keyname] = cleartext - if 'MazamaRandomNumber' in DB and 'kindle.account.tokens' in DB: + if len(DB)>4: break else: # the latest .kinf2011 version for K4M 1.9.1 @@ -1772,11 +1806,11 @@ elif isosx: if len(cleartext) > 0: DB[keyname] = cleartext - if 'MazamaRandomNumber' in DB and 'kindle.account.tokens' in DB: + if len(DB)>4: break except: pass - if 'kindle.account.tokens' in DB: + if len(DB)>4: # store values used in decryption print u"Decrypted key file using IDString '{0:s}' and UserName '{1:s}'".format(IDString, GetUserName()) DB['IDString'] = IDString |