GoPhantom 是一个为红队演练和安全研究设计的下一代荷载加载器(Payload Loader)生成器
GoPhantom 是一个为红队演练和安全研究设计的下一代荷载加载器(Payload Loader)生成器。它利用 Go 语言的强大功能,将原始的 Shellcode 和一个诱饵文件打包成一个独立的、具有较强免杀(AV-Evasion)能力的 Windows 可执行文件。
核心功能 (Core Features)
🔐 加密与混淆
- 多层加密: XOR + zlib压缩 + AES-256-GCM三重保护
- 动态密钥派生: 使用Argon2id从随机Salt派生AES-256密钥,密钥本身永不存储
- Shellcode变异: 可选的代码变异功能,插入无害NOP指令破坏静态特征
- 睡眠混淆: 程序睡眠期间使用随机密钥加密内存荷载,规避内存扫描
🛡️ 免杀技术
- 内存权限分离: 采用RW→RX内存操作模式,规避EDR行为检测
- 反沙箱检测: 通过CPU核心数、物理内存、VM注册表等多维度检测分析环境
- 动态API解析: 避免静态导入表暴露敏感API调用
- 行为伪装: 执行前模拟正常程序行为模式
📦 实用功能
- 诱饵文件: 支持PDF、图片、文档等格式,提高社工攻击成功率
- 数据压缩: zlib压缩可减少20-30%的文件体积
- 持久运行: 程序稳定持续运行,不会自动退出或清理
- 纯Go实现: 无CGO依赖,保证跨平台编译兼容性
使用方法 (Usage)
二进制版本使用
./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
工作原理 (How it Works)
GoPhantom采用两阶段执行模式:生成阶段和执行阶段。
生成阶段 (Generator Phase)
在攻击机上运行生成器创建最终的加载器程序:
- 数据预处理: 读取shellcode和诱饵文件,进行XOR变换和zlib压缩
- Salt生成: 自动生成16字节随机Salt(或从环境变量读取)
- 密钥派生: 使用Argon2id从Salt派生32字节AES-256密钥
- 多层加密: 使用派生密钥和AES-256-GCM算法加密处理后的数据
- 模板注入: 将加密数据和Salt以Base64格式嵌入Go加载器模板
- 交叉编译: 编译为windows/amd64平台的PE可执行文件
执行阶段 (Runtime Phase)
目标机器上的加载器执行流程:
- 环境检测: 执行反沙箱和反VM检测,不符合条件则退出
- 行为伪装: 模拟正常程序的启动行为模式
- 密钥重建: 从自身提取Salt,重新派生AES密钥
- 数据解密: 解密诱饵文件和shellcode数据
- 诱饵展示: 释放并打开诱饵文件转移用户注意力
- 内存准备: 申请RW权限内存,写入解密的shellcode
- 可选处理: 根据配置进行shellcode变异或睡眠混淆
- 权限切换: 将内存权限修改为RX,准备执行
- 独立执行: 创建新线程执行荷载,主进程立即退出
技术原理 (Technical Details)
加密流程
明文 → XOR变换 → zlib压缩 → AES-256-GCM加密 → Base64编码 → 嵌入模板
执行流程
沙箱检测 → 行为伪装 → 解密诱饵文件 → 显示诱饵 →
解密荷载 → [变异处理] → 内存执行 → 清理退出
反检测技术
- CPU核心数量验证
- 物理内存大小检查
- 虚拟机注册表检测
- 磁盘空间分析
- 动态字符串反混淆
高级配置 (Advanced Configuration)
可复现构建模式
通过手动指定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
安装与使用 (Installation & Usage)
环境要求
- 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"
演示截图 (Demo Screenshots)
生成过程
免杀效果
执行效果
在目标Windows机器上执行生成的loader:
- 自动打开诱饵文件转移注意力
- 后台静默执行shellcode荷载
项目结构 (Project Structure)
GoPhantom/
├── generator.go # 主生成器程序
├── internal/
│ └── keymgr/
│ └── keymgr.go # 密钥管理模块
├── image/ # 演示截图
├── *.bin # 示例shellcode文件
├── *.exe # 生成的加载器
└── README.md # 项目文档