该仓库演示了一种使用计时器动态伪造调用栈的 PoC 技术。在我们的植入体进入睡眠之前,我们可以排队计时器,用伪造的调用栈覆盖其调用栈,然后在恢复执行之前还原原始调用栈。因此,就像我们可以在睡眠期间屏蔽属于植入体的内存一样,我们也可以屏蔽主线程的调用栈。
有关完整的技术详解,请参阅随附的博客文章:https://www.cobaltstrike.com/blog/behind-the-mask-spoofing-call-stacks-dynamically-with-timers/。
默认情况下,该 PoC 会模仿取自 spoolsv.exe 的静态调用栈:

如果提供了 --dynamic 标志,CallStackMasker 将枚举所有可访问的线程,找到处于所需状态(WaitForSingleObjectEx)的线程,并模仿其调用栈和起始地址。如下所示:

注意:需要提醒的是,该 PoC 已在以下 Windows 构建版本上测试:
22h2 (19045.2486)
尚未在其他版本上测试,并且在不同 Windows 构建版本上可能会失效。