20242318 2026-2027-1 《网络与系统攻防技术》实验三实验报告
20242318 2026-2027-1 《网络与系统攻防技术》实验三实验报告
1. 基础知识
本次实验用到的核心知识点整理如下:
- Shellcode:一段可以直接被CPU执行的机器码,本身没有独立的PE文件结构,需要嵌入到合法进程中申请可执行内存后运行,通常是攻击者用来获取目标主机控制权的核心代码段。
- MSF编码器:Metasploit框架自带的编码工具,通过对原始Shellcode做字节变换、多态加密,改变Shellcode的静态字节特征,避免被特征码查杀。实验中用的
shikata_ga_nai是多态编码器,每次编码生成的Shellcode字节都不一样,多次迭代编码可以进一步降低特征重合度。 - 加壳技术:对可执行文件做压缩或加密处理,把原始代码段隐藏起来,程序运行时在内存里动态解密/解压还原。其中UPX是常见的压缩壳,主要作用是减小文件体积;Hyperion是PE加密壳,会对代码段做两阶段加密,改变文件整体结构。
- 多引擎扫描平台:VirScan这类平台把样本上传后,会同时调用几十种杀毒引擎的病毒库进行检测,检出数越低说明样本的静态免杀效果越好,是评估免杀效果的标准工具。
- Windows Defender:Windows系统自带的杀毒软件,同时具备静态特征匹配和实时行为监控能力,不仅会扫文件里的恶意特征码,还会在程序运行时监控它的行为,发现反向连接、分配可执行内存等典型恶意操作时直接拦截。
实验要求问题回答
(1)杀软是如何检测出恶意代码的?
现在主流杀软是分层检测的:第一层是静态特征检测,直接扫描文件内容,和病毒库里已知的恶意代码特征码做字节匹配,命中就直接报毒;第二层是启发式检测,不依赖已知特征,通过静态结构判断文件有没有加壳、有没有可疑的代码片段,对未知恶意软件做粗筛;第三层是动态行为监控,程序运行时追踪它的实际操作,比如有没有偷偷连接陌生IP、有没有申请可执行内存、有没有注入其他进程,只要行为符合恶意程序的特征就直接拦截,哪怕文件本身没在病毒库里。
(2)免杀是做什么?
免杀就是通过各种技术手段修改恶意代码的特征,让它绕开杀毒软件的检测规则:一方面要改掉静态字节特征,骗过静态特征扫描;另一方面要尽量伪装运行行为,不触发动态行为告警,最终让恶意程序能在目标主机上正常运行不被拦截,成功建立控制会话。
(3)免杀的基本方法有哪些?
常见的免杀方法大概分几类:一是编码加密,对原始Shellcode做多轮多态编码,打乱静态字节片段;二是加壳,给可执行文件加压缩壳或加密壳,隐藏原始代码段;三是源码改造,自己写C代码把Shellcode嵌入原生程序,去掉工具自动生成的标志性PE特征;四是代码混淆,在正常代码里插入无意义的干扰指令,打乱程序的执行流,避免被静态匹配到关键片段;五是行为伪装,把恶意操作伪装成正常系统程序的行为,绕过动态行为监控。
2. 实验内容
- 熟练使用msf编码器、Veil-Evasion、加壳工具等免杀工具,掌握C语言嵌入Shellcode的编程方法,能通过msfvenom生成jar、php等不同格式的后门文件。
- 组合应用多种免杀技术实现恶意代码免杀,成功后用简单语言说明免杀原理,截图验证和杀软共存的结果。
- 在另一台Windows电脑上实测,在杀软开启的状态下验证程序运行与回连情况,记录测试机的杀软名称与版本。
3. 实验过程
3.1 MSF编码器基础免杀
首先用msfvenom生成原始反向TCP后门的Shellcode,分别做单次shikata_ga_nai编码、10次迭代多态编码,另外生成jar、php两种脚本格式的后门样本,对比不同编码方式的特征差异。
3.2 Veil-Evasion工具免杀
Veil是专门的开源免杀工具集,集成了自动代码混淆、加密的功能,启动后选择对应的payload生成器,工具会自动做代码混淆处理,生成可执行后门文件。
从检测结果看,Veil自动混淆的样本检出率比原生msfvenom生成的exe(15/48)下降了近一半,工具内置的多层混淆比手动单次编码的效果好很多。
3.3 C语言调用Shellcode源码级免杀
把msfvenom生成的C格式Shellcode数组嵌入自己写的C代码里,通过调用Windows API申请一块可执行内存,把Shellcode复制进去再跳转到对应地址执行,最后用MinGW编译成原生exe,去掉msfvenom自动生成的PE文件标志性特征。
3.4 加壳工具免杀
3.4.1 UPX压缩壳
对上面C语言编译出来的原生exe做UPX压缩加壳,压缩后文件体积变小,同时整个PE文件的节区结构会被改变,文件哈希值也会变化。
3.4.2 Hyperion加密壳
Hyperion是专门的PE加密壳,会对程序的代码段做两阶段加密,运行时才在内存里解密执行,进一步改变文件的静态结构。
这里和最开始的预期不一样:Hyperion加壳之后检出率反而升高了,原因是Hyperion的加壳特征已经被主流杀毒引擎收录,加了它反而会被标记为“可疑加壳程序”,反而更容易被查杀。
3.5 组合免杀方案
把前面学过的技术叠在一起:先用msfvenom生成10次迭代shikata_ga_nai编码的C格式Shellcode,嵌入C代码编译成原始组合版exe(multi_raw_20242318.exe),然后先加UPX压缩壳,再叠加Hyperion加密壳,对比多层组合后的免杀效果。
组合免杀原理:多次多态编码打乱了原始Shellcode的特征字节片段,C语言原生编译去掉了msfvenom生成的标志性PE头特征,UPX压缩改变了文件的节区结构和整体哈希值,三层叠加之后,绝大多数杀软的静态特征码都匹配不上这个文件,所以检出率降到了3/48。但再叠Hyperion之后检出率又回升到20/48,再次验证Hyperion的已知特征反而会拖低免杀效果。
3.6 真机杀软回连实测
测试机为Windows 11 24H2,使用系统自带的Windows Defender杀毒软件(系统安全智能版本为最新自动更新状态,实时保护默认开启)。Kali端启动msf的handler监听端口2409,首先在实时保护开启的状态下运行免杀样本:
可以看到哪怕这个样本在VirScan上只有3个引擎报毒,Defender还是直接把它拦了,提示“无法成功完成操作,因为文件包含病毒或潜在的垃圾软件”,程序完全无法运行。之后临时关闭实时保护,再次运行样本,成功建立Meterpreter反向连接会话:
从sysinfo输出可以看到目标系统是Windows 11 24H2,x64架构,证明程序本身功能完全正常,之前的拦截是Defender的动态行为监控导致的。
4. 问题及解决方案
-
问题1:Kali里生成的exe文件没法拖拽到Windows主机,复制一直卡住
问题1解决方案:一开始以为是VMware-tools的故障,折腾了半天重启也没用,后来才发现是因为很多文件是用sudo命令生成的,文件所有者是root用户,普通kali用户没有读取权限,VMware的拖拽服务自然读不到文件。用chmod 777给桌面的文件加完权限之后就能正常拖拽了;后面遇到拖拽彻底失效的情况,直接在Kali里开python临时http服务,Windows端浏览器直接访问地址下载文件,完全绕开VMware的拖拽功能,反而更快更稳。 -
问题2:Kali里火狐浏览器突然崩溃,打不开网页没法上传VirScan检测
问题2解决方案:一开始以为是虚拟机内存不够,后来在终端执行pkill firefox杀掉残留的崩溃进程,再重新启动firefox就正常打开了,不用重启整个虚拟机,省了好多时间。 -
问题3:执行chmod命令的时候提示找不到multi_upx_20242318.exe文件
问题3解决方案:之前UPX加壳命令是在用户主目录下执行的,文件直接生成在~/路径里,我误以为之前已经把文件复制到桌面了,实际桌面根本没有这个文件。先把文件从主目录复制到桌面,再执行权限修改就成功了。 -
问题4:Hyperion加密生成的文件复制到桌面之后还是拖不出来
问题4解决方案:Hyperion是用sudo wine运行的,生成的文件所有者是root,光加chmod权限不够,需要用sudo chown把文件所有者改成普通kali用户,再调整权限才能正常复制到Windows。
5. 学习感悟、思考
这次实验做下来比之前做Pwn实验的时候感受实在多了,以前看网上教程总觉得免杀就是随便给后门加个壳就能躲过杀毒,真自己动手做才发现根本不是那么回事——不是壳加得越多越好,Hyperion就是最典型的反例,加完反而更容易被查杀;也不是静态扫描检出率低就真的能在实战里跑起来,哪怕VirScan上只有3个引擎报毒,Defender光靠行为监控,看到程序一运行就往外连陌生IP、申请可执行内存,直接就给拦了。
中间踩了好多权限相关的坑,最开始文件拖不出来的时候特别急,翻来覆去检查VMware设置折腾了快半小时,后来才慢慢摸清楚规律:只要是sudo生成的文件,普通用户默认都没权限读,要么改权限要么开http服务传文件,后面再遇到类似问题就没那么慌了。
做完最大的感触是,攻防本来就是永远在迭代的猫鼠游戏:现在好用的免杀方法,过几个月杀软特征库更新了就失效了,比如Veil刚出来的时候几乎零检出,现在也有8个引擎能报出来。这也能理解为什么现在企业都在推EDR而不是只靠传统杀毒了,纯静态特征的检测确实防不住改改特征的后门,行为监控才是现在的主流防线。反过来想,平时自己用电脑的时候,哪怕一个文件在VirScan上检出率很低,也别随便双击运行,动态行为监控才是最后一道靠谱的防线。

浙公网安备 33010602011771号