对于课堂作业,我正在分析亚马逊的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
返回的字节数组。self.header[0x3C:0x3C+8]
是数据文件的前79个字节的值我遇到的问题是{{1}}的含义是什么?
答案 0 :(得分:8)
这是一个正常的切片,如self.data_file[0:78]
,除了使用十六进制文字作为偏移量。 0x3C
在base10中为60,因此它与self.header[60:60+8]
相同。
答案 1 :(得分:2)
self.header[0x3C:0x3C+8]
将从header
获取一个8字节的字符串,从偏移量0x3C开始。