mobidedrm 0.06 and Applescript

This commit is contained in:
Paul Durrant
2009-01-08 18:26:01 +00:00
committed by Apprentice Alf
parent bf1161192e
commit 2df89db8f2
5 changed files with 25 additions and 62 deletions

View File

@@ -4,8 +4,10 @@
# Changelog
# 0.01 - Initial version
# 0.02 - Huffdic compressed books were not properly decrypted
# 0.03 - fix 0.02 to work with all Mobipocket eBooks
# 0.04 - Wasn't checking MOBI header length
# 0.03 - Wasn't checking MOBI header length
# 0.04 - Wasn't sanity checking size of data record
# 0.05 - It seems that the extra data flags take two bytes not four
# 0.06 - And that low bit does mean something after all :-)
import sys,struct,binascii
@@ -72,14 +74,15 @@ def getSizeOfTrailingDataEntries(ptr, size, flags):
if (v & 0x80) != 0 or (bitpos >= 28) or (size == 0):
return result
num = 0
flags >>= 1
while flags:
if flags & 1:
testflags = flags >> 1
while testflags:
if testflags & 1:
num += getSizeOfTrailingDataEntry(ptr, size - num)
flags >>= 1
testflags >>= 1
if flags & 1:
num += (ord(ptr[size - num - 1]) & 0x3) + 1
return num
class DrmStripper:
def loadSection(self, section):
if (section + 1 == self.num_sections):
@@ -140,7 +143,7 @@ class DrmStripper:
mobi_length, = struct.unpack('>L',sect[0x14:0x18])
extra_data_flags = 0
if mobi_length >= 0xE4:
extra_data_flags, = struct.unpack('>L', sect[0xF0:0xF4])
extra_data_flags, = struct.unpack('>H', sect[0xF2:0xF4])
crypto_type, = struct.unpack('>H', sect[0xC:0xC+2])
@@ -170,7 +173,7 @@ class DrmStripper:
def getResult(self):
return self.data_file
print "MobiDeDrm v0.04. Copyright (c) 2008 The Dark Reverser"
print "MobiDeDrm v0.06. Copyright (c) 2008 The Dark Reverser"
if len(sys.argv)<4:
print "Removes protection from Mobipocket books"
print "Usage:"