MemoryEvasion
一个面向红队人员的 Cobalt Strike 内存规避加载器,支持 x86/x64 stager/stagerless 载荷及 profile(已在 windows7/10、winserver 2012 上测试)
如何实现规避?
- 在 shellcode 加载到内存之前,Hook Sleep、CreateProcessA、CreateHeap、GetProcessHeap 函数。
- 为 beacon 的 profile 创建一个新的堆。当 beacon 调用 GetProcessHeap 或 CreateHeap 函数时,返回新堆的句柄。
- 当 beacon 调用 sleep 函数时,我们对 beacon 和 profile 所在的内存进行加密,当 sleep 结束后再对其进行解密。
为什么 Hook GetProcessheap 和 CreateHeap
- 64 位 beacon 调用 GetProcessHeap 来获取 beacon profile 的内存。
- 32 位 beacon 不会调用 GetProcessHeap 来获取 beacon profile 的内存。它使用 CreateHeap 创建新堆,并从该堆中获取内存来存储 beacon 的 profile。
演示

参考
如果没有以下项目,本项目将无法实现: