From 16fbfcdba96416dc714d5eb1cae95af6c0885993 Mon Sep 17 00:00:00 2001 From: Apprentice Alf Date: Wed, 7 Jan 2009 10:45:21 +0000 Subject: [PATCH] MobiDeDRM 0.09 and AppleScript --- Kindle_Mobi_Tools/lib/mobidedrm.py | 7 ++++--- .../Contents/Info.plist | 6 +++--- .../Contents/Resources/MobiDeDRM.py | 7 ++++--- .../Contents/Resources/Scripts/main.scpt | Bin 15438 -> 16168 bytes .../Contents/Resources/Scripts/main.scpt.txt | 4 +++- .../Resources/description.rtfd/TXT.rtf | 2 +- .../Contents/Resources/droplet.rsrc | Bin 362 -> 336 bytes 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Kindle_Mobi_Tools/lib/mobidedrm.py b/Kindle_Mobi_Tools/lib/mobidedrm.py index 707545c..1f02cf9 100644 --- a/Kindle_Mobi_Tools/lib/mobidedrm.py +++ b/Kindle_Mobi_Tools/lib/mobidedrm.py @@ -20,6 +20,7 @@ # 0.06 - And that low bit does mean something after all :-) # 0.07 - The extra data flags aren't present in MOBI header < 0xE8 in size # 0.08 - ...and also not in Mobi header version < 6 +# 0.09 - ...but they are there with Mobi header version 6, header size 0xE4! import sys,struct,binascii @@ -157,7 +158,7 @@ class DrmStripper: extra_data_flags = 0 print "MOBI header length = %d" %mobi_length print "MOBI header version = %d" %mobi_version - if (mobi_length >= 0xE8) and (mobi_version > 5): + if (mobi_length >= 0xE4) and (mobi_version > 5): extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) print "Extra Data Flags = %d" %extra_data_flags @@ -205,7 +206,7 @@ if not __name__ == "__main__": description = 'Removes DRM from secure Mobi files' supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on author = 'The Dark Reverser' # The author of this plugin - version = (0, 0, 8) # The version number of this plugin + version = (0, 0, 9) # The version number of this plugin file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import @@ -232,7 +233,7 @@ if not __name__ == "__main__": return 'Enter PID (separate multiple PIDs with comma)' if __name__ == "__main__": - print "MobiDeDrm v0.08. Copyright (c) 2008 The Dark Reverser" + print "MobiDeDrm v0.09. Copyright (c) 2008 The Dark Reverser" if len(sys.argv)<4: print "Removes protection from Mobipocket books" print "Usage:" diff --git a/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Info.plist b/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Info.plist index 3b2dedd..bea9496 100644 --- a/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Info.plist +++ b/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Info.plist @@ -28,7 +28,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - Mobipocket Unlocker 4 + Mobipocket Unlocker 9 CFBundlePackageType APPL CFBundleSignature @@ -40,9 +40,9 @@ name ScriptWindowState positionOfDivider - 435 + 422 savedFrame - 53 78 661 691 0 0 1280 778 + 91 171 1059 678 0 0 1440 878 selectedTabView result diff --git a/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Resources/MobiDeDRM.py b/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Resources/MobiDeDRM.py index 707545c..1f02cf9 100644 --- a/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Resources/MobiDeDRM.py +++ b/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Resources/MobiDeDRM.py @@ -20,6 +20,7 @@ # 0.06 - And that low bit does mean something after all :-) # 0.07 - The extra data flags aren't present in MOBI header < 0xE8 in size # 0.08 - ...and also not in Mobi header version < 6 +# 0.09 - ...but they are there with Mobi header version 6, header size 0xE4! import sys,struct,binascii @@ -157,7 +158,7 @@ class DrmStripper: extra_data_flags = 0 print "MOBI header length = %d" %mobi_length print "MOBI header version = %d" %mobi_version - if (mobi_length >= 0xE8) and (mobi_version > 5): + if (mobi_length >= 0xE4) and (mobi_version > 5): extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4]) print "Extra Data Flags = %d" %extra_data_flags @@ -205,7 +206,7 @@ if not __name__ == "__main__": description = 'Removes DRM from secure Mobi files' supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on author = 'The Dark Reverser' # The author of this plugin - version = (0, 0, 8) # The version number of this plugin + version = (0, 0, 9) # The version number of this plugin file_types = set(['prc','mobi','azw']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import @@ -232,7 +233,7 @@ if not __name__ == "__main__": return 'Enter PID (separate multiple PIDs with comma)' if __name__ == "__main__": - print "MobiDeDrm v0.08. Copyright (c) 2008 The Dark Reverser" + print "MobiDeDrm v0.09. Copyright (c) 2008 The Dark Reverser" if len(sys.argv)<4: print "Removes protection from Mobipocket books" print "Usage:" diff --git a/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Resources/Scripts/main.scpt b/Macintosh_Applications/Mobipocket Unlocker.app/Contents/Resources/Scripts/main.scpt index 72c8be4cdd2df365af35be4f312e689f3458adc6..f781afc5a116ee1ec7034b73c86b529fadbced63 100644 GIT binary patch literal 16168 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