Skip to content

Sakura529/Custom-Call-Stack

Repository files navigation

Custom Call Stack Shellcode Loader

项目概述

这是一个教学性的shellcode loader项目,展示了Custom Call Stacks(自定义调用栈)技术的实现原理。该项目基于对《三探堆栈欺骗之Custom Call Stacks》的研究。

技术背景

什么是堆栈欺骗?

堆栈欺骗(Call Stack Spoofing)是一种EDR绕过技术,通过伪造或清理调用堆栈来隐藏恶意代码的执行轨迹。EDR系统会分析进程的调用栈来检测可疑行为,而堆栈欺骗技术可以让恶意操作看起来像是来自合法的系统调用。

Custom Call Stacks技术

Custom Call Stacks其核心思想是:

  1. 使用Windows线程池API创建"干净"的执行环境
  2. 通过系统回调机制执行代码,调用栈看起来来自系统内部
  3. 结合间接系统调用绕过API钩子检测
  4. 多层调用栈清理进一步混淆执行轨迹

技术实现要点

1. 基础版本 (CustomCallStackLoader.cpp)

  • 线程池API使用:使用CreateThreadpoolWorkSubmitThreadpoolWork
  • 内存操作:通过NtAllocateVirtualMemoryNtProtectVirtualMemory
  • 回调执行:在线程池工作线程中执行shellcode
  • 调用栈清理:简单的栈内容清理

2. 高级版本 (AdvancedCallStackSpoofer.cpp)

  • 间接系统调用:动态获取NTDLL函数地址
  • 多层栈清理:使用lambda表达式创建深层调用栈
  • 异常处理:完善的错误处理和异常捕获
  • 内存管理:使用智能指针管理资源

3. 汇编实现 (CustomCallStack.asm)

  • 底层控制:直接操作寄存器和栈结构
  • 精确伪装:创建多层假调用栈帧
  • 系统集成:与NTDLL函数无缝集成

编译说明

使用GCC编译

# 基础版本
g++ -o CustomCallStackLoader.exe CustomCallStackLoader.cpp -lntdll

# 高级版本
g++ -o AdvancedCallStackSpoofer.exe AdvancedCallStackSpoofer.cpp -lntdll

使用Visual Studio编译

cl /EHsc CustomCallStackLoader.cpp /link ntdll.lib
cl /EHsc AdvancedCallStackSpoofer.cpp /link ntdll.lib

编译汇编文件

ml64 /c CustomCallStack.asm
link CustomCallStack.obj /SUBSYSTEM:CONSOLE

关键技术详解

1. 线程池工作机制

// 创建线程池工作项
pWork = CreateThreadpoolWork(CustomWorkCallback, &workParams, nullptr);

// 提交到线程池执行
SubmitThreadpoolWork(pWork);

2. 间接系统调用

// 动态获取NTDLL函数地址
g_NtAllocateVirtualMemory = (pNtAllocateVirtualMemory)GetProcAddress(hNtdll, "NtAllocateVirtualMemory");

// 通过函数指针调用
status = g_NtAllocateVirtualMemory(hProcess, &allocAddr, 0, &allocSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

3. 多层调用栈清理

auto lambda1 = [this]() {
    auto lambda2 = [this]() {
        auto lambda3 = [this]() {
            // 在深层lambda中执行敏感操作
            volatile int dummy[128];
            for (int i = 0; i < 128; i++) {
                dummy[i] = rand() ^ GetTickCount();
            }
        };
        lambda3();
    };
    lambda2();
};
lambda1();

参考资料

  1. 《三探堆栈欺骗之Custom Call Stacks》- fdx_xdf
  2. AlternativeShellcodeExec
  3. IoDllProxyLoad
  4. CallstackSpoofingPOC
  5. BokuLoader项目和相关研究

About

堆栈欺骗

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published