basebinary.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:airpyrt-tools 作者: x56 项目源码 文件源码
def parse(cls, data):
        if len(data) < (cls.header_size + 4):
            raise BasebinaryError("not enough data to parse")

        header_data = data[:cls.header_size]
        inner_data = data[cls.header_size:-4]

        #XXX: and here??
        stored_checksum, = struct.unpack(">I", data[-4:])

        (byte_0x0F, model, version, byte_0x18, byte_0x19, byte_0x1A, flags, unk_0x1C) = cls.parse_header(header_data)

        if flags & 2:
            inner_data = cls.decrypt(inner_data, model, byte_0x0F)

        #XXX: why is Python so shitty about this comparison <.<
        checksum = cast_u32(zlib.adler32(header_data+inner_data))
        logging.debug("stored checksum     {0:#x}".format(stored_checksum))
        logging.debug("calculated checksum {0:#x}".format(checksum))
        logging.debug("data length         {0:#x}".format(len(header_data+inner_data)))
        if stored_checksum != checksum:
            raise BasebinaryError("bad checksum")

        return inner_data
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号