1.Cobaltstricke生成原生exe,直接点击上线

  • 这里会去访问我们C2服务器的一个地址,如下:

  • 访问C2的地址查看内容,内容看不懂

  • 利用OD,断API——HttpOpenRequestA


为什么要断这个api呢?来看看这个api的功能,官方解释

  • 用于发送一个HTTP服务器的请求,断在这里我们就可以查看我们需要查找的ip。

  • 下面来到这个API

  • 断住之后发现其信息如下:


  • ip和端口直接可以看到,这个/B6sq 里面的内容应该就是让机器去反向链接这个ip和端口的,继续往下分析

  • 断API,VirtualAlloc(这里是申请内存的地方)

  • 这里发现把edi+edx 给al edx就是移动位数,然后把ebp+0x8给edi,然后有一次异或解密,ebx里面就是解密后的原文shellcode

  • 这里看出来ebp+0x10是一张加密表,ebp+0x8就是异或混淆后的数据,那么在xor一次就异或回来了

  • 然后在去VirtualProtect CreateThread

  • 原生的这个很小的exe会去下载一个文件然后在加载这个文件,申请内存,xor解密,然后创建线程运行。

  • 到此为止,stage的基本流程就分析完了。如果分析stageless就自己可以去分析,方式方法也差不多。下面是具体的一个流程介绍。

具体流程分析:

  • stage

  1. 申请内存(allocate memory)

  2. 复制Stager去这一块儿内存里

  3. 创建个线程,运行这个Stager

  4. 这个Stager会再次申请块儿内存 (allocate memory)

  5. Stager去下载加密的payload,写入申请的内存中

  6. Stager把执行流程转递给这个加密的payload

  7. 加密的payload自解密成Rellective DLL

  8. 然后把执行流程传递始Reflective DLL

  9. efective DLL申请个块儿内存 (llocate memory)

  10. 然后初始化自己在新的内存里面

  11. 最后elecive DLL调用payload的入口点的函数

  12. 上线

  • stageless

  1. 申请内存(allocate memory)

  2. 复制Stager到内存

  3. 创建线程,运行Stager

  4. Reflective DLL 申请内存

  5. 在内存中进行初始化

最后Reflective DLL调用payload的入口点函数

总结

分析cobaltstricke原生的exe,通过查看其winapi发现cobaltstricke生成远控木马的原理和方式。方便研究员去魔改我们的C2去修改我们的生成方式,并且绕过杀软的检测。
我们去分析一个远控exe的一个大概流程也和这个步骤大致是相似的。内容比较简单,大佬勿喷。