随机增加导入表可以干扰杀毒软件的检测,为了更加逼真,还需要使用常见的库和导入函数来创建导入表。我们将常见的库文件和导入函数搜集一下,保存到文件small_dll_imports.json中。
代码如下:
{ "ADVAPI32.DLL": [ "CryptSetProvParam", "RegQueryInfoKeyW", "AddUsersToEncryptedFileEx", "CheckAppInitBlockedServiceIdentity", "LsaEnumerateAccounts", "RegSaveKeyA",
将small_dll_imports.json中的数据加载到变量COMMON_IMPORTS中:
COMMON_IMPORTS = json.load(open('small_dll_imports.json', 'r'))
从COMMON_IMPORTS随机选择库文件的名称和导入函数名称:
libname = random.choice(list(COMMON_IMPORTS.keys())) funcname = random.choice(list(COMMON_IMPORTS[libname])) lowerlibname = libname.lower()
解析PE文件,获取当前的导入表,遍历导入表,如果随机选择的库不存在,就创建一个新库,如果导入函数也不存在,就增加一个新入口,代码如下:
binary = lief.PE.parse(self.bytez) for im in binary.imports: if im.name.lower() == lowerlibname: lib = im break if lib is None: lib = binary.add_library(libname) names = set([e.name for e in lib.entries]) if not funcname in names: lib.add_entry(funcname)