一旦已经生成了二进制文件,选项主要有以下几种:
从第一个开始,有几个可用的开源选项,例如:
在高层次上,Alcatraz
通过以多种方式修改二进制程序集来工作,例如混淆控制流、添加垃圾指令、取消优化指令以及在运行前隐藏真正的入口点。
另一方面,Metame
的工作原理是使用随机性在每次运行生成不同的机器码(尽管行为始终相同)。这被称为多态代码,通常被真正的恶意软件使用。
最后,顾名思义,ROPfuscator
的工作原理是利用面向返回的编程从原始代码构建 ROP
片段和链,从而将原始代码流隐藏在静态分析中,甚至可能是动态的,因为启发式方法更难分析连续的恶意调用. 下图更好地描述了整个过程。
继续二进制打包,打包器的基本架构可以用下图描述。
在此过程中,给定的打包工具将二进制编译的 PE
嵌入到另一个可执行文件中,该可执行文件包含解压缩原始内容并执行它所需的信息。也许最著名的加壳器(甚至不是出于恶意目的)是 Golang
的 UPX
包。
此外,PE Crypter
通过加密可执行文件的内容并生成将在运行时解密原始 PE
的可执行文件来工作。这对 AV
非常有用,因为它们中的大多数依赖于静态分析而不是运行时行为(如 EDR
)。因此,在运行时之前完全隐藏可执行文件的内容可能非常有效,除非 AV
已生成针对加密/解密方法的签名,这就是尝试使用nimpcrypt
的情况。
最后,还可以选择将原生 PE
转换回 shellcode
。例如,这可以通过hasherezade
的 pe_to_shellcode
工具来完成。
现在已经解释了从可执行文件开始规避 AV
的所有可能方法,提一下将所有步骤合并到一个工具中的框架:KlezVirus
的 inceptor
。该工具可能会变得非常复杂,简单的Defender
规避不需要大多数步骤,但下图可能会更好地解释它:
与以前的工具相比,Inceptor 允许开发人员创建自定义模板,这些模板将在工作流程的每个步骤修改二进制文件,这样,即使为公共模板生成了签名,也可以拥有自己的私有模板来绕过 EDR
挂钩、修补 AMSI/ETW
、使用硬件断点、使用直接系统调用而不是内存中的 DLL
等。