JoasASantos/Probabilistic-Call-Stack-PoC
GitHub: JoasASantos/Probabilistic-Call-Stack-PoC
这是一个通过随机化调用栈路径来挑战EDR检测引擎的概念验证项目。
Stars: 24 | Forks: 3
# 🧬 概率性调用栈 PoC
## 📌 关于
本项目展示了如何通过**多条独特的调用路径**执行载荷,每条路径生成**不同的调用栈**,即使最终行为完全相同。
其目的是挑战端点检测与响应(EDR)解决方案中使用的**基于签名和基于栈追踪的检测引擎**。
## ⚚️ 功能
- 🧠 **13 条随机化的封装路径**(嵌套、递归、间接、指针链、深度、分支等)
- 🔍 使用 `RtlCaptureStackBackTrace()` 和 `dbghelp` 进行**栈追踪捕获**
- 💬 **良性载荷**:用消息框模拟执行
- 📈 **每次执行的统计信息**,用于跟踪路径使用情况
- ⏱️ **辅助噪声函数**,用于改变调用栈结构(堆、时间、系统信息、环境变量)
- 🧪 可配置运行次数的**演示模式**
## 🧪 用例
- 测试 EDR 解决方案对混淆执行路径的防御能力
- 针对基于行为的检测的安全研究
- 教授控制流混淆技术
- 红队载荷投递测试
- 恶意软件分析与沙箱规避概念
## 🚀 工作原理
每次运行随机选择 13 个封装函数之一。这些封装函数包含不同风格的调用栈构建方式:
| 路径 | 描述 |
|------|------|
| A | 直接执行 |
| B | 嵌套调用 |
| C | 深度嵌套 |
| D | 函数指针间接寻址 |
| E | 递归 |
| F | 大量辅助调用 |
| G | 虚拟内存分配 |
| H | 5 层塔式调用 |
| I | 6 层深度栈并带系统调用 |
| J | 函数指针链 |
| K | 混合递归 + 嵌套 |
| L | 7 层“阶梯式”调用,带系统 + 环境变量查询 |
| M | 4 条随机路径的分支 |
所有路径最终都汇聚到 `execute_payload()` —— 一个良性的消息框。
## 🧰 编译
### 🪟 MSVC (Visual Studio Developer Command Prompt)
```
cl /EHsc /O2 probabilistic_callstack.cpp /link user32.lib dbghelp.lib
```
### 🐧 MinGW
```
g++ -O2 probabilistic_callstack.cpp -o probabilistic_callstack.exe -luser32 -ldbghelp
```
## 🖥️ 示例输出
```
EXECUTION #2
Selected: Path L (Staircase - 7 levels)
[STACK TRACE] Before wrapper execution (depth: 12 frames)
[00] 0x00007FF6AC102390 main
[01] 0x00007FF6AC101F40 run_demonstration
[02] 0x00007FF6AC101A60 execute_random_path
[03] 0x00007FF6AC100C10 wrapper_path_L_staircase
...
[PAYLOAD] Executing final payload (execution #2)
```
## 📊 统计跟踪
所有执行完成后,你将看到如下统计信息:
```
PATH USAGE STATISTICS
Path A (Direct): 1 times
Path B (Nested): 0 times
Path C (Deep): 2 times
...
```
## 📎 备注
* 未实现任何恶意行为。这是一个安全的教学演示 PoC。
* 不同路径的调用栈深度不同:从 2 帧到 10+ 帧不等。
* 非常适合研究 **EDR 如何利用栈模式关联行为**。
## ✅ 许可证
MIT 许可证
**作者:** Joas A Santos
**用途:** 仅供教育和研究使用。
标签:C++编程, DAST, DNS 反向解析, EDR测试, EDR绕过, Windows API, 恶意软件分析, 控制流混淆, 栈跟踪捕获, 概念证明, 概率调用栈, 沙盒规避, 端点可见性, 签名绕过, 网络安全, 行为检测规避, 规避技术, 调用栈混淆, 负载执行, 随机执行路径, 隐私保护, 高交互蜜罐