Uwmtor/Shellcode-Memory-Fluctuation

GitHub: Uwmtor/Shellcode-Memory-Fluctuation

一款高级内存规避 PoC,通过动态加密和内存保护属性循环切换来绕过内存扫描器检测。

Stars: 0 | Forks: 0

# Shellcode Fluctuation [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Platform](https://img.shields.io/badge/Platform-Windows-blue.svg)](https://www.microsoft.com/) [![Architecture](https://img.shields.io/badge/Architecture-x86%20%7C%20x64-green.svg)](https://github.com/) [![Language](https://img.shields.io/badge/Language-C%2B%2B-orange.svg)](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 状态 | 扫描器检测 | |-------|---------------|-------------------| | **未加密** | ❌ 可见 | 🚨 **已检测** - 异常可执行内存 | | **已加密 (波动中)** | ✅ 隐藏 | ✅ **已规避** - 无可疑可执行区域 | ![Comparison](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fa0269078b205616.png) ## 功能特性 - **多模式操作**:支持 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安全, 中高交互蜜罐, 免杀技术, 内存保护, 内存规避, 内核对象操作, 动态加密, 恶意软件开发, 数据擦除, 暴力破解检测, 权限翻转, 概念验证, 端点可见性, 网络安全, 进程注入, 隐私保护, 高交互蜜罐