文章目录
前言
CobaltStrike自3.1.2就引入了SleepMask套件,SleepMask套件可以在http/https或dns Beacon进入sleep的时候混淆Beacon和堆。但是泄露的CS SleepMask已经被分析烂了,于是就自己写了个在睡眠状态混淆代码的Loader。
一、Bypass Moneta And Pe-sieve
1.检测原理
Pe-sieve和Moneta对可疑私有内存的检测比较类似,均是使用VirtualQuery或者NtQueryVirtualMemory或者StackWalk获取要检测的内存的信息,通过获取到的信息对内存进行一个判断。
(其中通过StackWalk获取到rip,通过判断rip的值是否在模块的地址范围内,如果在就获取其模块的名称,如果不在则说明可能是shellcode)
Pe-sieve枚举地址是否在模块内
Moneta对私有内存的检测:
1.判断内存是否为私有类型
2.判断内存是否可执行
3.判断内存是否为image并且起始地址是否没有任何模块内
4.判断线程的起始地址是否没有在任何模块内
检测原理就不再继续赘述,可以去GitHub下载源码自行查看
2.Bypass方法
私有可疑内存:
知道了他们扫描的原理之后,那么对抗的方法也很清晰了,我们可以使用VirtualQuery枚举当前进程的所有内存的AllocationBase,然后找到内存类型为RWX/RX的私有内存修改其保护类型并加密
ProcessHacker查看未加密的内存:
ProcessHacker查看加密的内存:
实现代码:
GetSystemInfo(&info);
CurrentAddr = (DWORD64)info.lpMinimumApplicationAddress;
while (CurrentAddr < (DWORD64)info.lpMaximumApplicationAddress)
{
VirtualQuery((LPCVOID)CurrentAddr, &mbi, sizeof(MEMORY_BASIC_INFORMATION));
if (((mbi.Protect == PAGE_EXECUTE_READWRITE || mbi.Protect == PAGE_EXECUTE_READ) && (mbi.Type & MEM_PRIVATE))