红队攻防
近两年免杀技术年鉴
Python免杀技术实录
AD域攻防系列微课程
免杀技术入门基础知识
深入理解CodeQL代审
开源安全项目二开计划
搞懂攻防内存马研究
深入理解SAST代审测试
C2的发展和技术分析
Fastjson姿势技巧集合
武装你的BurpSuite插件篇
CS4.5二开过HR及内扫
C#安全内网渗透工具集
红队文档书籍PDF资源
邮件钓鱼免杀完全指南
AD内网域技战法总结
渗透测试红队之信息收集
免杀致盲底层驱动BYOVD
SpringBoot常见安全风险
WIN系统红队Rootkit项目2
WIN系统红队Rootkit项目
Ghost Bits项目绕防护神器
自研新型C2(LeekShell)
国外红队通用笔记对抗录
红队钓鱼风险演练平台
Payload渗透测试平台
一键挖掘CVE自动化
小迪安全知识库
-
+
home
免杀技术入门基础知识
免杀技术入门基础知识
# 前言 在红队实战或者内网渗透中杀软(AV、EDR)是绕不开的"一道防线",无论是权限提升还是横向,都会被杀软发现拦截。对抗的检测能力在也在不断的提升,形成了"静态 + 动态 + 行为 + 云查 + 威胁情报"多维立体检测体系,免杀技术也在持续进化,攻防双方始终在互相博弈。 本文大致介绍主流杀软的工作原理,包括静态特征查杀、动态内存扫描、行为监控、启发式与机器学习等。还从实战角度出发,分类介绍当前主流的静态、内存、行为、加载免杀以及环境规避等技术手法,结合部分具体的绕过代码通过动态API解析、栈字符串混淆、无文件落地、反沙箱检测等手法提升免杀成功率,一份实用的参考。 # 一、杀软工作原理 ### 01、静态特征查杀:基于特征码的识别 * ## **原理** 提取病毒文件内的一段唯一性二进制串,静态扫描二进制串、哈希值 (MD5/SHA256)、模糊哈希 (SSDEEP) 以及 Yara 规则。  * ## 扫描范围 包括文件资源段、字符串表、输入表(IAT)如果你的程序调用了VirtualAllocEx和`CreateRemoteThread`这两个敏感API出现在IAT中就会大幅增加风险分值。 * ## 定位工具 ** 特征码定位可以通过 MyCCL、CheckPlease、AvClean 等工具定位特征吗。 ** **** * ## 补充 VirtualAllocEx和CreateRemoteThread组合风险很高在正常的程序中,基本不需要去操作其他进程的内存。 ``` (1)VirtualAllocEx:在远程进程中申请一块内存。 ``` 结果就是当杀软看到这两个函数同时出现在 IAT 时,程序意图把一段代码塞进别人的进程里执行。典型的代码注入行为,Loader 加载 ShellCode 的标配。 ### 02、动态内存查杀:运行时对抗 * ## 原理 当恶意代码在内存中解压并执行时,EDR 会定期扫描进程内存空间。  * ## 关键点 * **解密时刻** 加密后的 Shellcode 在执行前必须解密回明文,此时特征暴露。 * **堆栈回溯** EDR 会检查调用堆栈,判断 API 调用是否来自合法的模块(如`ntdll.dll`),还是来自一段无文件的私有内存。 * **代表产品** **Windows Defender** (`Scanning of arbitrary memory`) 和 **Kaspersky**。 ### 03、行为查杀:基于行为分析 * ## 原理 通过应用层Hook或者内核层回调监控敏感 API 调用。  * ## 监测点 * **文件操作** 在 C:\\Windows\\System32 等目录下创建文件。 * **注册表操作** 修改 Run 键值实现自启动。 * **网络操作** 非标准进程发起外部长连接。 * **敏感动作** 注入代码到 `lsass.exe` 或 `explorer.exe`。  ### 04、启发式与机器学习 * ## 启发式 根据经验规则打分。例如:一个程序没有图标、没有版本信息、还带有压缩壳、且尝试访问网络 = 判定为木马。  * ## 云查杀 利用**查询指纹**,一旦一个样本在某台机器被确认为恶意,全球同步封杀。  通过全球安全厂商、企业用户、研究机构共享威胁数据,构建实时更新的威胁情报网络。 # 二、免杀技术分类  ### 01、静态免杀:规避不落地与特征隐藏 **(1)特征码修改**:加花指令、改字符串、调整入口点(EP)。 (2)Shellcode加密:不再推荐简单的 XOR(容易被启发式扫描发现)。目前主流是 **AES-256**、**RC4** 或 **基于 IPv4/IPv6 地址格式的混淆**(将 Shellcode 伪装成一系列 IP 地址)。 **(3)资源修改**:图标、版本信息、数字签名(使用 **SigThief** 等工具伪造签名)。 **(4)加壳**:强壳(如 VMP)虽然静态强,但其 **壳本身特征** 极重,常被杀软直接报“压缩壳/加密壳”而杀掉。建议使用自制简单的混淆壳。  ### 02、内存免杀:对抗运行时扫描 ****(1)**睡眠混淆:程序在休眠期间加密自身的内存空间并挂起线程,躲避周期性扫描(如 SystemBC 采用的技术)。** ****(2)**堆内存加密**:将敏感数据存在堆中并加密。 ****(3)**避免 Private Memory**:利用 **模块覆盖 (Module Overloading)** 将恶意代码写入合法的 DLL 内存段中。 ### 03、行为执行免杀:对抗 API Hook  **(1)直接系统调用:不调用** `kernel32.dll` 中的 API,而是直接通过汇编指令 `syscall` 进入内核,绕过用户态 Hook。进阶:**Indirect Syscalls**(间接系统调用),通过在 `ntdll.dll` 中寻找 `syscall` 指令跳回执行,规避堆栈检查。 **(2)动态调用:手动在内存中寻找 API 地址,不通过导入表,避开静态分析。** **(3)UnHooking**:在程序运行时,从磁盘读取一份干净的 `ntdll.dll` 覆盖掉内存中被杀软 Hook 过的版本。  ### 04、传输与加载:分离免杀 **(1)资源分离**:Shellcode 放在图片(隐写术)、文本文件或远程 Web 服务器上。  **(2)白加黑:利用有合法签名的白程序(如 Office、微信组件)加载带有恶意代码的同名 DLL。** ### 05、环境规避:反沙箱反分析 ###  沙箱和虚拟机的环境特征通常与真实的物理机办公环境有很大差异。 * **硬件特征检测** * **CPU 核心数** 沙箱为了节省资源,通常只分配 1核 或 2核。检测到核心数 < 4 可认为可疑。 * **内存大小** 沙箱内存通常较小(如 2GB 或 4GB)。检测到内存 < 4GB 可认为可疑。 * **MAC 地址** 检查网卡 MAC 地址前缀(OUI)是否属于 VMware (00:50:56, 00:0C:29) 或 VirtualBox (08:00:27)。 * **用户交互特征检测 (最有效)** * **鼠标移动** 真实用户肯定会移动鼠标。记录鼠标当前位置,Sleep 几秒后再次记录,如果没有变化,大概率在沙箱中。 * **开机时间** 使用 GetTickCount64 获取开机时间。沙箱通常是每次扫描时新启动的,开机时间很短。 * **特定的分析工具检测** * 使用 FindWindow 检测是否存在 Wireshark, x64dbg, Process Hacker 等逆向分析工具的窗口。 * 检测 PEB.BeingDebugged 标志位判断自身是否处于被调试状态。 * **时间加速检测** * 某些沙箱会 Hook Sleep 函数,将其时间缩短为 0 以加速分析。 * **对抗策略** 在 Sleep 前后分别调用 GetSystemTime 计算时间差。如果时间差远远小于设定的 Sleep 时间,说明被沙箱欺骗了,直接退出。  环境探测代码本身也可能被杀软作为恶意特征,不要堆砌过多的探测代码选择 2-3个最有效、最不像恶意的探测方式(如鼠标轨迹检测、CPU核心数检查)即可。最好的处理方式是:**执行一段正常无害的业务逻辑,或者无限进入深度睡眠。** 三、杀软识别 在执行敏感恶意操作(如释放木马、注入进程、连接 C2)之前,先确认自己是不是在沙箱里,或者机器上有没有极其难搞的 EDR。 01、杀软识别 * **进程枚举** * 使用 CreateToolhelp32Snapshot 或 EnumProcesses 遍历当前运行的进程。 * 匹配常见杀软进程名:如 ZhuDongFangYu.exe (360), avp.exe (卡巴斯基), MsMpEng.exe (Defender), TMBMSRV.exe (趋势科技)。 * **加载模块 (DLL)** * 很多 EDR 会向所有进程注入 DLL 用于 Hook。 * 检查自身进程中是否加载了可疑模块:如 sysmon64.dll (Sysmon), qax\_safe.dll (奇安信), hmpalert.dll (Sophos)。 * **服务与注册表探测** * 查询特定的 Windows 服务是否处于运行状态。 * 检查特定的注册表键值是否存在。 在线杀软识别辅助平台:https://av.aabyss.cn  四、特征码规避 01、简单案例:以 nc.exe 为例修改特征码规避查杀 **(1)生成切片文件**:打开 MyCCL,载入 nc.exe。第一段 0000 是文件序号,第二段是开始位置,第三段是长度。生成一系列用于测试的文件块。 **** **(2)杀软扫描与二次处理**: 使用目标杀软对生成的文件夹进行扫描。 删除报毒的文件(留下未报毒的,说明这些没包含特征码)。 在 MyCCL 中点击“二次处理”,工具会根据剩余文件计算出特征码的大致范围。  **(3)复合定位缩小范围**: 特征区间,“复合定位此处特征码”。 重复“生成 -> 扫描 -> 删毒 -> 二次处理”的过程,不断缩小范围(如将分块数量改为 100 细化)最终将范围锁定在极小的字节内。   **(3)十六进制修改与测试**: 使用010Editor或者其他的十六进制工具打开原始的nc.exe跳转到定位的偏移地址。 修改保存这段特征码(例如:将原来的符号修改为十六进制的 5E,即 ^ 符号)。    五、静态免杀规避 01、分离免杀规避 用Loader与ShellCode分离的方式来规避杀软,这里实验用远程加载并且做了如下5点规避手法。 (1)动态 API 解析 / 隐藏导入表:不直接调用系统API VirtualAlloc,通过解析 PE 结构(导出表)动态获取函数地址。这样编译出的程序导入表(IAT)非常干净,杀软无法知道程序会进行网络请求和内存分配。 (2)栈字符串混淆:将敏感的函数名、URL 拆分成单字符数组。这样在编译后,静态文件中不会出现完整的字符串明文,安全软件的 strings 分析工具无法提取到特征。 (3)无文件落地 / 内存直接执行:把网络下载的恶意载荷直接放入内存中运行,全程不生成实体文件(不写入硬盘)绕过杀毒软件的文件监控和磁盘扫描。 (4)反沙箱检测:通过检查系统特征来判断是否处于杀软的虚拟分析环境(沙箱)中。比如沙箱通常是纯净环境不会有U盘插入记录,如果没有记录则直接退出程序。 (5)脱离 C 运行库依赖:不调用 C 标准库strcmp,全部自己手写。结合上面的动态 API 解析,这使得这段代码可以作为纯粹的Shellcode被注入到别的进程中执行,不依赖宿主程序的任何库文件。 > 最后在用VisualStudio编译的时候也要配置一下,尽可能的消除静态特征。   
xiaodi
April 29, 2026, 7:13 p.m.
151
0 comment
Forward
Favorites
Last
Next
Scan the QR Code
Copy link
Scan the QR code to share.
Copy link
share
link
type
password
Update password
Validity period
Markdown file
Word document
PDF document
PDF document (print)