分离免杀和单体免杀有啥区别,为什么要分离
什么是分离免杀和单体免杀?
首先,让我们来定义这两个概念:
- 单体免杀(All-in-One Evasion):指的是将所有恶意功能(如键盘记录、远程控制、文件加密等)和免杀代码打包在一个可执行文件中。这个文件一旦运行,就会在内存中完成所有恶意行为,而不需要外部依赖
- 分离免杀(Separated Evasion):也叫“分阶段免杀”或“多阶段免杀”。它将恶意软件的核心功能与启动器(或称加载器、Loader)分离开来。启动器本身是一个非常小的、看起来无害的可执行文件,其唯一任务是在运行时从远程服务器下载或从加密资源中解密并加载真正的恶意负载(Payload),然后执行它
为什么要分离?
分离免杀之所以成为主流,是因为它能更有效地对抗现代杀毒软件,特别是云查杀和静态分析技术
1. 绕过静态特征码检测
这是分离免杀最重要的原因。杀毒软件的静态引擎会扫描文件中的恶意代码特征码
- 对于单体免杀,所有恶意代码都集中在一个文件中。尽管可以使用混淆技术,但如果杀毒软件的特征库更新得足够快,或者其分析引擎足够强大,很容易在不执行文件的情况下就识别出其中的恶意代码
- 对于分离免杀,启动器本身是干净的。它不包含任何恶意代码,只是一段用于下载和解密的“无害”代码。因此,当用户下载或运行时,杀毒软件的静态引擎很难将其识别为恶意文件。真正的恶意负载在运行时才会被下载或解密到内存中,而此时静态引擎已经无法对它进行扫描
2. 规避云查杀和哈希比对
现代杀毒软件的云查杀系统会收集可疑文件的哈希值
- 如果一个单体免杀样本被捕获,它的哈希值会立即被添加到云端黑名单。即使你对它做了微小的修改,如果杀软使用了模糊哈希,也可能被识别
- 如果使用分离免杀,你可以对启动器进行频繁的微小改动(例如修改时间戳、添加无意义的字节),这会生成唯一的哈希值。即使一个启动器被识别,它也不会影响你接下来生成的其他启动器。真正的恶意负载可以保持不变,因为它是动态加载的,不会直接暴露在文件中
3. 增加逆向分析的难度
分离免杀为逆向工程增加了额外的门槛
- 逆向工程师拿到的是一个启动器,如果想要分析完整的恶意功能,他必须首先脱壳(如果有加密)并捕获运行时下载的恶意负载
- 启动器可能会使用反调试、反虚拟机等技术来阻止分析人员在受控环境中运行它,这进一步增加了分析的难度