import io from .matcher import SignatureMatcher, Match class FlattenDeviceTree(SignatureMatcher): def __init__(self, file): self.name = "Flatten Device Tree" self.signature = b'\xd0\x0d\xfe\xed' super().__init__(file) def is_valid(self): for match in self.search(): start = match header = io.BytesIO(self.file[start:start+4*10]) magic = header.read(4) totalsize = header.read(4) off_dt_struct = header.read(4) off_dt_strings = header.read(4) off_mem_rsvmap = header.read(4) version = header.read(4) last_comp_version = header.read(4) boot_cpuid_phys = header.read(4) size_dt_strings = header.read(4) size_dt_struct = header.read(4) totalsize = int.from_bytes(totalsize, 'little') self.matches += [Match(start, totalsize)] return len(self.matches) != 0