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

免杀原理与实践实验报告

 学号 20242423 姓名:罗靖林 整理日期 2026年10月26日

一 实验简介

本次实验比较不同文件表达形式在 Windows Defender 下的检测和运行结果,涉及 MSF 编码器、JAR 文件、UPX 加壳、自编译 C 样本、组合处理与 Veil。实验中,未编码及两种编码次数的 EXE 均触发检测;C 样本曾建立会话,但会话随后关闭,复测时运行受到阻止;Veil 样本在本机测试中建立了会话,并在任务管理器中留下运行记录。另一台电脑上的验证未完成。

实验的学习目标是理解静态检测、运行时监控、云端判定与信誉提示的区别,并依据文件下载、运行、会话和处置记录评价测试结果。报告将“未立即出现告警”“建立一次会话”和“长期与防护软件共存”视为不同结论。

实验环境

项目

配置或记录值

实验机

Kali Linux 2026.2,VMware 虚拟机,主机名 luojinglin

Windows 测试机

本机 Windows 11 x64,主机名 loujinlan;会话工具识别为 Windows 11 24H2+,Build 26300

网络

VMware VMnet1,仅主机网络,192.168.226.0/24

Kali 地址

192.168.226.128/24

Windows VMnet1 地址

192.168.226.1/24

防护软件

Windows Defender,基线记录为 Normal 模式、杀毒与实时保护均开启

防护版本

产品 4.18.26090.9;引擎 1.1.26090.9;病毒库 1.461.192.0

主要工具

Metasploit Framework、mingw-w64、UPX 4.2.4、Veil 3.1.14

文件传输

Kali 临时 HTTP 服务,Windows 浏览器访问并下载

系统版本按图21中的工具识别结果记录,未据此推定 Windows 的正式发行分支。防护版本来自基线快照,后续更新情况没有逐次记录。

二 基础知识

检测对象与运行条件

AV 是 Anti-Virus 的缩写,即防病毒软件。现代防护软件会结合文件内容、运行行为和信誉等信息进行判断。文件能够保存到磁盘,只能说明该环节没有观察到阻止,不能单独证明运行时不会被检测。

Shell 是接收并执行命令的程序;shellcode 通常指一段完成特定任务的机器指令,两者并非同一种文件或语言。载荷是否可以执行,还受操作系统、处理器架构、运行环境和网络条件影响。JAR 与 Windows PE 可执行文件的运行条件不同,因此二者的下载或扫描结果不能直接等同于功能验证。

编码与加壳

编码器改变数据的表示形式。Rapid7 官方说明,Metasploit 编码器的主要用途是处理利用过程中的坏字符,并不保证规避杀软检测。[2] 因此,增加编码次数不等于提高免杀成功率,也不能仅凭相同威胁名称断定命中了完全相同的字节特征。

加壳会改变可执行文件的存储形式。UPX 的主要功能是压缩可执行文件;成功压缩与能否通过防护检测是两个独立指标。[6] 程序经过重新编译或表示变换后,仍然可能在执行阶段触发检测。

防护层次与证据

Defender 的行为监控会观察进程、文件系统及其他系统活动;云保护则与本地防护协同更新判断。[3][4] SmartScreen 主要涉及下载和应用信誉,“未知发布者”或“不常下载”提示应与明确的恶意软件检测记录区分。[5]

判定具体拦截机制需要对应的事件、时间、文件身份与处置记录。进程退出、下载列表显示“已删除”,或者保护历史中暂未找到条目,都不足以单独证明行为检测或云端处置。

三 实验方案

实验先记录网络与防护状态,再以 EICAR 建立检测基线,随后对不同样本形式进行比较。对照项包括未编码 EXE、不同编码次数的 EXE、JAR、自编译 C 样本、加壳与组合样本,以及 Veil 样本。

每项测试分别观察下载提示、文件是否保存、进程能否启动、会话是否建立和后续是否出现处置。人工允许后的运行结果单独记录,避免把改变信任条件后的回连计为默认防护条件下的免杀成功。实验以本机与 Kali 的虚拟网络为范围,没有取得另一台电脑的实测数据。

四 实验过程与分析

环境连通性

Windows 在基线阶段访问 Kali 的 HTTP 测试服务,得到状态码 200 和正文 LAB-OK,说明当时 Windows 可以通过指定地址和端口访问 Kali。该结果验证了这条通信路径,并不代表所有端口、所有方向或整个实验期间都持续连通。

图1 Windows 访问 Kali 的 HTTP 基线结果

图1 Windows 主机名与 HTTP 200 及 LAB-OK 返回结果

防护状态记录

基线输出识别到 Windows Defender,运行模式为 Normal,AntivirusEnabled 与 RealTimeProtectionEnabled 均为 True。产品、引擎和病毒库版本见实验环境表。该快照用于说明基线时刻的防护状态,不能替代每次样本测试时的同步状态记录。

图2 Defender 版本与防护状态

图2 Defender 产品版本 引擎版本 病毒库版本与实时保护状态

EICAR 检测基线

Windows 桌面的 20242423.txt 被识别为 Virus:DOS/EICAR_Test_File,保护历史显示已隔离。EICAR 是用于验证防病毒软件响应的无害标准测试文件,不包含病毒代码。[1] 此结果证明 Defender 对该标准测试文件产生了检测和隔离响应,不能据此推定它对任意恶意程序的检出能力。

图3 EICAR 测试文件隔离记录

图3 文件名含学号的 EICAR 测试文件已被隔离

MSF 编码器对照

对照组包含 20242423_raw.exe、20242423_shikata5.exe 和 20242423_shikata20.exe,分别对应未编码、编码5次与编码20次的样本。目录记录中的显示大小约为 7.0K、7.5K 和 7.5K。文件大小采用终端显示值,不据此推断编码后结构没有变化。

浏览器首先出现下载信誉提示,随后 Defender 保护历史出现 Trojan:Win32/Meterpreter.RPZ!MTB 的阻止记录,受影响项包含下载中的 .crdownload 临时文件。这说明检测发生在下载阶段;本次记录未显示增加编码次数带来有效改善。

图4 下载阶段的 Defender 威胁阻止记录

图4 Defender 识别下载临时文件中的威胁

后续对相关威胁进行了人工允许,原始样本运行后建立了会话。由于信任条件已被修改,这次回连仅用于验证样本在允许条件下的功能,不计为默认防护条件下的免杀成功。后续扫描又对相关 EXE 给出了检测结果。

图5 人工允许记录

图5 保护历史中的人工允许状态

图6 原始样本在允许条件下建立会话

图6 原始样本回连记录 该结果具有人工允许这一前提

本组实验能够支持“在本机当次测试中,编码5次和20次均未避免检测”。同一威胁名称可能覆盖不同特征或模型判定,因此不能进一步断言所有样本的解码部分完全不变,也不能把这一结果推广为所有编码器在所有环境下均无效。

JAR 文件对照

JAR 样本 20242423.jar 的生成记录显示最终大小为 5265字节,随后浏览器出现该文件的下载记录。因测试机未完成相应 Java 运行条件下的运行验证,本项没有取得 JAR 的会话结果。

图7 JAR 文件生成结果

图7 JAR 输出文件与大小记录 终端局部

一次后续扫描记录列出了三个 EXE 的 Trojan:Win32/Tecabans.A!cl 检测结果,没有列出 JAR。不过,单张威胁详情并非完整扫描清单,不能据此证明该 JAR 通过了全部静态检查。再往后的下载列表显示 JAR 已删除,但没有取得与其对应的处置事件,删除来源不能确定。

图8 后续扫描的 EXE 检测结果

图8 扫描记录中列出的三个 EXE 文件

本项完成了文件形式的生成与下载观察,尚未完成运行功能验证。实验记录不足以把“当时没有看到该文件的告警”写成“JAR 格式可以绕过静态扫描”。

UPX 加壳对照

对原始 EXE 的加壳尝试返回 CantPackException: section size problem,统计结果为0个成功、1个错误。该现象说明 UPX 未接受本次输入文件的节区布局,不能扩展为所有同类 EXE 都不兼容 UPX。

图9 UPX 对原始样本的处理失败

图9 UPX 的节区大小错误与处理失败统计

对另一个自编译 PE 文件的处理成功,大小从108600字节变为60472字节。输出大小为原来的55.68%,即减少48128字节,约减少44.32%。这证明该文件完成压缩,不代表它通过了杀软的运行检测。

图10 UPX 对自编译 PE 文件处理成功

图10 UPX 压缩前后大小与成功统计 终端结果局部

C 样本的运行与复测

自编译 C 样本命名为 20242423_loader.exe,目录记录显示大小约107K。记录中该样本曾完成下载和运行,Kali 侧先后出现 session 2 与 session 3 的建立信息,随后又出现会话关闭和 Reason: Died。

图11 C 样本会话建立与关闭记录

图11 C 样本会话建立及关闭记录 左侧终端局部

这一现象证明该次测试中出现了实际会话,也说明会话未保持稳定。会话退出可能涉及程序退出、通信或防护处置等原因;现有截图没有给出足够的诊断信息,不能直接归因于某一种机制。

后续对该类样本的运行尝试出现“文件包含病毒或潜在的垃圾软件”提示,说明复测时执行已受到阻止。由于缺少前后文件哈希、同步防护状态与完整事件日志,不能仅凭时间先后断言云端完成了延迟判定。

图12 C 样本后续运行被阻止

图12 Windows 对后续运行尝试的阻止提示

本项结果应表述为“本机曾观察到短暂回连,后续复测受到阻止”。自编译改变了文件组织和外部特征,但现有结果没有证明其获得长期或跨环境的规避效果。

组合处理样本

组合组采用数据表示变换、重新编译及加壳进行比较,包含 20242423_xor_loader.exe、20242423_xor_loader_upx.exe 和后续版本。记录中的数据长度为355字节。本组重点观察文件形式变化后,下载、启动和会话结果是否同时改善。

浏览器对部分组合样本显示“不常下载”及未知发布者提示。这些属于信誉风险提示,与明确的恶意软件命中并非同一类证据。[5]

图13 组合样本的下载信誉提示

图13 浏览器对组合样本的下载提示

图14 SmartScreen 对组合样本的提示

图14 SmartScreen 的文件信誉与未知发布者提示

实验记录描述:部分样本可以保存,启动后进程短暂存在,但监听端没有取得会话;后续版本的下载列表显示下载错误。缺少退出码、进程终止事件和对应 Defender 检测记录时,只能确认没有获得成功回连,不能将其写成已证实被行为检测终止。

图15 下载列表中的后续状态

图15 下载错误与已删除状态的记录 删除和下载失败原因未由该图单独确定

组合处理没有在本次测试中带来更完整的功能结果。文件能够保存和程序能够建立稳定会话需要分别验证,不能把前一项成功自动视为后一项成功。

Veil 安装与本机验证

Veil 的安装过程中遇到软件源索引和 Wine 依赖问题。依赖日志中出现过 Python 安装失败及目录缺失提示;随后脚本输出 Done,并能进入 Veil 3.1.14 主菜单。安装脚本结束只能说明该次流程已结束,主菜单可用则进一步证明主程序可以启动,不能据此推定所有组件都已修复。[7]

图16 Veil 初始化中的依赖错误

图16 初始化阶段曾出现的依赖报错

图17 Veil 初始化脚本结束

图17 脚本完成环境检查并输出 Done

图18 Veil 版本与主菜单

图18 Veil 3.1.14 主菜单可正常进入

测试记录中,浏览器完成 20242423_veil.exe 的下载;Kali 侧随后出现会话建立信息,身份输出为 LOUJINLAN\11219,计算机名为 LOUJINLAN,系统架构为x64。这些信息与本机 Windows 测试对象相符。

图19 Veil 样本下载完成

图19 Windows 浏览器中的 Veil 样本下载记录

图20 Veil 样本建立会话

图20 Veil 样本的会话建立记录

图21 会话中的主机身份与系统信息

图21 会话对应的用户 计算机名与系统架构

任务管理器中还可以看到 20242423_veil.exe 的32位后台进程,当时显示的内存占用为178.8 MB。这证明截图时刻该进程存在,结合会话记录,可认定本机观察期间出现了下载、运行和回连结果。

图22 Veil 样本在任务管理器中的运行记录

图22 任务管理器中的 Veil 样本进程

原始实验记录说明测试期间实时保护保持开启,但现有共生截图没有与同一时刻的完整防护状态同屏记录,持续观察时长也未量化。前面还存在人工允许威胁的操作,而后续信任条件未逐项留存。因此,本项可记为“按实验记录,在本机防护开启条件下观察到成功回连及进程存活”,不能进一步宣称已证明长期共生、所有检测层均被绕过,或者对其他电脑同样有效。

Veil 的自动化处理会改变生成程序的表达与组织形式。可以从原理层面讨论这种变化对静态识别的影响,但本实验没有逐个隔离各项变化的贡献,不能证明具体哪种代码变化直接造成了未被即时阻止。

五 实验问题回答

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

杀软通常综合多类信息。静态分析检查文件中的内容、结构和已知特征;启发式与机器学习对可疑特征进行综合判断;行为监控观察程序运行时的系统活动;云保护把本地分析与云端数据和更新结合起来。[3][4] 浏览器及 SmartScreen 还会给出下载和应用信誉提示。[5]

本实验中,下载临时文件触发威胁记录,是下载阶段产生检测的直接证据;EICAR 的隔离记录是标准测试响应的证据。不同检测名称或延后拦截说明前后判定结果有变化,但没有足够证据确定它们分别由哪个检测层触发。明确检测机制需要与样本对应的事件日志和时间记录。

免杀是做什么

免杀通常指程序保持原有功能的同时,尝试避免被防护软件检测或阻止。评价时需要明确文件、运行环境、防护设置、观察阶段与时间范围。“下载未被删除”“一次运行成功”“建立会话”和“持续运行”各自回答不同的问题。

本实验不能把人工允许后的回连计作默认防护条件下的免杀,也不能把 JAR 未见告警但没有运行验证的情况计为功能成功。Veil 和 C 样本的结果则应保留本机测试、观察时间和后续复测的限制。

免杀的基本方法有哪些

从原理分类,常见研究方向包括改变文件内容或结构的表示形式,例如编码、压缩、重新编译及不同封装;以及研究程序运行表现与防护监控之间的关系。它们分别影响不同的检测对象,文件形式变化不能保证运行阶段也得到相同结果。

本实验涉及编码器、格式变化、UPX、自编译样本和组合处理。对照结果表明,处理步骤叠加与防护未能识别之间不存在自动成立的关系。将文件加入允许列表、关闭防护或设置排除项会改变实验条件,不属于在原有防护条件下验证成功。

六 实验结果汇总

测试对象

下载或检测现象

运行与会话结果

本次判定

原始 EXE

下载阶段触发检测

人工允许后建立会话

不计默认防护条件下的免杀

编码5次 EXE

下载阶段触发检测

没有取得成功运行记录

未达到目标

编码20次 EXE

下载阶段触发检测

没有取得成功运行记录

未达到目标

JAR

曾有下载记录 后续列表显示已删除

未完成 Java 环境下的运行验证

功能验证未完成

原始 EXE 加壳

UPX 返回节区错误

未取得成功加壳产物

加壳失败

C 样本首次测试

记录中完成下载并运行

两次会话建立后关闭

短暂回连

C 样本后续复测

运行被系统阻止

未取得新的成功会话

复测未通过

组合样本及其加壳版

有保存及信誉提示记录

据记录启动后退出 未取得会话

未达到目标 原因未确定

组合后续版本

浏览器显示下载错误

无会话结果

传输或检测原因未确定

Veil 样本

下载完成 未观察到即时阻止

会话建立 并有进程存活截图

本机观察期间取得功能结果

另一台电脑

没有实测数据

未验证

未完成

需要保留的实验限制包括:样本缺少完整哈希记录,个别生成名与运行名存在差异;跨系统日志时区未统一;未连续记录防护状态、允许项和排除项;进程观察时长未量化。这些限制使结果适合描述本次观察,不适合推断长期检出率或不同厂商之间的优劣。

七 实验感想

这次实验让我改变了“编码次数越多越不容易被检测”的想法。未编码、编码5次和20次的 EXE 都在下载阶段触发了检测。查阅编码器的设计用途后,我认识到,工具提供某个参数,并不代表这个参数能够实现自己预想的效果。

另一个收获是学会把观察到的现象和原因分开。C 样本建立过会话,随后会话关闭;组合样本没有取得会话结果。这些现象可以如实记录,但如果没有进程退出信息和防护事件,就不能直接写成“被行为检测杀掉”。同样,下载列表里的“已删除”也不能直接证明是云端处置。报告中明确不知道的部分,比补上一个听起来合理的原因更有价值。

环境排查也占用了不少时间。仅主机网络能够支持 Windows 与 Kali 的本地通信,但软件安装还需要外网;HTTP 端口占用、服务是否仍在运行以及访问地址变化,都可能影响测试。网络和服务状态应当与样本测试分别确认,否则容易把传输问题误判为程序或杀软问题。

本次最明显的不足是没有完成另一台电脑实测,也没有把样本哈希、统一时间和防护状态完整关联起来。Veil 的会话与进程截图提供了本机结果,但不能替代跨机验证。以后整理实验时,我会更重视证据的对应关系,让文件身份、运行结果与处置记录能够相互印证。

八 参考资料

[1] EICAR Download Anti Malware Testfile,访问日期2026年10月26日。

[2] Rapid7 Encoded Payloads Do Not Bypass Anti virus,访问日期2026年10月26日。

[3] Microsoft Learn Behavior monitoring in Microsoft Defender Antivirus,访问日期2026年10月26日。

[4] Microsoft Learn Cloud protection and Microsoft Defender Antivirus,访问日期2026年10月26日。

[5] Microsoft Learn Microsoft Defender SmartScreen overview,访问日期2026年10月26日。

[6] UPX 官方项目说明,访问日期2026年10月26日。

[7] Kali Linux Tools Veil 软件包说明,访问日期2026年10月26日。

posted @ 2026-10-26 22:21  娄瑾澜  阅读(3)  评论(0)    收藏  举报