对于类作业,我正在分析 Amazon 的 Kindle 数字版权管理实现的工作原理以及如何击败它。在我的研究中,我遇到了一组从加密中提取图书数据的 Python 脚本。它适合我解释我论文中的加密破解部分的需要。
问题是,我的 Python 不流利,除了 print 'Hello World' 之外没有任何经验。
在研究源代码时,我遇到了这个片段
def __init__(self, infile):
# initial sanity check on file
self.data_file = file(infile, 'rb').read()
self.mobi_data = ''
self.header = self.data_file[0:78]
if self.header[0x3C:0x3C+8] != 'BOOKMOBI' and self.header[0x3C:0x3C+8] != 'TEXtREAd':
raise DrmException("invalid file format")
self.magic = self.header[0x3C:0x3C+8]
self.crypto_type = -1
我对代码的解释是这样的:
self.data_file是一个字节数组,由read()在file(infile, 'rb')调用中返回。self.header是数据文件前79字节的值
我遇到的问题是 self.header[0x3C:0x3C+8] 是什么意思?
请您参考如下方法:
这是一个普通的切片,就像 self.data_file[0:78] 一样,除了使用十六进制文字作为偏移量。 0x3C 是 base10 中的 60,所以它与 self.header[60:60+8] 相同。
