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 主机名与 HTTP 200 及 LAB-OK 返回结果
防护状态记录
基线输出识别到 Windows Defender,运行模式为 Normal,AntivirusEnabled 与 RealTimeProtectionEnabled 均为 True。产品、引擎和病毒库版本见实验环境表。该快照用于说明基线时刻的防护状态,不能替代每次样本测试时的同步状态记录。

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

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

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

图6 原始样本回连记录 该结果具有人工允许这一前提
本组实验能够支持“在本机当次测试中,编码5次和20次均未避免检测”。同一威胁名称可能覆盖不同特征或模型判定,因此不能进一步断言所有样本的解码部分完全不变,也不能把这一结果推广为所有编码器在所有环境下均无效。
JAR 文件对照
JAR 样本 20242423.jar 的生成记录显示最终大小为 5265字节,随后浏览器出现该文件的下载记录。因测试机未完成相应 Java 运行条件下的运行验证,本项没有取得 JAR 的会话结果。

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

图8 扫描记录中列出的三个 EXE 文件
本项完成了文件形式的生成与下载观察,尚未完成运行功能验证。实验记录不足以把“当时没有看到该文件的告警”写成“JAR 格式可以绕过静态扫描”。
UPX 加壳对照
对原始 EXE 的加壳尝试返回 CantPackException: section size problem,统计结果为0个成功、1个错误。该现象说明 UPX 未接受本次输入文件的节区布局,不能扩展为所有同类 EXE 都不兼容 UPX。

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

图10 UPX 压缩前后大小与成功统计 终端结果局部
C 样本的运行与复测
自编译 C 样本命名为 20242423_loader.exe,目录记录显示大小约107K。记录中该样本曾完成下载和运行,Kali 侧先后出现 session 2 与 session 3 的建立信息,随后又出现会话关闭和 Reason: Died。

图11 C 样本会话建立及关闭记录 左侧终端局部
这一现象证明该次测试中出现了实际会话,也说明会话未保持稳定。会话退出可能涉及程序退出、通信或防护处置等原因;现有截图没有给出足够的诊断信息,不能直接归因于某一种机制。
后续对该类样本的运行尝试出现“文件包含病毒或潜在的垃圾软件”提示,说明复测时执行已受到阻止。由于缺少前后文件哈希、同步防护状态与完整事件日志,不能仅凭时间先后断言云端完成了延迟判定。

图12 Windows 对后续运行尝试的阻止提示
本项结果应表述为“本机曾观察到短暂回连,后续复测受到阻止”。自编译改变了文件组织和外部特征,但现有结果没有证明其获得长期或跨环境的规避效果。
组合处理样本
组合组采用数据表示变换、重新编译及加壳进行比较,包含 20242423_xor_loader.exe、20242423_xor_loader_upx.exe 和后续版本。记录中的数据长度为355字节。本组重点观察文件形式变化后,下载、启动和会话结果是否同时改善。
浏览器对部分组合样本显示“不常下载”及未知发布者提示。这些属于信誉风险提示,与明确的恶意软件命中并非同一类证据。[5]

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

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

图15 下载错误与已删除状态的记录 删除和下载失败原因未由该图单独确定
组合处理没有在本次测试中带来更完整的功能结果。文件能够保存和程序能够建立稳定会话需要分别验证,不能把前一项成功自动视为后一项成功。
Veil 安装与本机验证
Veil 的安装过程中遇到软件源索引和 Wine 依赖问题。依赖日志中出现过 Python 安装失败及目录缺失提示;随后脚本输出 Done,并能进入 Veil 3.1.14 主菜单。安装脚本结束只能说明该次流程已结束,主菜单可用则进一步证明主程序可以启动,不能据此推定所有组件都已修复。[7]

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

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

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

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

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

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

图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日。

浙公网安备 33010602011771号