GoPhantom 是一个为红队演练和安全研究设计的下一代荷载加载器(Payload Loader)生成器。它利用 Go 语言的强大功能,将原始的 Shellcode 和一个诱饵文件打包成一个独立的、具有较强免杀(AV-Evasion)能力的 Windows 可执行文件。
- 多层加密: XOR + zlib压缩 + AES-256-GCM三重保护
- 动态密钥派生: 使用Argon2id从随机Salt派生AES-256密钥,密钥本身永不存储
- Shellcode变异: 可选的代码变异功能,插入无害NOP指令破坏静态特征
- 睡眠混淆: 程序睡眠期间使用随机密钥加密内存荷载,规避内存扫描
- 内存权限分离: 采用RW→RX内存操作模式,规避EDR行为检测
- 反沙箱检测: 通过CPU核心数、物理内存、VM注册表等多维度检测分析环境
- 动态API解析: 避免静态导入表暴露敏感API调用
- 行为伪装: 执行前模拟正常程序行为模式
- 诱饵文件: 支持PDF、图片、文档等格式,提高社工攻击成功率
- 数据压缩: zlib压缩可减少20-30%的文件体积
- 持久运行: 程序稳定持续运行,不会自动退出或清理
- 纯Go实现: 无CGO依赖,保证跨平台编译兼容性
./GoPhantom-v1.3 -decoy <诱饵文件> -payload <荷载文件> -out <输出文件> [选项]
必需参数:
-decoy 诱饵文件路径 (PDF、图片、文档等)
-payload x64 shellcode文件路径
-out 输出可执行文件名
可选参数:
-compress 启用数据压缩 (默认: true)
-obfuscate 启用睡眠混淆
-mutate 启用shellcode变异
基本加载器生成:
./GoPhantom-v1.3 -decoy "document.pdf" -payload "beacon.bin" -out "loader.exe"
完整功能加载器:
./GoPhantom-v1.3 -decoy "image.jpg" -payload "shell.bin" -out "advanced.exe" \
-compress -obfuscate -mutate
git clone https://github.com/watanabe-hsad/GoPhantom.git
cd GoPhantom
go build -ldflags "-s -w" -o GoPhantom-v1.3 generator.go
GoPhantom采用两阶段执行模式:生成阶段和执行阶段。
在攻击机上运行生成器创建最终的加载器程序:
- 数据预处理: 读取shellcode和诱饵文件,进行XOR变换和zlib压缩
- Salt生成: 自动生成16字节随机Salt(或从环境变量读取)
- 密钥派生: 使用Argon2id从Salt派生32字节AES-256密钥
- 多层加密: 使用派生密钥和AES-256-GCM算法加密处理后的数据
- 模板注入: 将加密数据和Salt以Base64格式嵌入Go加载器模板
- 交叉编译: 编译为windows/amd64平台的PE可执行文件
目标机器上的加载器执行流程:
- 环境检测: 执行反沙箱和反VM检测,不符合条件则退出
- 行为伪装: 模拟正常程序的启动行为模式
- 密钥重建: 从自身提取Salt,重新派生AES密钥
- 数据解密: 解密诱饵文件和shellcode数据
- 诱饵展示: 释放并打开诱饵文件转移用户注意力
- 内存准备: 申请RW权限内存,写入解密的shellcode
- 可选处理: 根据配置进行shellcode变异或睡眠混淆
- 权限切换: 将内存权限修改为RX,准备执行
- 独立执行: 创建新线程执行荷载,主进程立即退出
明文 → XOR变换 → zlib压缩 → AES-256-GCM加密 → Base64编码 → 嵌入模板
沙箱检测 → 行为伪装 → 解密诱饵文件 → 显示诱饵 →
解密荷载 → [变异处理] → 内存执行 → 清理退出
- CPU核心数量验证
- 物理内存大小检查
- 虚拟机注册表检测
- 磁盘空间分析
- 动态字符串反混淆
通过手动指定Salt实现可复现构建,确保相同输入生成相同输出:
生成自定义Salt:
# Linux/macOS/Git Bash
echo 'package main; import "crypto/rand"; import "encoding/base64"; import "fmt"; func main() { b := make([]byte, 16); _, _ = rand.Read(b); fmt.Println(base64.StdEncoding.EncodeToString(b)) }' > temp_salt.go && go run temp_salt.go && rm temp_salt.go
# Windows CMD/PowerShell
echo 'package main; import "crypto/rand"; import "encoding/base64"; import "fmt"; func main() { b := make([]byte, 16); _, _ = rand.Read(b); fmt.Println(base64.StdEncoding.EncodeToString(b)) }' > temp_salt.go && go run temp_salt.go && del temp_salt.go
使用自定义Salt:
# Linux/macOS
export GOPHANTOM_SALT="y5M3H+e8vU/HeaJg2w9bEA=="
./GoPhantom-v1.3 -decoy "info.txt" -payload "calc_x64.bin" -out "reproducible.exe"
# Windows PowerShell
$env:GOPHANTOM_SALT="y5M3H+e8vU/HeaJg2w9bEA=="
./GoPhantom-v1.3 -decoy "info.txt" -payload "calc_x64.bin" -out "reproducible.exe"
启用睡眠混淆: 在目标机器执行前设置环境变量:
# PowerShell
$env:GPH_OBFUS=1
# Bash
export GPH_OBFUS=1
- Go 1.19 或更高版本
- 支持交叉编译到Windows平台
-
克隆项目仓库:
git clone https://github.com/watanabe-hsad/GoPhantom.git cd GoPhantom
-
准备测试文件:
- 将shellcode文件(如
beacon.bin
)放入项目目录 - 准备诱饵文件(如
document.pdf
)
- 将shellcode文件(如
-
生成加载器:
# 源码方式 go run generator.go -decoy "info.txt" -payload "calc_x64.bin" -out "hello.exe" # 二进制方式 ./GoPhantom-v1.3 -decoy "info.txt" -payload "calc_x64.bin" -out "hello.exe"
简单模式 (默认) 程序自动生成随机Salt,每次生成唯一加载器:
./GoPhantom-v1.3 -decoy "info.txt" -payload "calc_x64.bin" -out "hello.exe"
可复现模式 (高级) 指定固定Salt,实现可复现构建:
export GOPHANTOM_SALT="your-base64-salt-here"
./GoPhantom-v1.3 -decoy "info.txt" -payload "calc_x64.bin" -out "reproducible.exe"
在目标Windows机器上执行生成的loader:
- 自动打开诱饵文件转移注意力
- 后台静默执行shellcode荷载
GoPhantom/
├── generator.go # 主生成器程序
├── internal/
│ └── keymgr/
│ └── keymgr.go # 密钥管理模块
├── image/ # 演示截图
├── *.bin # 示例shellcode文件
├── *.exe # 生成的加载器
└── README.md # 项目文档
- ✅ 移除自删除功能,提升程序稳定性
- ✅ 优化程序持久运行机制
- ✅ 修复进程自动退出问题
- ✅ 增强shellcode变异算法
- ✅ 优化睡眠混淆机制
- ✅ 改进反沙箱检测精度
- ✅ 新增睡眠混淆功能
- ✅ 支持shellcode变异
- ✅ 增强反VM检测
- ✅ 引入Argon2id密钥派生
- ✅ 支持可复现构建
- ✅ 添加zlib数据压缩
严禁将此工具用于任何非法活动。本项目的作者不对任何因滥用或非法使用此工具而导致的直接或间接后果承担任何责任。用户应对自己的所有行为负责。
使用本工具即表示您已阅读、理解并同意遵守此免责声明。
如果这个项目对您有帮助,请考虑给个⭐Star支持一下!
有问题或建议?欢迎提交Issue或Pull Request。