Uwmtor/Shellcode-Memory-Fluctuation
GitHub: Uwmtor/Shellcode-Memory-Fluctuation
一款高级内存规避 PoC,通过动态加密和内存保护属性循环切换来绕过内存扫描器检测。
Stars: 0 | Forks: 0
# Shellcode Fluctuation
[](https://opensource.org/licenses/MIT)
[](https://www.microsoft.com/)
[](https://github.com/)
[](https://isocpp.org/)
## 目录
- [概述](#overview)
- [功能特性](#features)
- [工作原理](#how-it-works)
- [RW 波动模式](#rw-fluctuation-mode)
- [PAGE_NOACCESS 模式](#page_noaccess-mode)
- [快速开始](#quick-start)
- [前置条件](#prerequisites)
- [构建](#building)
- [使用](#usage)
- [检测分析](#detection-analysis)
- [Moneta 扫描结果](#moneta-scanner-results)
- [PE-Sieve 分析](#pe-sieve-analysis)
- [技术深入解析](#technical-deep-dive)
- [内存保护机制](#memory-protection-mechanics)
- [Hook 实现](#hook-implementation)
- [加密策略](#encryption-strategy)
- [教育背景](#educational-background)
- [参考](#references)
## 概述
**Shellcode Fluctuation** 是一款先进的网络安全工具,演示了现代恶意软件和复杂的内存规避技术。该工具实现了一种在内存中隐藏 Shellcode 的新方法:
- **动态加密**:基于 XOR32 的 Shellcode 内容加密/解密
- **内存保护循环**:在 `RW`/`NoAccess` 和 `RX` 内存状态之间交替切换
- **Sleep Hook 拦截**:利用 `kernel32!Sleep` 调用进行时序控制
- **扫描器规避**:绕过 [Moneta](https://github.com/forrest-orr/moneta) 和 [pe-sieve](https://github.com/hasherezade/pe-sieve) 等工具
### 实时演示
当 Shellcode 位于 `RW` 或 `NoAccess` 内存页时,高级内存扫描器无法检测或转储它以进行分析:
| 状态 | Beacon 状态 | 扫描器检测 |
|-------|---------------|-------------------|
| **未加密** | ❌ 可见 | 🚨 **已检测** - 异常可执行内存 |
| **已加密 (波动中)** | ✅ 隐藏 | ✅ **已规避** - 无可疑可执行区域 |

## 功能特性
- **多模式操作**:支持 RW 和 PAGE_NOACCESS 波动模式
- **自感知 Shellcode**:自动检测和管理 Shellcode 边界
- **Hook 管理**:智能 Hook/Unhook 以最小化 IOC
- **内存扫描器绕过**:规避 Moneta、PE-Sieve 及类似工具
- **IOC 最小化**:减少可检测的入侵指标
- **动态保护**:实时内存保护状态更改
- **加密循环**:在 Sleep 周期期间持续加密/解密
## 工作原理
该技术通过拦截 Shellcode 进入 Sleep 状态的瞬间,并执行结合内存保护更改的加密操作来运行。
### RW 波动模式
```
graph TD
A[Shellcode Execution] --> B[Sleep Call Detected]
B --> C[Hook kernel32!Sleep]
C --> D[Encrypt Shellcode XOR32]
D --> E[Change Protection to RW]
E --> F[Unhook Sleep - Clean IOCs]
F --> G[Execute Original Sleep]
G --> H[Re-hook Sleep]
H --> I[Decrypt Shellcode]
I --> J[Restore RX Protection]
J --> A
```
**详细流程:**
1. **初始化**:使用自定义回调函数 Hook `kernel32!Sleep`
2. **注入**:通过 `VirtualAlloc` → `memcpy` → `CreateThread` 部署 Shellcode
3. **Sleep 拦截**:自定义 `MySleep` 回调函数在 Sleep 时触发
4. **加密阶段**:XOR32 加密 Shellcode + 翻转为 `PAGE_READWRITE`
5. **IOC 清理**:临时解除 Sleep Hook 以避免检测
6. **Sleep 执行**:调用原始 `::Sleep` 函数
7. **解密阶段**:还原 Shellcode + 翻转回 `PAGE_EXECUTE_READ`
8. **重新 Hook**:重新安装 Sleep Hook 以进行下一轮循环
### PAGE_NOACCESS 模式
这种高级模式受 [ORCA666 的研究](https://github.com/ORCA666/0x41) 启发,使用向量化异常处理 (VEH):
```
graph TD
A[Shellcode Execution] --> B[Sleep Call Detected]
B --> C[Encrypt + Set PAGE_NOACCESS]
C --> D[Execute Sleep]
D --> E[Shellcode Resume Attempt]
E --> F[Access Violation Exception]
F --> G[VEH Handler Triggered]
G --> H[Decrypt + Restore RX]
H --> I[Continue Execution]
I --> A
```
**主要优势:**
- **完全不可见**:Shellcode 显示为不可访问的内存
- **异常驱动**:在访问尝试时自动还原
- **增强的安全性**:比 RW 模式更难检测
## 快速开始
### 前置条件
- **操作系统**:Windows 10/11
- **编译器**:Visual Studio 2022
- **目标**:Cobalt Strike Beacon 或兼容的 Shellcode
### 构建
- 将项目下载到您的计算机。
- 打开解决方案文件 (ShellcodeFluctuation.sln)。
- 从 **Build** 菜单中选择 **Build Solution**。
### 使用
```
ShellcodeFluctuation.exe shellcode_file fluctuation_mode
```
**波动模式:**
- **`-1`** - **分析模式**:加载但不注入(IOC 基线测试)
- **`0`** - **标准模式**:注入但不波动(检测对比)
- **`1`** - **RW 模式**:在 RW 和 RX 保护之间波动
- **`2`** - **NoAccess 模式**:在 NoAccess 和 RX 保护之间波动
**使用示例:**
```
# 测试无注入的基线 IOCs
ShellcodeFluctuation.exe beacon64.bin -1
# 标准注入 (可检测)
ShellcodeFluctuation.exe beacon64.bin 0
# RW fluctuation 模式 (规避)
ShellcodeFluctuation.exe beacon64.bin 1
# PAGE_NOACCESS 模式 (最大程度规避)
ShellcodeFluctuation.exe beacon64.bin 2
```
## 检测分析
### Moneta 扫描结果
#### 基线(无波动)
```
[DETECTED] Abnormal private executable memory
Region: 0x000002210C091000 - 0x000002210C0C0000
Protection: PAGE_EXECUTE_READ
Type: MEM_PRIVATE
```
#### 启用波动
```
[CLEAN] No abnormal executable memory detected
[INFO] Modified code in kernel32.dll (expected IOC)
```
### PE-Sieve 分析
PE-Sieve 检测需要 `/data 3` 参数来识别植入的 PE 模块。该工具成功规避了标准扫描模式,但由于 kernel32 修改,可能会在高级分析中触发警报。
**检测矩阵:**
| 扫描器 | 模式 | 标准注入 | RW 波动 | NoAccess 波动 |
|---------|------|-------------------|----------------|---------------------|
| Moneta | Default | 🚨 **已检测** | ✅ **已规避** | ✅ **已规避** |
| PE-Sieve | Default | 🚨 **已检测** | ✅ **已规避** | ✅ **已规避** |
| PE-Sieve | `/data 3` | 🚨 **已检测** | ⚠️ **部分** | ⚠️ **部分** |
## 技术深入解析
### 内存保护机制
核心技术利用 Windows 内存管理 API 创建动态保护方案:
```
// Encryption + Protection Change
VirtualProtect(shellcodeAddr, size, PAGE_READWRITE, &oldProtect);
xor32(shellcodeBuffer, size, encryptionKey);
// For NoAccess mode
VirtualProtect(shellcodeAddr, size, PAGE_NOACCESS, &oldProtect);
```
### Hook 实现
Hook 机制使用快速 Trampoline 技术:
```
// x64 Trampoline
uint8_t trampoline[] = {
0x49, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mov r10, addr
0x41, 0xFF, 0xE2 // jmp r10
};
```
### 加密策略
**XOR32 实现:**
- **密钥生成**:加密安全的随机 32 位密钥
- **性能**:优化的 32 位操作,带有字节级回退
- **覆盖范围**:完整的 Shellcode 区域加密
## 清理注意事项
**重要**:在操作过程中避免 Unhook `kernel32.dll`,因为这会阻止波动机制运行。如果使用像 `unhook-bof` 这样的工具,请排除 kernel32:
```
beacon> unhook kernel32
[*] Will skip these modules: kernel32.dll
```
## 教育背景
该技术建立在内存规避的基础研究之上:
### 背景
- **[Gargoyle](https://github.com/JLospinoso/gargoyle)** 作者 Josh Lospinoso - 原始内存保护循环概念
- **[ORCA666's 0x41](https://github.com/ORCA666/0x41)** - PAGE_NOACCESS
- **[ThreadStackSpoofer](https://github.com/mgeeky/ThreadStackSpoofer)** - 互补的线程级规避
### 推荐阅读
1. **[Gargoyle: Memory Scanning Evasion](https://lospi.net/security/assembly/c/cpp/developing/software/2017/03/04/gargoyle-memory-analysis-evasion.html)**
2. **[Masking Malicious Memory Artifacts](https://www.forrest-orr.net/post/malicious-memory-artifacts-part-i-dll-hollowing)** 作者 Forrest Orr
## 参考
### 研究论文与文章
- [Masking Malicious Memory Artifacts - Part I](https://www.forrest-orr.net/post/malicious-memory-artifacts-part-i-dll-hollowing)
- [Masking Malicious Memory Artifacts - Part II](https://www.forrest-orr.net/post/masking-malicious-memory-artifacts-part-ii-insights-from-moneta)
- [Masking Malicious Memory Artifacts - Part III](https://www.cyberark.com/resources/threat-research-blog/masking-malicious-memory-artifacts-part-iii-bypassing-defensive-scanners)
- [Hook Heaps and Live Free](https://www.arashparsa.com/hook-heaps-and-live-free/)
### 相关工具
- [Moneta](https://github.com/forrest-orr/moneta) - 用于检测恶意产物的内存扫描器
- [PE-Sieve](https://github.com/hasherezade/pe-sieve) - 扫描 Inline Hook 和其他修改
- [BeaconEye](https://github.com/CCob/BeaconEye) - Beacon 配置提取器
- [ThreadStackSpoofer](https://github.com/mgeeky/ThreadStackSpoofer) - 线程调用堆栈欺骗
## 许可证
本项目采用 MIT 许可证授权。有关更多信息,请参阅 [LICENSE 文件](LICENSE)。
**⚠️ 免责声明 ⚠️**
*本工具仅供教育和授权安全测试目的提供。作者不对因滥用或本软件造成的损害承担任何责任。*
**持续学习**
标签:C++, Conpot, DNS 反向解析, EDR绕过, Moneta, OpenAI, PE-Sieve, Shellcode波动, Sleep Hook, SSH蜜罐, Windows安全, 中高交互蜜罐, 免杀技术, 内存保护, 内存规避, 内核对象操作, 动态加密, 恶意软件开发, 数据擦除, 暴力破解检测, 权限翻转, 概念验证, 端点可见性, 网络安全, 进程注入, 隐私保护, 高交互蜜罐