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, 恶意软件分析, 控制流混淆, 栈跟踪捕获, 概念证明, 概率调用栈, 沙盒规避, 端点可见性, 签名绕过, 网络安全, 行为检测规避, 规避技术, 调用栈混淆, 负载执行, 随机执行路径, 隐私保护, 高交互蜜罐