逆向CS生成的exe马

前言

Cobalt Strike(以下简称CS)是红队在渗透攻击中的一款神器,使用稳定,功能全面。本文是对CS生成的exe文件进行分析,看看CS生成的木马有什么高明之处。

 

准备工作

工具准备:Cobalt Strike

ida

x32dbg

exeinfope

 

CS能生成的木马有很多种,如下图所示:

这里我不一一介绍,有兴趣的同学自行去研究。我们这里先选择Windows Executable

注:

Windows Executable     生成可执行的分段payload

Windows Executable(S) 生成可执行的不分段Payload

生成之后我们会得到一个exe文件,这是我们今天进行逆向的主角。

 

逆向分析

CS生成的exe其实是一个loder,也就是加载器,加载器加载里面的shellcode来运行主要功能,所以我们进行逆向分析的时候也分成两个步骤:外层loder分析和内层shellcode分析。

外层loder分析

我们先用exeinfope对文件进行简单了解

无壳。接下来扔进IDA进行静态分析。

main函数这里调用了两个函数之后调用了一个Sleep,跟进27F0发现没什么东西,我们直接看1840

pipe是关键字,调用sprintf函数,拼接一个管道名。接下来创建了一个线程,进入创建的线程1713里看看

带着两个参数进入1648,接着看

这就是一个标准的建立管道的一个过程,重点我们关注一下WriteFile那里,向管道写入,写的就是我们的传参,这应该就是加密之前的shellcode。

接下来返回到1840

返回时进入了17E2

先分配一个空间,然后进入1732

标准的从管道读,读的东西就是我们刚才写进的东西。再看158E

先开辟空间,然后将我们刚才读出来的东西与4个循环数进行异或(经过多次调试,发现这四个数每次都是不一样的),最后得到一串解密后的数据,我们有理由猜测,这解密后的数据就应该是执行的shellcode,最后开启线程执行shellcode。当然,光猜是不行的,我们要进行动态调试到内存里去抓抓看。接下来打开x32dbg进行动态调试。

我们跟进到40158E里

 

异或之后的数据存储到了ds:[edi+ecx],我们到内存里跟一下

 

我们可以这是一个非常典型的PE文件,也就是外层加载器加载了一个dll文件,这个dll文件应该是CS马实现功能的主要地方。

至此,我们外层的加载器分析告一段落。

 

内层shellcode分析

进入到StartAddress函数里,有一个jmp eax,会直接跳到我们刚才读出来的DLL,它里面的函数是这样的

第一个call不用太看,call ebx大概看了一下,开辟了一段空间,把这一段的数据写进去,然后下一个call eax转到另一个地方开始执行,这个地方就是我们dll的入口点了。

一点点往里跟踪,看看我们能不能找到有什么有用的信息

网络请求行为:

 

 

设置休眠:

 

这里跟了一下,发现有个sleep函数,应该是与默认心跳有关那里。

 

操作相关:

注意这里,我们有一个InternetReadFile,把返回值读到eax里,这个地方就是判断你输入了什么指令,对应这几种情况

程序的大体逻辑就是这样。

至此,我们已经对CS马的运行逻辑有了基本的了解。

 

不同生成方法对比

当然,我们只是分析了一种的情况,分段的马外层是一样的,但内层有区别,我们简单看一下,

首先看一下解密后的shellcode

很明显和之前不一样了

循环的在获取API

发起请求,用virtualAlloc开辟一段空间,然后不断的用InternetReadfile读取文件,最后得到的dll就和上面的差不多了。

 

 

经过分析我们发现,CS的马主要的一个加载方式是用加载器解密shellcode,然后运行dll,所有主要功能都在dll里面,理论上加载器我们可以随意更换的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值