浅析cobalStrick原生exe

CobalStrick生成原生exe,直接点击上线

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

image-20220426154401527

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

image-20220426154832942

  • 利用OD,断API——HttpOpenRequestA

image-20220426155504631

  • 来到这个API

image-20220426155649768

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

image-20220426155824909

image-20220426155913632

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

image-20220426161540787

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

image-20220426162024525

  • 这里看出来ebp+0x10是一张加密表,ebp+0x8就是异或混淆后的数据,那么在xor一次就异或回来了
  • 然后在去VirtualProtect CreateThread
  • 原生的这个很小的exe会去下载一个文件然后在加载这个文件,申请内存,xor解密,然后创建线程运行。

具体的一个流程:

  • 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. 在内存中进行初始化
  6. 最后Reflective DLL调用payload的入口点函数