修改已经存在的节的名称也可以迷惑杀毒软件,常见的方式是随机选择已经存在的节,并把节的名称修改为常见的节的名称。我们将常见的节的名称搜集一下,保存到文件section_names.txt中:
.text .rsrc .reloc .data .rdata .idata .tls .brdata
把常见的节的名称保存在全局变量COMMON_SECTION_NAMES中:
COMMON_SECTION_NAMES = open('section_names.txt','r').read().rstrip().split('\n')
解析PE文件,获取当前的节列表,随机选择其中的一个节,从COMMON_SECTION_NAMES随机选择一个节名,更新现有节的节名。需要注意的是在PE文件的格式中,节名称使用长度为8的字节数组保存且最后一位为NULL,所以真正有效字符最多只有7个。代码如下:
binary = lief.PE.parse(self.bytez) targeted_section = random.choice(binary.sections) targeted_section.name = random.choice(COMMON_SECTION_NAMES)[:7]