已经存在的节通常包含真正意义上运行的代码,所以对现有的节的修改要非常谨慎,最保守的办法是在末尾追加随机内容。通常PE文件的节中的末尾都有预留的空间,没有实际运行的代码,可以把我们随机生成的内容写到这部分空间。我们随机选择现有的一个节,计算其预留空间的长度和位置,代码如下:
binary = lief.PE.parse(self.bytez) targeted_section = random.choice(binary.sections) L = self.__random_length() available_size = targeted_section.size - len(targeted_section.content) if L > available_size: L = available_size
随机生成数据长度,如果大于预留空间大小则进行截断,然后随机生成内容并填充到节的内容的末尾:
upper = random.randrange(256) targeted_section.content = targeted_section.content + \ [random.randint(0, upper) for _ in range(L)]