静态免杀技术分析:原理、方法与实战应用
关注我,后面将免费更新免杀和漏洞原理文章
作者:Factor

静态免杀(Static AV Evasion)是攻击者在构造恶意程序或 Payload 时,为了绕过杀毒软件、EDR、WAF、沙箱等防御系统的静态检测机制,所采取的一系列文件级、结构级、内容级和逻辑级的隐藏与伪装手段。
本质目标是:在不运行文件的前提下,让恶意载荷在磁盘上看起来像“正常程序”,以此骗过静态扫描引擎的查杀逻辑。
本文将从静态免杀的检测原理出发,系统梳理当前主流的静态免杀技术路径,包括 Shellcode 加密与分发、加载器伪装、PE 文件结构欺骗、签名绕过、组合混淆技术,并提供典型实战组合与工具链建议,供红队、安全测试与研究人员参考使用。
一、静态免杀的检测原理回顾
安全软件静态扫描依赖的关键特征
检测机制 | 描述 |
---|---|
YARA规则匹配 | 静态签名规则,通过字节序列、字符串、正则、节偏移等匹配判断 |
PE结构分析 | 检查节数量、IAT异常、入口点特征、导入表错位、异常节大小 |
签名哈希识别 | 直接比对已知病毒样本的哈希、壳加密模板或通用工具特征 |
敏感字符串检测 | 检查是否包含关键函数、命令片段、URL、域名等(如 powershell、cmd.exe) |
模型分类识别 | 基于训练模型判断结构是否异常、是否包含常见攻击组件 |
典型被标记的静态特征有哪些?
- 明文字符串(如 powershell, calc.exe, rundll32, CobaltStrike, HTTP, ReflectiveLoader)
- 标准 Shellcode 指令序列(如 H- 标准 Shellcode 指令序列(如 \x48ƒ- 标准 Shellcode 指令序列(如\x48\x83ì- 标准 Shellcode 指令序列(如 \x48\x83\xEC(- 标准 Shellcode 指令序列(如 \x48\x83\xEC\x28, ÿ- 标准 Shellcode 指令序列(如 \x48\x83\xEC\x28, \xFFà- 标准 Shellcode 指令序列(如 \x48\x83\xEC\x28, \xFF\xE0, jmp, call, push, ret组合)
- 加密壳头特征(UPX壳、donut头、某些加密stub)
- 一些高频 syscall 序列、hook 函数位置
二、Shellcode 加密与编码策略详解
Shellcode 是执行的核心部分,尤其是 CobaltStrike Beacon、Meterpreter、msfvenom payload、Custom loader 等,是安全引擎首要识别对象。对其加密/编码是最基础也是最重要的静态免杀手段。
常见加密/编码方法一览:
方法 | 强度 | 易用性 | 是否推荐 | 特点说明 |
---|---|---|---|---|
Base64 | ★ | ★★★★★ | ❌ | 辅助封装,适合最外层封装,易识别 |
XOR | ★★ | ★★★★ | ✅ | 快速简单,可多轮错位提升强度 |
RC4 | ★★★ | ★★★ | ✅ | 流加密,推荐混合使用 |
AES-CBC/GCM | ★★★★★ | ★★ | ✅✅✅ | 推荐主力算法,适合整段 payload 包裹 |
多层嵌套编码 | ★★★★★ | ★★ | ✅✅✅ | Base64+XOR+RC4+AES+自定义协议组合 |
加密组合实战模板:
1.AES-CBC 加密 shellcode
2.再 RC4 加密一次(RC4 key 可为随机 UUID 派生)
3.最后 Base64 编码
4.Loader 中解密逻辑嵌入,或通过网络、资源段动态加载解密参数
三、Loader 的静态免杀策略
即便 Shellcode 被加密,载荷如何被加载、执行也是关键因素。Loader 一旦暴露出可疑调用或特征,同样会被识别查杀。
Loader 常见免杀技术细分
1.动态 API 解析
- 不使用导入表,运行时手动解析 DLL 基地址 + API 函数地址
- 结合 API 哈希(如 CRC32、djb2)防止字符串特征被识别
2.系统调用替代 (Syscall)
- 使用 NtWriteVirtualMemory, NtCreateThreadEx, NtProtectVirtualMemory
- 推荐使用 SysWhispers2/3, HellsGate, TinySyscalls, DirectSyscalls
3.反射加载 / 手动映射执行
- 将 shellcode 映射到内存中模拟运行 DLL,避开 LoadLibrary 路径
- 兼容 donut 生成的 shellcode,提升模块化加载能力
4.语言免杀选择
- Nim:强烈推荐
,天生免签名,代码量小、静态特征少 - Rust:类型安全,生成代码干净,可混淆性高
- C++:控制粒度细致,适合结合 syscall
- C# / PowerShell:配合 AMSI bypass 可用,需规避特征
5.字符串/结构混淆
- 所有敏感字串使用 XOR、AES、反转、base64 等混淆方式动态还原
- PE 模块结构混淆节名、入口点偏移、插入无害资源段等
6.隐蔽执行技术
- Parent Process Spoofing (PPID欺骗)
- Process Hollowing / RunPE / Early Bird Injection
- Shellcode Staging:第一阶段仅为解密器+下载器,第二阶段动态解密执行主Payload
四、PE 文件伪装与签名欺骗技巧
静态扫描不仅查Shellcode和字符串,更关注整个PE文件的“行为像不像正常程序”。因此,以下对PE结构的改造可以有效规避检测:
文件结构伪装
- 修改 .text 节为 .doc, .img, .cfg,避免节名触发规则
- 增加伪造资源节 .rsrc,插入图标、图片混淆(如嵌入真实 PNG)
- 清除 PE 中的 Rich Header, TimeStamp, Debug Table, PDB 信息等
- 模拟正常软件结构(如 VS编译的结构),欺骗静态模型判断
签名/壳/哈希欺骗手段:
- sigthief、sigsploit:将可信签名复制到恶意程序上(仅表面签名)
- 加壳方式伪装:UPX 改壳、Stub 壳、自定义壳或结合 Themida、VMProtect 进行保护
- 修改编译器元数据:改编译器版本为 VS2015,修改 Company、Product、Version 字段
常见白文件执行方式:
工具名称 | 调用方式 | 功能描述 | 特点说明 |
---|---|---|---|
InstallUtil | 调用 .NET 程序安装执行入口 | 支持无窗口执行 | 利用合法安装机制隐蔽执行 |
Msbuild | 加载 .csproj 中恶意 C# 脚本 | 文件型上线方法 | 通过MSBuild工程文件加载混淆代码 |
Rundll32 | 执行任意 DLL 入口函数 | 常用于 DLL Beacon加载 | 白名单加载DLL导出函数 |
Regsvr32 | 注册 COM 对象时执行代码 | 可配合远程脚本加载 | 支持远程SCT脚本下载执行 |
五、推荐实战免杀组合方案
场景 | 加密方案 | Loader技术组合 | 其他技术 |
---|---|---|---|
Cobalt Strike Beacon上线 | AES-GCM + RC4 + Base64 | Nim Loader + DirectSyscalls + 无导入PE + 段结构伪装 | 内存反射加载,规避静态特征 |
Msfvenom/Donut Shellcode | RC4 + XOR + Base64 | Go/C++ Loader + 手动映射 + 反沙箱检测 | 混淆API调用链,绕过行为监控 |
内投EXE/外投绑定执行 | 多层嵌套加密 + 加壳 + 签名 | VS EXE 模拟结构 + 合法资源伪装 + 模拟签名 | 利用白文件捆绑,伪装数字签名 |
LNK/HTA/恶意文档投放 | 加密下载器 + 分段Shellcode | PowerShell/VBS 启动Loader + 网络解密Payload | 自动释放诱饵文档,规避邮件检测 |
文件Less投递/无落地上线 | AES加密Shellcode + DNS通信 | Reflective DLL + Beacon Pipe + 反内存扫描 | 流量伪装 + 内存加密,避免文件写入 |
六、辅助工具与生态推荐
工具名 | 功能说明 | 适用场景 | 检测规避等级 |
---|---|---|---|
donut | Shellcode生成器(支持EXE/DLL) | 内存免杀/载荷投递 | ★★★★☆ |
scarecrow | 高级C2 loader 自动加壳 + 加密 | 载荷投递/内存执行 | ★★★★★ |
ShellcodeLoader | 多种静态免杀模板项目,C++/C# | 静态免杀/载荷投递 | ★★★★☆ |
sigsploit | 签名伪造工具 | 绕过签名检查 | ★★★★ |
pezor | 自定义壳生成器 + 文件瘦身 | 静态免杀/载荷瘦身 | ★★★★☆ |
obfuscator-llvm | C/C++ 源码级混淆工具 | 代码保护/反逆向分析 | ★★★★ |
AMSIbypass tools | 对抗 AMSI、ETW、ScriptBlockLog | 绕过运行时检测 | ★★★★★ |
七、总结与扩展方向
静态免杀作为红队链路中的第一步,是让代码从“形”上看起来是安全的。它要求我们既要隐藏好“刀刃”(Shellcode/关键逻辑),又要给“刀鞘”(Loader/EXE文件)精心包装。
在现代检测技术面前,仅靠静态免杀已无法长时间维持潜伏。
关注我,后面将免费更新免杀和漏洞原理文章
作者:Factor