深入解析 Cobalt Strike 原生 EXE

CobaltStrike生成原生EXE,一键上线

CobaltStrike生成的原生EXE直接点击即可上线。在这个过程中,会访问C2服务器上的一个地址,但内容却难以理解。

图片[1]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛
图片[2]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛

利用OD(逆向工程软件),拦截API——HttpOpenRequestA。

图片[3]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛

为什么拦截这个API呢?通过官方解释可知,它用于向HTTP服务器发送请求,拦截后我们可以查看需要查找的IP地址。

图片[4]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛

进入API后,我们发现以下信息:

IP地址和端口直接可见,其中”/B6sq”的内容应该是让机器去反向链接该IP地址和端口的指令。继续分析下去,我们拦截API,如VirtualAlloc(内存分配),在这里发现一次异或解密。

图片[5]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛
图片[6]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛
图片[7]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛

通过分析,我们发现ebp+0x10是加密表,ebp+0x8是异或混淆后的数据,进行一次异或即可解密。接着进行VirtualProtect和CreateThread。

图片[8]-深入解析 Cobalt Strike 原生 EXE-山海云端论坛

这个小型的原生EXE会下载一个文件,加载到内存中,进行内存申请、异或解密,然后创建线程运行。

到此,stage的基本流程分析完毕。如果要分析stageless,可以自行进行,方法类似。

具体流程分析如下:

Stage流程:

  1. 申请内存
  2. 复制Stager到内存中
  3. 创建线程,运行Stager
  4. Stager再次申请内存
  5. 下载加密的payload,写入申请的内存中
  6. 执行加密的payload,自解密成Reflective DLL
  7. 执行Reflective DLL,调用payload的入口函数

Stageless流程:

  1. 申请内存
  2. 复制Stager到内存中
  3. 创建线程,运行Stager
  4. Reflective DLL申请内存
  5. 在内存中初始化
  6. 调用payload的入口函数

总结:

通过分析CobaltStrike生成的原生EXE,我们可以发现其生成远控木马的原理和方式。这为研究员提供了修改C2生成方式、绕过杀软检测的便利。对于分析其他远控EXE的大致流程也是有帮助的。文章内容简洁明了,方便理解。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容